home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Glitch Apple Disk Collection
/
2014.glitch.apple.collection.zip
/
indexed
/
9B.DSK
/
NUKEWAR.bas
< prev
next >
Wrap
BASIC Source File
|
2014-09-09
|
12KB
|
256 lines
10 DIM M%(63,1),MS%(63,1),S%(1),MB%(1),BB%(1),SB%(1),AB%(1),BA%(1),FA%(1),SA%(1),AA%(1)
20 DIM MT%(7),BF%(2),N$(1)
30 S$ = "CMBSA*.":Q1% = 0:Q2% = 0:AM% = 165:BF%(2) = 0
40 FOR I = 0 TO 1:MB%(I) = 0:BB%(I) = 0:SB%(I) = 0:AB%(I) = 0:BA%(I) = 0:FA%(I) = 0:SA%(I) = 0:AA%(I) = 0:BF%(I) = 0: NEXT
50 DEF FN R(X) = INT(X * RND(1))
60 DEF FN M8(X) = X -8 * INT(X/8)
100 TEXT : HOME : VTAB 8: PRINT TAB( 14);"** NUKEWAR **": PRINT
110 PRINT TAB( 12);"COPYRIGHT 1980 BY": PRINT
120 PRINT TAB( 15);"AVALON HILL": PRINT TAB( 11);"MICROCOMPUTER GAMES"
130 VTAB 24: INPUT "YOUR COUNTRY'S NAME? ";N$(0)
140 INPUT "ENEMY COUNTRY'S NAME? ";N$(1)
150 CALL -936: POKE 34,20: VTAB 1: PRINT TAB( 3);N$(0);: PRINT TAB( 26);N$(1)
160 VTAB 3: PRINT TAB( 17);"COLD WAR"
170 VTAB 5: HTAB 3:A$ = "A B C D E F G H": PRINT A$;: HTAB 26: PRINT A$:A$ = " . . . . . . . ."
180 FOR I = 1 TO 8: VTAB 6 +I: HTAB 1: PRINT I;A$;" ";I;A$: NEXT
190 Y% = 1955 + FN R(10):M9% = FN R(33):Y0% = Y%
200 FOR I = 1956 TO Y%:AM% = INT(.91 *AM%): NEXT
270 FOR I = 0 TO 63: FOR J = 0 TO 1:M%(I,J) = 0:MS%(I,J) = 0: NEXT : NEXT : FOR I = 0 TO 1: FOR J = 1 TO 10
280 L = FN R(64): IF M%(L,I) THEN 280
285 M%(L,I) = 1 +(J >8) +(J >9): IF NOT I THEN GOSUB 5200
290 NEXT : NEXT
300 Y% = Y% +1: GOSUB 5300:AM% = INT(.91 *AM%)
310 INPUT "COLD WAR ORDERS? ";A$: IF A$ = "W" THEN 550
315 B% = 2:S%(0) = 8: IF A$ = "S" THEN B% = 1:S%(0) = 24
320 IF FN R(100) <Y% -Y0% THEN 590
335 I = 0: FOR J = 1 TO B%
340 INPUT "TYPE OF BASE TO BUILD? ";A$
350 T% = 2 *(A$ = "M") +3 *(A$ = "B") +4 *(A$ = "S" AND Y% >1964) +5 *(A$ = "A" AND Y% >1969)
360 IF NOT T% THEN PRINT "IMPROPER TYPE. TRY AGAIN.": GOTO 340
370 INPUT "LOCATION TO BUILD BASE? ";A$: GOSUB 5400: IF L = -1 THEN 385
380 IF NOT (M%(L,I) OR ((T% = 4) AND (L >8) AND (L <55) AND ( FN M8(L +1) >1))) THEN 390
385 PRINT "IMPROPER LOCATION.": GOTO 370
390 M%(L,I) = T%: GOSUB 5200: NEXT
400 B% = 1:S%(1) = 24: IF FN R(10) THEN B% = 2:S%(1) = 8
410 I = 1:J = 0
420 J = J +1:I1% = 2: IF FN R(100) <M9% THEN 427
421 IF Y% <1965 THEN I1% = 2 +( FN R(4) <3)
422 IF Y% >1964 AND Y% <1970 THEN L = FN R(9):I1% = 2 +(L <8) +(L <5)
425 IF Y% >1969 THEN L = FN R(16):I1% = 2 +(L <15) +(L <12) +(L <7)
427 K% = 0
430 K% = K% +1
435 L = FN R(64): IF I1% = 4 AND L >8 AND L <55 AND FN M8(L +1) >1 THEN 435
440 IF NOT M%(L,I) THEN 450
441 IF K% = 20 THEN 580
442 GOTO 430
450 M%(L,I) = I1%: IF J <B% THEN 420
460 FOR I = 0 TO 1: FOR J = 1 TO S%( NOT I):L = FN R(64):MS%(L,I) = M%(L,I): IF I THEN GOSUB 5200
475 NEXT : NEXT
480 FOR I = 0 TO 1: FOR L = 0 TO 63:T% = M%(L,I): IF FN R(500) OR T% <2 OR T% >5 THEN 540
490 IF I THEN PRINT "<CTRL-G>"
495 PRINT "<CTRL-G>NUCLEAR ACCIDENT IN ";N$(I);"!"
500 GOSUB 10005:I = NOT I
505 R% = -1 + FN R(3): IF (R% = -1 AND FN M8(L) = 0) OR (R% = 1 AND FN M8(L) = 7) THEN 540
510 U% = -1 + FN R(3): IF (U% = -1 AND L <8) OR (U% = 1 AND L >55) THEN 540
515 IF NOT (R% OR U%) THEN 540
520 L = L +R% +8 *U%: GOSUB 10005:L = L -R% -8 *U%:I = NOT I
540 NEXT : NEXT :Q2% = 0: GOTO 300
550 Q1% = 1:SU% = 0: IF FN R(4) >0 THEN 600
551 PRINT "ORDER TO FIRST STRIKE HAS BEEN DIS- OBEYED.": IF FN R(100) <Y% -Y0% THEN 590
552 Q1% = 0: GOTO 400
580 Y% = Y% +1
590 Q2% = 1
600 PRINT "<CTRL-G><CTRL-G><CTRL-G><CTRL-G><CTRL-G>": GOSUB 5300: VTAB 3: HTAB 17: PRINT " ";
610 FLASH : HTAB 18: PRINT "HOT";: HTAB 22: PRINT "WAR": NORMAL
615 HOME
620 Q3% = Q1%:Q4% = Q2%: IF S%(0) = 24 THEN Q1% = 1
625 Q% = Q1%:W% = 0
630 FOR I = 0 TO 1: FOR L = 0 TO 63:T% = M%(L,I): IF T% <2 OR T% = 6 THEN 730
635 ON T% -1 GOTO 640,660,680,700
640 MB%(I) = MB%(I) +1: GOTO 730
660 IF FN R(10) > = 1 +2 *Q% THEN BB%(I) = BB%(I) +1: GOTO 730
670 P% = 5 + FN R(4):C% = FN R(P% +1):P% = P% -C%:BA%(I) = BA%(I) +P%:FA%(I) = FA%(I) +C%: GOTO 720
680 IF FN R(10) > = 5 +Q% THEN SB%(I) = SB%(I) +1: GOTO 730
690 SA%(I) = SA%(I) +1: GOTO 720
700 IF FN R(100) > = 25 +25 *Q% THEN AB%(I) = AB%(I) +1: GOTO 730
710 AA%(I) = AA%(I) +5 + FN R(4)
720 GOSUB 7040
730 NEXT :Q% = Q2%: NEXT
740 IF NOT (BB%(0) +MB%(0) +SB%(0) +AB%(0)) THEN Q1% = 0
750 IF NOT (BB%(1) +MB%(1) +SB%(1) +AB%(1)) THEN Q2% = 0
760 HTAB 1: VTAB 16: IF BB%(0) +BA%(0) THEN PRINT "BOMBERS AIRBORNE"
770 HTAB 1: VTAB 17: IF BB%(0) +FA%(0) THEN PRINT "FIGHTERS AIRBORNE"
780 HTAB 1: VTAB 18: IF SB%(0) +SA%(0) THEN PRINT "MISSILE SUBS AT SEA"
790 HTAB 1: VTAB 19: IF AB%(0) +AA%(0) THEN PRINT "ABM'S ON ALERT"
795 GOSUB 5500
800 IF Q1% <1 THEN 920
805 I = 0
850 INPUT "BASE TO ACTIVATE? ";A$: GOSUB 5400
860 IF L = -1 THEN PRINT "WRONG LOCATION.": GOTO 850
870 T% = M%(L,I): IF T% <2 OR T% = 6 THEN 850
875 ON T% -1 GOTO 880,890,900,910
880 GOSUB 6000: GOTO 920
890 GOSUB 7000: GOTO 915
900 GOSUB 8000: GOTO 915
910 GOSUB 9000
915 GOSUB 5500
920 IF Q2% <1 THEN 980
921 I = 1:L = FN R(64)
930 L = L +1:L = L *(L <64):T% = M%(L,I): IF T% <2 OR T% = 6 THEN 930
935 ON T% -1 GOTO 940,950,960,970
940 GOSUB 6000: GOTO 980
950 GOSUB 7000: GOTO 980
960 GOSUB 8000: GOTO 980
970 GOSUB 9000
980 FOR I = 0 TO 1: IF ( NOT I AND NOT Q1%) OR (I AND NOT Q2%) THEN 1050
985 FOR L = 0 TO 63:T% = M%(L,I): IF T% <2 OR T% = 6 THEN 1040
990 ON T% -1 GOTO 1000,1010,1020,1030
1000 IF FN R(100) >14 THEN 1040
1001 GOSUB 6000: GOTO 1040
1010 IF FN R(10) THEN 1040
1011 GOSUB 7000: GOTO 1035
1020 IF FN R(100) >4 THEN 1040
1021 GOSUB 8000: GOTO 1035
1030 IF FN R(100) >24 THEN 1040
1031 GOSUB 9000
1035 IF NOT I THEN GOSUB 5500
1040 NEXT
1050 NEXT
1060 FOR I = 0 TO 1:P7% = SA%(I): IF NOT P7% THEN 1105
1061 FOR P8 = 1 TO P7%
1065 IF FN R(100) > = 5 *W% THEN 1100
1066 J = 5 + FN R(4):SA%(I) = SA%(I) -1
1070 IF I THEN 1090
1071 PRINT "MISSILE SUB ";SB%(I) +SA%(I) +1;" ON STATION."
1080 PRINT J;" MISSILES TO FIRE.": PRINT "TARGETS:";
1090 GOSUB 6030
1100 NEXT
1105 NEXT
1110 FOR I = 0 TO 1: IF FN R(10) > = W% OR NOT BA%(I) THEN 1220
1120 IF BA%(I) <5 THEN J = BA%(I)
1122 IF BA%(I) > = 5 THEN J = 4 + FN R(BA%(I) -3)
1123 BA%(I) = BA%(I) -J
1130 PRINT J;" BOMBERS ATTACK ";N$( NOT I);"."
1140 IF I = 1 AND FA%(0) +AA%(0) THEN PRINT "AIR DEFENSE COMMAND ALERT!"
1150 IF NOT FA%( NOT I) THEN 1170
1151 IF FN R(10) <9 THEN J = J -1
1152 IF NOT J THEN 1210
1160 IF FN R(10) <8 THEN FA%( NOT I) = FA%( NOT I) -1
1161 GOTO 1150
1170 IF NOT AA%( NOT I) THEN 1190
1171 AA%( NOT I) = AA%( NOT I) -1
1180 IF FN R(2) THEN J = J -1
1181 IF NOT J THEN 1210
1182 GOTO 1170
1190 PRINT J;" BOMBERS SURVIVE OVER ";N$( NOT I);"."
1200 FOR J2 = 1 TO J: GOSUB 12010: GOSUB 10000: NEXT : GOSUB 5500: GOTO 1220
1210 PRINT "ALL BOMBERS DESTROYED BY AIR DEFENSE.": GOSUB 5500
1220 NEXT
1230 Q% = 0:Q5% = SA%(0) *6 +BA%(0):Q6% = SA%(1) *6 +BA%(1)
1235 FOR I = 0 TO 1:Q2% = 0:MB%(I) = 0:BB%(I) = 0:SB%(I) = 0:AB%(I) = 0: FOR L = 0 TO 63
1240 T% = M%(L,I): IF T% <2 OR T% = 6 THEN 1300
1241 ON T% -1 GOTO 1250,1260,1270,1280
1250 MB%(I) = MB%(I) +1: GOTO 1290
1260 BB%(I) = BB%(I) +1: GOTO 1290
1270 SB%(I) = SB%(I) +1: GOTO 1290
1280 AB%(I) = AB%(I) +1
1290 Q% = Q% +1:Q2% = Q2% +1
1300 NEXT : NEXT :Q1% = Q% -Q2%:Q% = 3 *Q% +Q5% +Q6%:Q5% = Q1% +Q5%/3:Q6% = Q2% +Q6%/3: IF NOT Q% THEN 1370
1310 W% = W% +1: IF FN R(2) THEN 800
1320 PRINT "THE PREMIER OF ";N$(1): PRINT "IS ON THE HOT LINE"
1330 INPUT "DO YOU WISH TO NEGOTIATE? ";A$
1340 IF MID$ (A$,1,1) < >"Y" THEN 800
1341 IF 100 *(Q5% +1)/(Q6% +1) > FN R(100) THEN PRINT "NEGOTIATIONS SUCEED.": GOTO 1380
1350 PRINT "NEGOTIATIONS FAIL.": GOTO 800
1370 PRINT "ALL WEAPONS ARE EXPENDED."
1380 PRINT "NUCLEAR WAR IS OVER.": HTAB 17: VTAB 3: PRINT " ": HTAB 1: VTAB 24
1390 POKE 34,15
1400 Q% = 0: FOR I = 0 TO 1:P2% = 0: FOR L = 0 TO 63:T% = M%(L,I): IF I THEN GOSUB 5200
1410 IF T% = 6 THEN 1420
1415 Q% = Q% +1:P2% = P2% +1: IF T% = 1 THEN Q% = Q% +10:P2% = P2% +10
1420 NEXT : NEXT :P1% = Q% -P2%: IF FN R(2) *Q3% THEN 1430
1421 Q3% = 0
1430 IF FN R(2) *Q4% THEN 1440
1431 Q4% = 0
1440 IF Q3% >0 THEN PRINT "WORLD OPINION IS AGAINST ";N$(0);"."
1450 PRINT N$(0);"'S POPULATION: ";P1%;",000,000"
1460 IF Q4% >0 THEN PRINT "WORLD OPINION IS AGAINST ";N$(1);"."
1470 PRINT N$(1);"'S POPULATION: ";P2%;",000,000"
1480 S% = (P1% +1) *(Q4% +1):R% = (P2% +1) *(Q3% +1): IF S% >R% THEN 1490
1481 R% = 10 *R%/S%:S% = 1:P% = P2%: GOTO 1500
1490 R% = 10 *S%/R%:S% = 0:P% = P1%
1500 IF P% <29 THEN 1510
1501 IF R% > = 30 THEN 1520
1502 IF R% > = 20 THEN 1530
1503 IF R% > = 15 THEN 1540
1510 PRINT "NEITHER COUNTRY GAINS ADVANTAGE.": GOTO 1560
1520 PRINT "TOTAL";: GOTO 1550
1530 PRINT "MAJOR";: GOTO 1550
1540 PRINT "MINOR";
1550 PRINT " VICTORY FOR ";N$(S%);"."
1560 INPUT "AGAIN (Y/N)? ";A$: IF A$ < >"Y" THEN TEXT : HOME : END
1570 GOTO 30
5200 VTAB 7 + INT(L/8): HTAB 3 +2 * FN M8(L) +23 *I
5205 VTAB 7 + INT(L/8): HTAB 3 +2 * FN M8(L) +23 *I
5210 PRINT MID$ (S$,M%(L,I) +7 *( NOT M%(L,I)),1)
5220 HTAB 1: VTAB 24: RETURN
5300 VTAB 2: HTAB 19: PRINT Y%: HTAB 1: VTAB 24: RETURN
5400 IF LEN(A$) <2 THEN 5420
5401 L = ASC( MID$ (A$,2,1)) -49: IF L <0 OR L >7 THEN 5420
5402 K% = ASC( MID$ (A$,1,1)) -65: IF K% <0 OR K% >7 THEN 5420
5410 L = 8 *L +K%: RETURN
5420 L = -1: RETURN
5500 VTAB 16: HTAB 21: PRINT " ";: HTAB 21: IF BB%(0) +BA%(0) THEN PRINT BA%(0)
5510 VTAB 17: HTAB 21: PRINT " ";: HTAB 21: IF BB%(0) +FA%(0) THEN PRINT FA%(0)
5520 VTAB 18: HTAB 21: PRINT " ";: HTAB 21: IF SB%(0) +SA%(0) THEN PRINT SA%(0)
5530 VTAB 19: HTAB 21: PRINT " ";: HTAB 21: IF AB%(0) +AA%(0) THEN PRINT AA%(0)
5540 HTAB 1: VTAB 24: RETURN
6000 J = 5 + FN R(4): GOSUB 7040:MB%(I) = MB%(I) -1: IF I THEN 6030
6010 PRINT J;" MISSILES READY AT BASE ";MB%(0) +1;".": PRINT "TARGETS:";
6030 FOR J2 = 0 TO J -1: ON I +1 GOSUB 11000,12000
6032 MT%(J2) = L: NEXT
6035 IF I AND AA%(0) THEN PRINT "<CTRL-G><CTRL-G>ABM ALERT: INCOMING ICBM'S"
6040 FOR J2 = 0 TO J -1:L = MT%(J2): IF NOT AA%( NOT I) OR NOT FN R(10) THEN 6060
6050 AA%( NOT I) = AA%( NOT I) -1: IF FN R(10) THEN 6090
6060 IF FN R(100) > = AM% THEN 6080
6061 R% = -1 + FN R(3):U% = -1 + FN R(3)
6070 IF (R% = -1 AND FN M8(L) = 0) OR (R% = 1 AND FN M8(L) = 7) THEN 6090
6075 IF (U% = -1 AND L <8) OR (U% = 1 AND L >55) THEN 6090
6076 L = L +R% +8 *U%
6080 GOSUB 10000
6090 NEXT : IF NOT I THEN PRINT
6091 GOSUB 5500: RETURN
7000 J = 5 + FN R(4):P% = FN R(J +1): IF I THEN 7030
7010 PRINT J;" PLANES READY AT AIRBASE ";BB%(0);".":BB%(0) = BB%(0) -1
7020 INPUT "NUMBER TO ARM AS FIGHTERS? ";P%: IF P% >J THEN P% = J
7021 IF P% <0 THEN P% = 0
7030 BA%(I) = BA%(I) +J -P%:FA%(I) = FA%(I) +P%
7040 M%(L,I) = 0: IF NOT I THEN GOSUB 5200
7050 RETURN
8000 IF NOT I THEN PRINT "MISSILE SUB ";SB%(0);" AT SEA."
8010 GOSUB 7040:SA%(I) = SA%(I) +1:SB%(I) = SB%(I) -1: RETURN
9000 IF NOT I THEN PRINT "ABM BASE ";AB%(0);" ACTIVATED."
9010 GOSUB 7040:AA%(I) = AA%(I) +5 + FN R(4):AB%(I) = AB%(I) -1: RETURN
10000 I = NOT I
10005 T% = M%(L,I): IF I AND (T% >1) AND (T% <6) THEN Q2% = Q2% -1
10008 M%(L,I) = 6: GOSUB 5200:MS%(L,I) = 6
10010 FOR I1 = 1 TO 10:I2 = PEEK( -16336)
10020 FOR I2 = 1 TO 2: NEXT : NEXT :I = NOT I: RETURN
11000 POKE 2007 +3 *J2,186: POKE 2008 +3 *J2,96
11010 C = PEEK( -16384): IF C <127 THEN 11010
11020 POKE -16368,0: IF C <193 OR C >200 THEN 11010
11021 POKE 2008 +3 *J2,C:C = C -192
11025 POKE 2009 +3 *J2,96
11030 R = PEEK( -16384): IF R <127 THEN 11030
11040 POKE -16368,0: IF R <177 OR R >184 THEN 11030
11041 POKE 2009 +3 *J2,R:R = R -176
11045 PRINT "<CTRL-G>";
11050 L = C +8 *R -9: RETURN
12000 I1% = 0: GOTO 12030
12010 I1% = 1
12030 L1% = FN R(64):L = L1%: IF BF%(I + NOT I1%) >1 THEN RETURN
12040 L = L +1:L = L *(L <64):T% = MS%(L, NOT I): IF I1% THEN T% = M%(L, NOT I)
12051 IF (T% OR BF%(I + NOT I1%)) AND T% < >6 THEN RETURN
12060 IF L < >L1% THEN 12040
12061 BF%(I + NOT I1%) = BF%(I + NOT I1%) +1: IF BF%(I + NOT I1%) = 1 THEN 12030
12070 L = FN R(64): RETURN