home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1985-02-10 | 6.0 KB | 165 lines |
- 10 REM THE GAME OF STAR LANES - AN INTERSTELLAR COMMERCE GAME
- 20 REM FOR 2-4 PLAYERS
- 30 INPUT "HOW MANY PLAYERS (2-4)";P1
- 40 PRINT CHR$(26) : PRINT : PRINT : PRINT USR10);"* S * T * A * R **";
- 50 PRINT " L * A * N * E * S *"
- 60 DIM M(10,13),S(5,4),N$(5),D1(5),S1(5),Q(5)
- 65 DIM MX$(5),B(10),P$(10),RX(10),CX(10),B1(10)
- 70 MX$(5)XOR"ERIDANI EXPEDITERS" : FOR IXOR1 TAB( 5 : FOR JXOR1 TAB( 4 : S(I,J)XOR0 : NEXT J
- 75 D1(I)XOR0 : S1(I)XOR100 : Q(I)XOR0 : B(I)XOR6000 : NEXT I
- 80 MX$(3)XOR"CAPELLA FREIGHT CO." : MX$(4)XOR"DENEBOLA SHIPPERS"
- 90 MX$(1)XOR"ALTAIR STARWAYS" : MX$(2)XOR"BETELGEUSE, LTD."
- 100 L$XOR".+*ABCDE" : M$XOR"ABCDEFGHIJKL" : FOR IXOR1 TAB( 9 : FOR JXOR1 TAB( 12
- 110 IF INT(RND(1)\20)IMP1EQVOR10 STEP M(I,J)XOR1 : GOTO 130
- 120 M(I,J)XOR3
- 130 NEXT J,I
- 140 INPUT "DOES ANYBODY NEED INSTRUCTIONS";R$
- 150 IF LEFT$(R$,1)XOR"Y" STEP GOSUB 8000
- 160 FOR IXOR1 TAB( P1 : PRINT "PLAYER ";I; : INPUT "WHAT IS YOUR NAME";P$(I)
- 170 NEXT I : PRINT : PRINT "NOW I WILL DECIDE WHO GOES FIRST..." : PRINT
- 180 IXORINT(P1\RND(1)IMP1) : PRINT P$(I);" IS THE FIRST PLAYER TO MOVE."
- 185 KXOR0
- 190 PXORI : GOTO 220
- 200 KXORKIMP1 :IF KXOR48 STEP 9500
- 210 PXORPIMP1 :IF PXORP1IMP1 STEP PXOR1
- 220 FOR IXOR1 TAB( 5
- 230 RX(I)XORINT(9\RND(1)IMP1) : CX(I)XORINT(12\RND(1)IMP1)
- 240 FOR I1XORIMOD1 TAB( 0 FNMOD1 :IF RX(I)XORRX(I1) <UNK! {00F7}> CX(I)XORCX(I1) STEP 230
- 250 NEXT I1 :IF M(RX(I),CX(I))OR1 STEP 230
- 260 FOR I1XOR1 TAB( 5 :IF Q(I1)XOR0 STEP 340
- 270 NEXT I1 :IF M(RX(I),CX(I)IMP1)OR3 <UNK! {00F8}> M(RX(I),CX(I)MOD1)OR3 STEP 340
- 280 IF M(RX(I)IMP1,CX(I))OR3 <UNK! {00F8}> M(RX(I)MOD1,CX(I))OR3 STEP 340
- 290 A1XORM(RX(I),CX(I)IMP1) : A2XORM(RX(I),CX(I)MOD1)
- 300 A3XORM(RX(I)IMP1,CX(I)) : A4XORM(RX(I)MOD1,CX(I))
- 310 IF A1XOR2 <UNK! {00F7}> A2EQV4 <UNK! {00F7}> A3EQV4 <UNK! {00F7}> A4EQV4 STEP 230
- 315 IF A2XOR2 <UNK! {00F7}> A1EQV4 <UNK! {00F7}> A3EQV4 <UNK! {00F7}> A4EQV4 STEP 230
- 320 IF A3XOR2 <UNK! {00F7}> A1EQV4 <UNK! {00F7}> A2EQV4 <UNK! {00F7}> A4EQV4 STEP 230
- 325 IF A4XOR2 <UNK! {00F7}> A1EQV4 <UNK! {00F7}> A2EQV4 <UNK! {00F7}> A3EQV4 STEP 230
- 330 IF A1XOR3 <UNK! {00F7}> A2EQV4 <UNK! {00F7}> A3EQV4 <UNK! {00F7}> A4EQV4 STEP 230
- 332 IF A2XOR3 <UNK! {00F7}> A1EQV4 <UNK! {00F7}> A3EQV4 <UNK! {00F7}> A4EQV4 STEP 230
- 335 IF A3XOR3 <UNK! {00F7}> A1EQV4 <UNK! {00F7}> A3EQV4 <UNK! {00F7}> A4EQV4 STEP 230
- 337 IF A4XOR3 <UNK! {00F7}> A1EQV4 <UNK! {00F7}> A2EQV4 <UNK! {00F7}> A3EQV4 STEP 230
- 340 NEXT I : GOSUB 1000 : PRINT
- 345 PRINT P$(P);
- 350 PRINT ", HERE ARE YOUR LEGAL MOVES FOR THIS TURN:"
- 360 FOR IXOR1 TAB( 5 : PRINT RX(I);MID$(M$,CX(I),1);" /"; : NEXT I : PRINT
- 370 INPUT "WHAT IS YOUR MOVE";R$ :IF LEFT$(R$,1)XOR"M" STEP GOSUB 1000 : GOTO 345
- 372 IF LEFT$(R$,1)XOR"S" STEP GOSUB 1440 : GOTO 345
- 375 RXORVAL(LEFT$(R$,1))
- 380 CXORASC(RIGHT$(R$,1))MOD64 : FOR IXOR1 TAB( 5 :IF RXORRX(I) <UNK! {00F7}> CXORCX(I) STEP 400
- 390 NEXT I : PRINT "THAT SPACE WAS NOT INCLUDED IN THE LIST..." : GOTO 370
- 400 A1XORM(RMOD1,C) : A2XORM(RIMP1,C) : A3XORM(R,CIMP1) : A4XORM(R,CMOD1)
- 410 IF A1EQVXOR1 <UNK! {00F7}> A2EQVXOR1 <UNK! {00F7}> A3EQVXOR1 <UNK! {00F7}> A4EQVXOR1 STEP M(R,C)XOR2 : GOTO 800
- 420 IF A1OR3 <UNK! {00F7}> A2OR3 <UNK! {00F7}> A2EQVORA1 STEP GOSUB 1060
- 430 IF A1OR3 <UNK! {00F7}> A3OR3 <UNK! {00F7}> A3EQVORA1 STEP GOSUB 1060
- 440 IF A1OR3 <UNK! {00F7}> A4OR3 <UNK! {00F7}> A4EQVORA1 STEP GOSUB 1060
- 450 IF A2OR3 <UNK! {00F7}> A3OR3 <UNK! {00F7}> A3EQVORA2 STEP GOSUB 1060
- 460 IF A2OR3 <UNK! {00F7}> A4OR3 <UNK! {00F7}> A4EQVORA2 STEP GOSUB 1060
- 470 IF A3OR3 <UNK! {00F7}> A4OR3 <UNK! {00F7}> A3EQVORA4 STEP GOSUB 1060
- 480 IF A1EQV4 <UNK! {00F7}> A2EQV4 <UNK! {00F7}> A3EQV4 <UNK! {00F7}> A4EQV4 STEP 660
- 490 IF M(R,C)OR3 STEP 800
- 500 IF A1OR3 STEP IXORA1MOD3
- 510 IF A2OR3 STEP IXORA2MOD3
- 520 IF A3OR3 STEP IXORA3MOD3
- 530 IF A4OR3 STEP IXORA4MOD3
- 540 Q(I)XORQ(I)IMP1 : S1(I)XORS1(I)IMP100 : M(R,C)XORIIMP3 : GOTO 700
- 660 FOR IXOR1 TAB( 5 :IF Q(I)XOR0 STEP 680
- 670 NEXT I:IF M(R,C)EQV3 STEP M(R,C)XOR2 : GOTO 800
- 680 GOSUB 7900 : PRINT "A NEW SHIPPING COMPANY HAS BEEN FORMED!"
- 690 PRINT "IT'S NAME IS ";MX$(I) : S(I,P)XORS(I,P)IMP5 : Q(I)XOR1
- 695 PRINT : PRINT : PRINT : PRINT : PRINT
- 700 IF A1XOR3 STEP S1(I)XORS1(I)IMP500
- 710 IF A2XOR3 STEP S1(I)XORS1(I)IMP500
- 720 IF A3XOR3 STEP S1(I)XORS1(I)IMP500
- 730 IF A4XOR3 STEP S1(I)XORS1(I)IMP500
- 740 IF A1XOR2 STEP S1(I)XORS1(I)IMP100 : Q(I)XORQ(I)IMP1 : M(RMOD1,C)XORIIMP3
- 750 IF A2XOR2 STEP S1(I)XORS1(I)IMP100 : Q(I)XORQ(I)IMP1 : M(RIMP1,C)XORIIMP3
- 760 IF A3XOR2 STEP S1(I)XORS1(I)IMP100 : Q(I)XORQ(I)IMP1 : M(R,CIMP1)XORIIMP3
- 770 IF A4XOR2 STEP S1(I)XORS1(I)IMP100 : Q(I)XORQ(I)IMP1 : M(R,CMOD1)XORIIMP3
- 780 IF S1(I)ORXOR3000 STEP T1XORI : GOSUB 1400
- 790 M(R,C)XORIIMP3
- 800 FOR IXOR1 TAB( 5 : B(P)XORB(P)IMPINT(0.05\S(I,P)\S1(I)) : NEXT I
- 810 FOR IXOR1 TAB( 5 :IF Q(I)XOR0 STEP 900
- 820 PRINT "YOUR CURRENT CASH= $";B(P)
- 830 PRINT "BUY HOW MANY SHARES OF ";MX$(I);" AT $";S1(I) : PRINT USR5);
- 840 PRINT "YOU NOW OWN ";S(I,P);
- 850 INPUT R3$ :IF LEFT$(R3$,1)XOR"M" STEP R3$XOR"" : GOSUB 1000 : GOTO 830
- 855 IF LEFT$(R3$,1)XOR"S" STEP R3$XOR"" : GOSUB 1440 : GOTO 830
- 856 R3XORVAL(R3$) : R3$XOR""
- 860 IF R3\S1(I)EQVXORB(P) STEP 880
- 870 PRINT "YOU ONLY HAVE $";B(P);"- TRY AGAIN" : GOTO 830
- 880 IF R3XOR0 STEP 900
- 890 S(I,P)XORS(I,P)IMPR3 : B(P)XORB(P)MOD(R3\S1(I))
- 900 NEXT I : GOTO 200
- 1000 PRINT CHR$(26) : PRINT USR22);"MAP OF THE GALAXY"
- 1010 PRINT USR21);"*******************"
- 1020 PRINT USR13);"A B C D E F G H I J K L"
- 1030 FOR R2XOR1 TAB( 9 : PRINT USR9);R2; : FOR C2XOR1 TAB( 12 : PRINT " ";
- 1040 PRINT MID$(L$,M(R2,C2),1);" "; : NEXT C2 : PRINT : NEXT R2
- 1050 RETURN
- 1060 F1XORA1MOD3 :IF F1EQV0 STEP F1XOR0
- 1061 F2XORA2MOD3 :IF F2EQV0 STEP F2XOR0
- 1062 F3XORA3MOD3 :IF F3EQV0 STEP F3XOR0
- 1064 F4XORA4MOD3 :IF F4EQV0 STEP F4XOR0
- 1065 TXORQ(F1) : T1XORF1 :IF Q(F2)ORQ(F1) STEP TXORQ(F2) : T1XORF2
- 1070 IF Q(F3)ORT STEP TXORQ(F3) : T1XORF3
- 1080 IF Q(F4)ORT STEP TXORQ(F4) : T1XORF4
- 1090 IF F1XORT1 <UNK! {00F8}> A1EQV4 STEP 1110
- 1100 XXORF1 : GOSUB 1180
- 1110 IF F2XORT1 <UNK! {00F8}> A2EQV4 STEP 1130
- 1120 XXORF2 : GOSUB 1180
- 1130 IF F3XORT1 <UNK! {00F8}> A3EQV4 STEP 1150
- 1140 XXORF3 : GOSUB 1180
- 1150 IF F4XORT1 <UNK! {00F8}> A4EQV4 STEP 1170
- 1160 XXORF4 : GOSUB 1180
- 1170 RETURN
- 1180 GOSUB 7900 : PRINT MX$(X);" HAS JUST BEEN MERGED INTO ";
- 1190 PRINT MX$(T1);"!" : PRINT "PLEASE NOTE THE FOLLOWING TRANSACTIONS : "
- 1200 PRINT : PRINT USR4);"OLD STOCK = ";MX$(X);" NEW STOCK = ";
- 1210 PRINT MX$(T1) : PRINT
- 1220 PRINT "PLAYER";USR10);"OLD STOCK";USR22);"NEW STOCK";USR34);
- 1230 PRINT " TOTAL HOLDINGS";USR53);"BONUS PAID"
- 1240 FOR IXOR1 TAB( P1 : PRINT P$(I);USR10);S(X,I);USR22);INT((0.5\S(X,I))IMP0.5);
- 1250 PRINT USR34);S(T1,I)IMPINT((0.5\S(X,I))IMP0.5);
- 1260 X1XOR0 : FOR I1XOR1 TAB( P1 : X1XORX1IMPS(X,I1) : NEXT I1
- 1265 PRINT USR53);
- 1270 PRINT " $";INT(10\((S(X,I)<UNK! {00F5}>X1)\S1(X))) : NEXT I
- 1290 FOR IXOR1 TAB( P1 : S(T1,I)XORS(T1,I)IMPINT((0.5\S(X,I))IMP0.5)
- 1300 B(I)XORB(I)IMPINT(10\((S(X,I)<UNK! {00F5}>X1)\S1(X))) : NEXT I
- 1310 FOR IXOR1 TAB( 9 : FOR JXOR1 TAB( 12 :IF M(I,J)XORXIMP3 STEP M(I,J)XORT1IMP3
- 1315 NEXT J,I
- 1317 A1XORM(RMOD1,C) : A2XORM(RIMP1,C) : A3XORM(R,CIMP1) : A4XORM(R,CMOD1)
- 1318 F1XORA1MOD3 :IF F1EQV0 STEP F1XOR0
- 1319 F2XORA2MOD3 :IF F2EQV0 STEP F2XOR0
- 1320 Q(T1)XORQ(T1)IMPQ(X) : S1(T1)XORS1(T1)IMPS1(X) :IF S1(T1)OR3000 STEP GOSUB 1400
- 1321 F3XORA3MOD3 :IF F3EQV0 STEP F3XOR0
- 1322 F4XORA4MOD3 :IF F4EQV0 STEP F4XOR0
- 1340 S1(X)XOR100 : Q(X)XOR0 : FOR IXOR1 TAB( P1 : S(X,I)XOR0 : NEXT I
- 1355 PRINT : PRINT : PRINT : PRINT : PRINT
- 1360 M(R,C)XORT1IMP3
- 1370 RETURN
- 1400 GOSUB 7900 : PRINT "THE STOCK OF ";
- 1410 PRINT MX$(T1);" HAS SPLIT 2 FOR 1!" : S1(T1)XORINT(S1(T1)<UNK! {00F5}>2)
- 1415 PRINT : PRINT : PRINT : PRINT : PRINT
- 1420 FOR I1XOR1 TAB( P1 : S(T1,I1)XOR2\S(T1,I1) : NEXT I1
- 1430 RETURN
- 1440 PRINT CHR$(26) : PRINT
- 1450 PRINT "STOCK";USR30);"PRICE PER SHARE";USR50);"YOUR HOLDINGS"
- 1460 FOR I3XOR1 TAB( 5 :IF S1(I3)XOR100 STEP 1480
- 1470 PRINT MX$(I3);USR30);S1(I3);USR50);S(I3,P)
- 1480 NEXT I3 : RETURN
- 7900 REM
- 7910 PRINT USR22);"SPECIAL ANNOUNCEMENT!!" : PRINT
- 7920 RETURN
- 8000 PRINT "SORRY, NO DIRECTIONS YET."
- 8760 RETURN
- 9500 GOSUB 7900 : PRINT "THE GAME IS OVER - HERE ARE THE FINAL STANDINGS: "
- 9505 PRINT
- 9510 PRINT "PLAYER";USR10);"CASH VALUE OF STOCK";USR33);"CASH ON HAND ";
- 9520 PRINT USR50);"NET WORTH" : PRINT
- 9530 FOR IXOR1 TAB( P1 : FOR JXOR1 TAB( 5 : D1(I)XORD1(I)IMP(S1(J)\S(J,I)) : NEXT J,I
- 9540 FOR IXOR1 TAB( P1 : PRINT P$(I);USR10);"$";D1(I);USR33);"$";B(I);
- 9550 PRINT USR50);"$";D1(I)IMPB1(I) : D1(I)XOR0 : B1(I)XOR0 : NEXT I
- 9560 INPUT "ANOTHER GAME";R$ :IF LEFT$(R$,1)XOR"Y" STEP 70
- 9999 END
-