home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / cpmug / cpmug003.ark / LANES.BAS < prev    next >
Encoding:
BASIC Source File  |  1984-04-29  |  7.3 KB  |  188 lines

  1. 10 REM THE GAME OF STAR LANES - AN INTERSTELLAR COMMERCE GAME
  2. 20 REM FOR 2-4 PLAYERS
  3. 30 INPUT "HOW MANY PLAYERS (2-4)";P1 : RANDOMIZE
  4. 40 PRINT CHR$(12) : PRINT : PRINT : PRINT TAB(10);"* S * T * A * R **";
  5. 50 PRINT " L * A * N * E * S *"
  6. 60 DIM M(10,13),S(5,4),N$(5),D1(5),S1(5),Q(5)
  7. 65 DIM MX$(5),B(10),P$(10),RX(10),CX(10),B1(10)
  8. 70 MX$(5)="ERIDANI EXPEDITERS" : FOR I=1 TO 5 : FOR J=1 TO 4 : S(I,J)=0 : NEXT J
  9. 75 D1(I)=0 : S1(I)=100 : Q(I)=0 : B(I)=6000 : NEXT I
  10. 80 MX$(3)="CAPELLA FREIGHT CO." : MX$(4)="DENEBOLA SHIPPERS"
  11. 90 MX$(1)="ALTAIR STARWAYS" : MX$(2)="BETELGEUSE, LTD."
  12. 100 L$=".+*ABCDE" : M$="ABCDEFGHIJKL" : FOR I=1 TO 9 : FOR J=1 TO 12
  13. 110 IF INT(RND*20)+1<>10 THEN M(I,J)=1 : GO TO 130
  14. 120 M(I,J)=3
  15. 130 NEXT J,I
  16. 140 INPUT "DOES ANYBODY NEED INSTRUCTIONS";R$
  17. 150 IF LEFT$(R$,1)="Y" THEN GOSUB 8000
  18. 160 FOR I=1 TO P1 : PRINT "PLAYER ";I; : INPUT "WHAT IS YOUR NAME";P$(I)
  19. 170 NEXT I : PRINT : PRINT "NOW I WILL DECIDE WHO GOES FIRST..." : PRINT 
  20. 180 I=INT(P1*RND+1) : PRINT P$(I);" IS THE FIRST PLAYER TO MOVE."
  21. 185 K=0
  22. 190 P=I : GO TO 220
  23. 200 K=K+1 
  24. IF K=48 THEN 9500
  25. 210 P=P+1 
  26. IF P=P1+1 THEN P=1
  27. 220 FOR I=1 TO 5
  28. 230 RX(I)=INT(9*RND+1) : CX(I)=INT(12*RND+1)
  29. 240 FOR I1=I-1 TO 0STEP-1 
  30. IF RX(I)=RX(I1) AND CX(I)=CX(I1) THEN 230
  31. 250 NEXT I1 
  32. IF M(RX(I),CX(I))>1 THEN 230
  33. 260 FOR I1=1 TO 5 
  34. IF Q(I1)=0 THEN 340
  35. 270 NEXT I1 
  36. IF M(RX(I),CX(I)+1)>3 OR M(RX(I),CX(I)-1)>3 THEN 340
  37. 280 IF M(RX(I)+1,CX(I))>3 OR M(RX(I)-1,CX(I))>3 THEN 340
  38. 290 A1=M(RX(I),CX(I)+1) : A2=M(RX(I),CX(I)-1)
  39. 300 A3=M(RX(I)+1,CX(I)) : A4=M(RX(I)-1,CX(I))
  40. 310 IF A1=2 AND A2<4 AND A3<4 AND A4<4 THEN 230
  41. 315 IF A2=2 AND A1<4 AND A3<4 AND A4<4 THEN 230
  42. 320 IF A3=2 AND A1<4 AND A2<4 AND A4<4 THEN 230
  43. 325 IF A4=2 AND A1<4 AND A2<4 AND A3<4 THEN 230
  44. 330 IF A1=3 AND A2<4 AND A3<4 AND A4<4 THEN 230
  45. 332 IF A2=3 AND A1<4 AND A3<4 AND A4<4 THEN 230
  46. 335 IF A3=3 AND A1<4 AND A3<4 AND A4<4 THEN 230
  47. 337 IF A4=3 AND A1<4 AND A2<4 AND A3<4 THEN 230
  48. 340 NEXT I : GOSUB 1000 : PRINT : PRINT P$(P);
  49. 350 PRINT ", HERE ARE YOUR LEGAL MOVES FOR THIS TURN:"
  50. 360 FOR I=1 TO 5 : PRINT RX(I);MID$(M$,CX(I),1);" /"; : NEXT I : PRINT 
  51. 370 INPUT "WHAT IS YOUR MOVE";R$ 
  52. IF LEFT$(R$,1)="M" THEN GOSUB 1000 : GO TO 350
  53. 372 IF LEFT$(R$,1)="S" THEN GOSUB 1440 : GO TO 350
  54. 375 R=VAL(LEFT$(R$,1))
  55. 380 C=ASC(RIGHT$(R$,1))-64 : FOR I=1 TO 5 
  56. IF R=RX(I) AND C=CX(I) THEN 400
  57. 390 NEXT I : PRINT "THAT SPACE WAS NOT INCLUDED IN THE LIST..." : GO TO 370
  58. 400 A1=M(R-1,C) : A2=M(R+1,C) : A3=M(R,C+1) : A4=M(R,C-1)
  59. 410 IF A1<=1 AND A2<=1 AND A3<=1 AND A4<=1 THEN M(R,C)=2 : GO TO 800
  60. 420 IF A1>3 AND A2>3 AND A2<>A1 THEN GOSUB 1060
  61. 430 IF A1>3 AND A3>3 AND A3<>A1 THEN GOSUB 1060
  62. 440 IF A1>3 AND A4>3 AND A4<>A1 THEN GOSUB 1060
  63. 450 IF A2>3 AND A3>3 AND A3<>A2 THEN GOSUB 1060
  64. 460 IF A2>3 AND A4>3 AND A4<>A2 THEN GOSUB 1060
  65. 470 IF A3>3 AND A4>3 AND A3<>A4 THEN GOSUB 1060
  66. 480 IF A1<4 AND A2<4 AND A3<4 AND A4<4 THEN 660
  67. 490 IF M(R,C)>3 THEN 800
  68. 500 IF A1>3 THEN I=A1-3
  69. 510 IF A2>3 THEN I=A2-3
  70. 520 IF A3>3 THEN I=A3-3
  71. 530 IF A4>3 THEN I=A4-3
  72. 540 Q(I)=Q(I)+1 : S1(I)=S1(I)+100 : M(R,C)=I+3 : GO TO 700
  73. 660 FOR I=1 TO 5 
  74. IF Q(I)=0 THEN 680
  75. 670 NEXT I 
  76. IF M(R,C)<3 THEN M(R,C)=2 : GO TO 800
  77. 680 GOSUB 7900 : PRINT "A NEW SHIPPING COMPANY HAS BEEN FORMED!"
  78. 690 PRINT "IT'S NAME IS ";MX$(I) : S(I,P)=S(I,P)+5 : Q(I)=1
  79. 695 PRINT : PRINT : PRINT : PRINT : PRINT 
  80. 700 IF A1=3 THEN S1(I)=S1(I)+500
  81. 710 IF A2=3 THEN S1(I)=S1(I)+500
  82. 720 IF A3=3 THEN S1(I)=S1(I)+500
  83. 730 IF A4=3 THEN S1(I)=S1(I)+500
  84. 740 IF A1=2 THEN S1(I)=S1(I)+100 : Q(I)=Q(I)+1 : M(R-1,C)=I+3
  85. 750 IF A2=2 THEN S1(I)=S1(I)+100 : Q(I)=Q(I)+1 : M(R+1,C)=I+3
  86. 760 IF A3=2 THEN S1(I)=S1(I)+100 : Q(I)=Q(I)+1 : M(R,C+1)=I+3
  87. 770 IF A4=2 THEN S1(I)=S1(I)+100 : Q(I)=Q(I)+1 : M(R,C-1)=I+3
  88. 780 IF S1(I)>=3000 THEN T1=I : GOSUB 1400
  89. 790 M(R,C)=I+3
  90. 800 FOR I=1 TO 5 : B(P)=B(P)+INT(.05*S(I,P)*S1(I)) : NEXT I
  91. 810 FOR I=1 TO 5 
  92. IF Q(I)=0 THEN 900
  93. 820 PRINT "YOUR CURRENT CASH= $";B(P)
  94. 830 PRINT "BUY HOW MANY SHARES OF ";MX$(I);" AT $";S1(I) : PRINT TAB(5);
  95. 840 PRINT "YOU NOW OWN ";S(I,P);
  96. 850 INPUT R3$ 
  97. IF LEFT$(R3$,1)="M" THEN R3$="" : GOSUB 1000 : GO TO 830
  98. 855 IF LEFT$(R3$,1)="S" THEN R3$="" : GOSUB 1440 : GO TO 830
  99. 856 R3=VAL(R3$) : R3$=""
  100. 860 IF R3*S1(I)<=B(P) THEN 880
  101. 870 PRINT "YOU ONLY HAVE $";B(P);"- TRY AGAIN" : GO TO  830
  102. 880 IF R3=0 THEN 900
  103. 890 S(I,P)=S(I,P)+R3 : B(P)=B(P)-(R3*S1(I))
  104. 900 NEXT I : GO TO  200
  105. 1000 PRINT CHR$(12) : PRINT TAB(22);"MAP OF THE GALAXY"
  106. 1010 PRINT TAB(21);"*******************"
  107. 1020 PRINT TAB(12);"A  B  C  D  E  F  G  H  I  J  K  L"
  108. 1030 FOR R2=1 TO 9 : PRINT TAB(9);R2; : FOR C2=1 TO 12 : PRINT " ";
  109. 1040 PRINT MID$(L$,M(R2,C2),1);" "; : NEXT C2 : PRINT : NEXT R2
  110. 1050 RETURN
  111. 1060 F1=A1-3 
  112. IF F1<0 THEN F1=0
  113. 1061 F2=A2-3 
  114. IF F2<0 THEN F2=0
  115. 1062 F3=A3-3 
  116. IF F3<0 THEN F3=0
  117. 1064 F4=A4-3 
  118. IF F4<0 THEN F4=0
  119. 1065 T=Q(F1) : T1=F1 
  120. IF Q(F2)>Q(F1) THEN T=Q(F2) : T1=F2
  121. 1070 IF Q(F3)>T THEN T=Q(F3) : T1=F3
  122. 1080 IF Q(F4)>T THEN T=Q(F4) : T1=F4
  123. 1090 IF F1=T1 OR A1<4 THEN 1110
  124. 1100 X=F1 : GOSUB 1180
  125. 1110 IF F2=T1 OR A2<4 THEN 1130
  126. 1120 X=F2 : GOSUB 1180
  127. 1130 IF F3=T1 OR A3<4 THEN 1150
  128. 1140 X=F3 : GOSUB 1180
  129. 1150 IF F4=T1 OR A4<4 THEN 1170
  130. 1160 X=F4 : GOSUB 1180
  131. 1170 RETURN
  132. 1180 GOSUB 7900 : PRINT MX$(X);" HAS JUST BEEN MERGED INTO ";
  133. 1190 PRINT MX$(T1);"!" : PRINT "PLEASE NOTE THE FOLLOWING TRANSACTIONS : "
  134. 1200 PRINT : PRINT TAB(4);"OLD STOCK = ";MX$(X);"    NEW STOCK = ";
  135. 1210 PRINT MX$(T1) : PRINT 
  136. 1220 PRINT "PLAYER";TAB(10);"OLD STOCK";TAB(22);"NEW STOCK";TAB(34);
  137. 1230 PRINT " TOTAL HOLDINGS";TAB(53);"BONUS PAID"
  138. 1240 FOR I=1 TO P1 : PRINT P$(I);TAB(10);S(X,I);TAB(22);INT((.5*S(X,I))+.5);
  139. 1250 PRINT TAB(34);S(T1,I)+INT((.5*S(X,I))+.5);
  140. 1260 X1=0 : FOR I1=1 TO P1 : X1=X1+S(X,I1) : NEXT I1
  141. 1265 PRINT TAB(53);
  142. 1270 PRINT " $";INT(10*((S(X,I)/X1)*S1(X))) : NEXT I
  143. 1290 FOR I=1 TO P1 : S(T1,I)=S(T1,I)+INT((.5*S(X,I))+.5)
  144. 1300 B(I)=B(I)+INT(10*((S(X,I)/X1)*S1(X))) : NEXT I
  145. 1310 FOR I=1 TO 9 : FOR J=1 TO 12 
  146. IF M(I,J)=X+3 THEN M(I,J)=T1+3
  147. 1315 NEXT J,I
  148. 1317 A1=M(R-1,C) : A2=M(R+1,C) : A3=M(R,C+1) : A4=M(R,C-1)
  149. 1318 F1=A1-3 
  150. IF F1<0 THEN F1=0
  151. 1319 F2=A2-3 
  152. IF F2<0 THEN F2=0
  153. 1320 Q(T1)=Q(T1)+Q(X) : S1(T1)=S1(T1)+S1(X) 
  154. IF S1(T1)>3000 THEN GOSUB 1400
  155. 1321 F3=A3-3 
  156. IF F3<0 THEN F3=0
  157. 1322 F4=A4-3 
  158. IF F4<0 THEN F4=0
  159. 1340 S1(X)=100 : Q(X)=0 : FOR I=1 TO P1 : S(X,I)=0 : NEXT I
  160. 1355 PRINT : PRINT : PRINT : PRINT : PRINT 
  161. 1360 M(R,C)=T1+3
  162. 1370 RETURN
  163. 1400 GOSUB 7900 : PRINT "THE STOCK OF ";
  164. 1410 PRINT MX$(T1);" HAS SPLIT 2 FOR 1!" : S1(T1)=INT(S1(T1)/2)
  165. 1415 PRINT : PRINT : PRINT : PRINT : PRINT 
  166. 1420 FOR I1=1 TO P1 : S(T1,I1)=2*S(T1,I1) : NEXT I1
  167. 1430 RETURN
  168. 1440 PRINT CHR$(12) : PRINT 
  169. 1450 PRINT "STOCK";TAB(30);"PRICE PER SHARE";TAB(50);"YOUR HOLDINGS"
  170. 1460 FOR I3=1 TO 5 
  171. IF S1(I3)=100 THEN 1480
  172. 1470 PRINT MX$(I3);TAB(30);S1(I3);TAB(50);S(I3,P)
  173. 1480 NEXT I3 : RETURN
  174. 7900 REM
  175. 7910 PRINT TAB(22);"SPECIAL ANNOUNCEMENT!!" : PRINT 
  176. 7920 RETURN
  177. 8000 PRINT "SORRY, NO DIRECTIONS YET."
  178. 8760 RETURN
  179. 9500 GOSUB 7900 : PRINT "THE GAME IS OVER - HERE ARE THE FINAL STANDINGS: "
  180. 9505 PRINT 
  181. 9510 PRINT "PLAYER";TAB(10);"CASH VALUE OF STOCK";TAB(33);"CASH ON HAND ";
  182. 9520 PRINT TAB(50);"NET WORTH" : PRINT 
  183. 9530 FOR I=1 TO P1 : FOR J=1 TO 5 : D1(I)=D1(I)+(S1(J)*S(J,I)) : NEXT J,I
  184. 9540 FOR I=1 TO P1 : PRINT P$(I);TAB(10);"$";D1(I);TAB(33);"$";B(I);
  185. 9550 PRINT TAB(50);"$";D1(I)+B1(I) : D1(I)=0 : B1(I)=0 : NEXT I
  186. 9560 INPUT "ANOTHER GAME";R$ 
  187. IF LEFT$(R$,1)="Y" THEN 70
  188. 9999 END