home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib27b.dsk / TANK.COMBAT.bas < prev    next >
BASIC Source File  |  2023-02-26  |  22KB  |  412 lines

  1. 10  REM **********************
  2. 20  REM *     TANK.COMBAT    *
  3. 30  REM *     BY RUDY GUY    *
  4. 40  REM * COPYRIGHT (C) 1986 *
  5. 50  REM * BY MICROSPARC, INC *
  6. 60  REM * CONCORD, MA  01742 *
  7. 70  REM **********************
  8. 80  HOME : VTAB 12: HTAB 8: INVERSE : PRINT "TANK COMBAT";: NORMAL : PRINT " BY RUDY GUY": PRINT "** COPYRIGHT 1986 BY MICROSPARC, INC **"
  9. 90  IF  PEEK(104) < >64  THEN  POKE 104,64: POKE 103,1: POKE 16384,0: PRINT  CHR$(4)"RUN TANK.COMBAT"
  10. 100  PRINT  CHR$(4)"BLOAD TANK.SHAPES,A$803": POKE 232,3: POKE 233,8: ROT= 0: SCALE= 1
  11. 110  GOSUB 3660: REM  INITIALIZE SOUND ROUTINE
  12. 120  DIM A$(16,18): TEXT : HOME : VTAB 22:M$ = "TANK COMBAT BY RUDY GUY": GOSUB 3650: VTAB 23:M$ = "* COPYRIGHT 1986 BY MICROSPARC, INC *": GOSUB 3650
  13. 130  GOSUB 2780:TU = 1: GOSUB 700
  14. 140  REM  BEGIN GAME
  15. 150 MV = 0:FL = 0:HQ = 0:HS = 0:NU = 10:B$ = "C"
  16. 160  HOME :M$ = "DISPLAYING HUMAN'S MINES.": GOSUB 3650
  17. 170  FOR I = 1 TO 16: FOR J = 1 TO 18
  18. 180  IF A$(I,J) = "MI2"  THEN  XDRAW 19 AT J *14,Y +(I *9)
  19. 190  IF A$(I,J) = "AD2"  THEN HS = 6
  20. 200  IF A$(I,J) = "FD2"  THEN FL = 1
  21. 210  IF A$(I,J) = "HQ2"  THEN HQ = 1
  22. 220  IF  RIGHT$(A$(I,J),1) = "H"  THEN MV = MV +1: IF HS < >6  THEN HS = HS +1
  23. 230  NEXT J,I: IF FL = 1  THEN MV = MV *2:FL = 0
  24. 240  IF   NOT HQ  THEN HS =  INT(HS/2): IF HS = 0  THEN HS = 1
  25. 250  FOR I = 1 TO HS
  26. 260 OB$ = "SHOT #" + STR$(I): GOSUB 4120:RS = 16:RE = 1:R = 1:C = 1:SH = 37:A$ = "K": GOSUB 3710
  27. 270 HX(I) = R:HY(I) = C
  28. 280  NEXT 
  29. 290  FOR I = 1 TO HS: XDRAW 37 AT HY(I) *14,Y +(HX(I) *9): NEXT 
  30. 300  REM  MOVE TANKS
  31. 310  FOR K = 1 TO 6:TX = 0:TY = 0
  32. 320  IF XH(K) >0  THEN TX = XH(K):TY = YH(K)
  33. 330  IF TX = 0  THEN 480
  34. 340  HOME : INVERSE : VTAB 24: PRINT "MOVES REMAINING:"MV;: NORMAL : VTAB 21: HTAB 1: PRINT "NEW LOCATION FOR TANK #"K: PRINT "USE I-J-K-M TO MOVE": PRINT "<SPACE> TO PLACE TANK";
  35. 350  FOR L = 1 TO 11: XDRAW 31 AT TY *14,Y +(TX *9): FOR D = 1 TO 50: NEXT D,L:SH = 20 +K: XDRAW SH AT TY *14,Y +(TX *9)
  36. 360 R = TX:C = TY:RS = 16:RE = 1:MT = 1:A$ = "K": GOSUB 3710
  37. 370  IF R = TX  AND C = TY  THEN  XDRAW SH AT TY *14,Y +(TX *9): XDRAW 31 AT TY *14,Y +(TX *9): GOTO 480
  38. 380 MX =  ABS(TX -R):MY =  ABS(TY -C):M = MX +MY
  39. 390  IF M >3  OR M >MV  THEN  PRINT : PRINT  CHR$(7)"YOU CAN'T MOVE THAT FAR!": XDRAW SH AT YH(K) *14,Y +(XH(K) *9): XDRAW 31 AT YH(K) *14,Y +(XH(K) *9): GOSUB 3640: GOTO 340
  40. 400  IF A$(R,C) = "HQ"  THEN  XDRAW 32 AT C *14,Y +(R *9):A$(R,C) = ""
  41. 410  IF A$(R,C) = "AD"  THEN  XDRAW 33 AT C *14,Y +(R *9):A$(R,C) = "":
  42. 420  IF A$(R,C) = "FD"  THEN  XDRAW 34 AT C *14,Y +(R *9):A$(R,C) = ""
  43. 430  IF A$(R,C) = ""  THEN A$(R,C) =  STR$(K) +"H":XH(K) = R:YH(K) = C:A$(TX,TY) = "": XDRAW SH AT TY *14,Y +(TX *9): XDRAW 31 AT C *14,Y +(R *9):TX(K) = R:TY(K) = C: GOTO 460
  44. 440  IF  LEFT$(A$(R,C),1) = "M"  THEN  XDRAW SH AT TY *14,Y +(TX *9):A$(R,C) = "": FOR D = 1 TO 50: XDRAW 35 AT C *14,Y +(R *9): NEXT : HCOLOR= 3: DRAW 37 AT C *14,Y +R *9: HCOLOR= 0:XH(K) = 0:YH(K) = 0:A$(TX,TY) = "": HOME : PRINT  CHR$(7)"TANK HIT MINE AND WAS DESTROYED!": GOSUB 3640: GOTO 460
  45. 450  IF A$(R,C) < >""  THEN  HOME : PRINT  CHR$(7)"THAT SPACE IS OCCUPIED.": XDRAW SH AT YH(K) *14,Y +XH(K) *9: XDRAW 31 AT YH(K) *14,Y +XH(K) *9: GOSUB 3640: GOTO 340
  46. 460 MV = MV -M: IF MV = 0  THEN K = 6
  47. 470 TX = 0:TY = 0
  48. 480  NEXT : HOME 
  49. 490  FOR I = 9 TO 16: FOR J = 1 TO 18: IF A$(I,J) = "MI2"  THEN  XDRAW 19 AT J *14,Y +(I *9)
  50. 500  NEXT J,I
  51. 510  GOSUB 1540: REM  CHECK FOR A WINNER
  52. 520  IF SC = 0  THEN 640
  53. 530  FOR I = 1 TO SC
  54. 540  IF A$(CX(I),CY(I)) = ""  THEN  PRINT "COMPUTER SHOT NUMBER "I" MISSED.": GOSUB 3580: GOTO 620
  55. 550  IF A$(CX(I),CY(I)) = "B"  THEN  HCOLOR= 3: DRAW 20 AT CY(I) *14,Y +(CX(I) *9):A$(CX(I),CY(I)) = "": PRINT "COMPUTER SHOT NUMBER "I" DESTROYED A      BARRIER.": GOSUB 3580: GOTO 620
  56. 560  IF  LEFT$(A$(CX(I),CY(I)),1) = "M"  THEN  GOSUB 3530: IF N/2 =  INT(N/2)  THEN  PRINT "COMPUTER SHOT NUMBER "I" MISSED.": GOSUB 3580: GOTO 620
  57. 570  IF  LEFT$(A$(CX(I),CY(I)),1) = "M"  THEN A$(CX(I),CY(I)) = "": PRINT "COMPUTER SHOT NUMBER "I" DESTROYED A MINE.";: GOSUB 3580: GOTO 620
  58. 580  IF  RIGHT$(A$(CX(I),CY(I)),1) = "H"  THEN  XDRAW 31 AT CY(I) *14,Y +(CX(I) *9): PRINT "COMPUTER SHOT NUMBER "I" DESTROYED A TANK." CHR$(7);:NU =  VAL(A$(CX(I),CY(I))):TX(NU) = 0:TY(NU) = 0
  59. 590  IF  RIGHT$(A$(CX(I),CY(I)),1) = "H"  THEN  GOSUB 3580:XH( VAL(A$(CX(I),CY(I)))) = 0:YH( VAL(A$(CX(I),CY(I)))) = 0:A$(CX(I),CY(I)) = "": GOTO 620
  60. 600  IF  RIGHT$(A$(CX(I),CY(I)),1) = "C"  THEN  XDRAW 36 AT CY(I) *14,Y +(CX(I) *9):XC( VAL(A$(CX(I),CY(I)))) = 0:YC( VAL(A$(CX(I),CY(I)))) = 0: PRINT "THE COMPUTER SHOT ITS OWN TANK!" CHR$(7):A$(CX(I),CY(I)) = "": GOSUB 3580: GOTO 620
  61. 610  PRINT "COMPUTER SHOT NUMBER "I" MISSED.": GOSUB 3580
  62. 620  FOR D = 1 TO 3000: NEXT : GOSUB 1540: NEXT 
  63. 630  HOME :A = 31:B = 36
  64. 640  FOR K = 1 TO 6
  65. 650  IF TX(K) = 0  THEN 670
  66. 660  GOSUB 1130: REM  CHECK FOR TANK TO TANK COMBAT
  67. 670 TX(K) = 0:TY(K) = 0: NEXT K
  68. 680  GOSUB 1540: REM  CHECK FOR A WINNER
  69. 690  REM  COMPUTER MOVE
  70. 700  HOME :M$ = "COMPUTER PLACING ITS SHOTS.": GOSUB 3650
  71. 710 MV = 0:FL = 0:HQ = 0:SC = 0:B$ = "H"
  72. 720  FOR I = 1 TO 16: FOR J = 1 TO 18
  73. 730  IF A$(I,J) = "AD"  THEN SC = 6
  74. 740  IF A$(I,J) = "FD"  THEN FL = 1
  75. 750  IF A$(I,J) = "HQ"  THEN HQ = 1
  76. 760  IF  RIGHT$(A$(I,J),1) = "C"  THEN MV = MV +1: IF SC < >6  THEN SC = SC +1
  77. 770  NEXT J,I: IF FL = 1  THEN MV = MV *2:FL = 0
  78. 780  IF   NOT HQ  THEN SC =  INT(SC/2): IF SC = 0  THEN SC = 1
  79. 790  REM  PICK COMPUTER SHOTS
  80. 800 S = 0
  81. 810  FOR K = 6 TO 1  STEP  -1
  82. 820  IF XH(K) >0  THEN I = XH(K):J = YH(K):S = S +1: GOSUB 1660: IF S = SC  THEN K = 1
  83. 830  NEXT 
  84. 840  IF S <SC  THEN 810
  85. 850  IF TU  THEN TU = 0: RETURN 
  86. 860  HOME :M$ = "COMPUTER'S TURN TO MOVE TANKS.": GOSUB 3650
  87. 870 NU = 4: GOSUB 3530: IF N/2 =  INT(N/2)  THEN W = 1: FOR K = 6 TO 1  STEP  -1:TX = 0:TY = 0: GOTO 890
  88. 880  FOR K = 1 TO 6:TX = 0:TY = 0
  89. 890  IF XC(K) >0  THEN I = XC(K):J = YC(K): GOSUB 1960:MV = MV -S
  90. 900  IF W  AND MV < = 0  THEN K = 1
  91. 910  IF   NOT W  AND MV < = 0  THEN K = 6
  92. 920  REM 
  93. 930  NEXT K:W = 0
  94. 940  GOSUB 1540: REM  CHECK FOR WINNER
  95. 950  HOME : FOR I = 1 TO HS
  96. 960  IF A$(HX(I),HY(I)) = ""  THEN  PRINT "HUMAN'S SHOT NUMBER "I" MISSED.": GOSUB 3610: GOTO 1040
  97. 970  IF A$(HX(I),HY(I)) = "B"  THEN  HCOLOR= 3: DRAW 20 AT HY(I) *14,Y +(HX(I) *9):A$(HX(I),HY(I)) = "": PRINT "HUMAN'S SHOT NUMBER "I" DESTROYED A": PRINT "BARRIER.": GOSUB 3610: GOTO 1040
  98. 980  IF  LEFT$(A$(HX(I),HY(I)),1) = "M"  THEN  GOSUB 3530: IF N/2 =  INT(N/2)  THEN  PRINT "HUMAN'S SHOT NUMBER "I" MISSED.": GOSUB 3610: GOTO 1040
  99. 990  IF  LEFT$(A$(HX(I),HY(I)),1) = "M"  THEN A$(HX(I),HY(I)) = "": PRINT "HUMAN'S SHOT NUMBER "I" DESTROYED A MINE.": GOSUB 3610: GOTO 1040
  100. 1000  IF  RIGHT$(A$(HX(I),HY(I)),1) = "C"  THEN  XDRAW 36 AT HY(I) *14,Y +(HX(I) *9): PRINT "HUMAN'S SHOT NUMBER "I" DESTROYED A TANK." CHR$(7):NU =  VAL(A$(HX(I),HY(I))):TX(NU) = 0:TY(NU) = 0
  101. 1010  IF  RIGHT$(A$(HX(I),HY(I)),1) = "C"  THEN  GOSUB 3610:XC(NU) = 0:YC(NU) = 0:A$(HX(I),HY(I)) = "": GOTO 1040
  102. 1020  IF  RIGHT$(A$(HX(I),HY(I)),1) = "H"  THEN  XDRAW 31 AT HY(I) *14,Y +(HX(I) *9):XH( VAL(A$(HX(I),HY(I)))) = 0:YH( VAL(A$(HX(I),HY(I)))) = 0: PRINT "THE HUMAN SHOT ITS OWN TANK!" CHR$(7):A$(HX(I),HY(I)) = "": GOSUB 3610: GOTO 1040
  103. 1030  PRINT "HUMAN'S SHOT NUMBER "I" MISSED.": GOSUB 3610
  104. 1040  GOSUB 3640:HX(I) = 0:HY(I) = 0: GOSUB 1540: NEXT 
  105. 1050  HOME 
  106. 1060  FOR K = 1 TO 6
  107. 1070  IF TX(K) = 0  THEN 1100
  108. 1080 A = 36:B = 31
  109. 1090  GOSUB 1130: REM  CHECK FOR TANK TO TANK COMBAT
  110. 1100 TX(K) = 0:TY(K) = 0: NEXT K
  111. 1110  GOSUB 1540: REM  CHECK FOR A WINNER
  112. 1120  HOME : GOTO 150
  113. 1130  REM  ROUTINE TO CHECK FOR TANK TO TANK COMBAT
  114. 1140 D = 1
  115. 1150  ON D GOSUB 1180,1240,1300,1360
  116. 1160 D = D +1: IF D = 5  THEN D = 1: RETURN 
  117. 1170  GOTO 1150
  118. 1180 R = TX(K) -1:C = TY(K): IF R =  <1  THEN  RETURN 
  119. 1190  IF  RIGHT$(A$(R,C),1) = B$  THEN 1210
  120. 1200  RETURN 
  121. 1210  GOSUB 1420
  122. 1220  IF   NOT FL  THEN  RETURN 
  123. 1230 FL = 0:D = 4: RETURN 
  124. 1240 R = TX(K) +1:C = TY(K): IF R >16  THEN  RETURN 
  125. 1250  IF  RIGHT$(A$(R,C),1) = B$  THEN 1270
  126. 1260  RETURN 
  127. 1270  GOSUB 1420
  128. 1280  IF   NOT FL  THEN  RETURN 
  129. 1290 FL = 0:D = 4: RETURN 
  130. 1300 R = TX(K):C = TY(K) -1: IF C <1  THEN  RETURN 
  131. 1310  IF  RIGHT$(A$(R,C),1) = B$  THEN 1330
  132. 1320  RETURN 
  133. 1330  GOSUB 1420
  134. 1340  IF   NOT FL  THEN  RETURN 
  135. 1350 FL = 0:D = 4: RETURN 
  136. 1360 R = TX(K):C = TY(K) +1: IF C >18  THEN  RETURN 
  137. 1370  IF  RIGHT$(A$(R,C),1) = B$  THEN 1390
  138. 1380  RETURN 
  139. 1390  GOSUB 1420
  140. 1400  IF   NOT FL  THEN  RETURN 
  141. 1410 FL = 0:D = 4: RETURN 
  142. 1420  REM  COMBAT
  143. 1430  FOR I = 1 TO 5: PRINT  CHR$(7): NEXT : HOME : HTAB 17: FLASH : PRINT "COMBAT": NORMAL : FOR I = 1 TO 3000: NEXT 
  144. 1440  FOR I = 1 TO 10: XDRAW A AT TY(K) *14,Y +(TX(K) *9): XDRAW B AT C *14,Y +(R *9): FOR J = 1 TO 50: NEXT : NEXT 
  145. 1450  IF K =  VAL( LEFT$(A$(R,C),1))  THEN  XDRAW A AT TY(K) *14,Y +(TX(K) *9): XDRAW B AT C *14,Y +(R *9):FL = 1: HOME : PRINT "BOTH TANKS DESTROYED.":A$(R,C) = "":A$(TX(K),TY(K)) = "":XC(K) = 0:YC(K) = 0:XH(K) = 0:YH(K) = 0: GOTO 1530
  146. 1460  IF B$ = "C"  THEN 1490
  147. 1470  IF K < VAL( LEFT$(A$(R,C),1))  THEN  XDRAW 36 AT TY(K) *14,Y +(TX(K) *9):A$(TX(K),TY(K)) = "":XC(K) = 0:YC(K) = 0: HOME : PRINT "COMPUTER TANK DESTROYED!": GOTO 1530
  148. 1480  GOTO 1520
  149. 1490  IF K > VAL( LEFT$(A$(R,C),1))  THEN  XDRAW 36 AT C *14,Y +(R *9):XC( VAL(A$(R,C))) = 0:YC( VAL(A$(R,C))) = 0:A$(R,C) = "": HOME : PRINT "COMPUTER TANK DESTROYED!": GOTO 1530
  150. 1500  XDRAW 31 AT TY(K) *14,Y +(TX(K) *9):FL = 1: HOME : PRINT "HUMAN'S TANK DESTROYED!":XH( VAL(A$(TX(K),TY(K)))) = 0:YH( VAL(A$(TX(K),TY(K)))) = 0:A$(TX(K),TY(K)) = ""
  151. 1510  GOTO 1530
  152. 1520  XDRAW 31 AT C *14,Y +(R *9):FL = 1: HOME : PRINT "HUMAN'S TANK DESTROYED.":XH( VAL(A$(R,C))) = 0:YH( VAL(A$(R,C))) = 0:A$(R,C) = ""
  153. 1530  FOR I = 1 TO 4000: NEXT : RETURN 
  154. 1540  REM  LOOK FOR A WINNER
  155. 1550 H = 0:C = 0
  156. 1560  FOR WI = 1 TO 6
  157. 1570  IF XC(WI) >0  THEN C = C +1
  158. 1580  IF XH(WI) >0  THEN H = H +1
  159. 1590  NEXT 
  160. 1600  IF H = 0  AND C = 0  THEN  FOR I = 1 TO 5: PRINT  CHR$(7): NEXT : PRINT "THIS MATCH HAS ENDED IN A TIE. WOULD YOULIKE TO TRY AGAIN ?";: GOTO 1640
  161. 1610  IF H = 0  THEN  FOR I = 1 TO 5: PRINT  CHR$(7): NEXT : HOME : PRINT "SORRY HUMAN, I WON THIS ROUND. WOULD YOULIKE TO TRY AGAIN?";: GOTO 1640
  162. 1620  IF C = 0  THEN  FOR I = 1 TO 5: PRINT  CHR$(7): NEXT : HOME : PRINT "CONGRATULATIONS, YOU WON THIS ROUND.    WOULD YOU LIKE TO TRY AGAIN?";: GOTO 1640
  163. 1630  RETURN : REM  STILL TANKS LEFT
  164. 1640  INPUT "";A$: IF  LEFT$(A$,1) = "N"  THEN  TEXT : HOME : END 
  165. 1650  CLEAR : GOTO 120
  166. 1660  REM  SELECT COMPUTER SHOT LOCATION
  167. 1670 NU = 10: GOSUB 3530
  168. 1680  IF N/2 =  INT(N/2)  THEN D = 4: GOTO 1710
  169. 1690  IF N = 1  OR N = 3  OR N = 9  THEN NU = 2: GOSUB 3530:D = 1 +N: GOTO 1710
  170. 1700  IF N = 5  OR N = 7  OR N = 10  THEN D = 1
  171. 1710 NU = 3: GOSUB 3530: IF N = 3  THEN NU = 2: GOSUB 3530: ON D GOSUB 1860,1910,1910,1860: IF DI  THEN DI = 0:NU = 2: GOTO 1730
  172. 1720 NU = 3
  173. 1730  GOSUB 3530: ON D GOTO 1740,1770,1800,1830
  174. 1740  IF I +N >16  THEN 1670
  175. 1750  IF  RIGHT$(A$(I +N,J),1) < >"1"  AND  RIGHT$(A$(I +N,J),1) < >"C"  THEN CX(S) = I +N:CY(S) = J: RETURN 
  176. 1760  GOTO 1670
  177. 1770  IF J -N <1  THEN 1670
  178. 1780  IF  RIGHT$(A$(I,J -N),1) < >"1"  AND  RIGHT$(A$(I,J -N),1) < >"C"  THEN CX(S) = I:CY(S) = J -N: RETURN 
  179. 1790  GOTO 1670
  180. 1800  IF J +N >18  THEN 1670
  181. 1810  IF  RIGHT$(A$(I,J +N),1) < >"1"  AND  RIGHT$(A$(I,J +N),1) < >"C"  THEN CX(S) = I:CY(S) = J +N: RETURN 
  182. 1820  GOTO 1670
  183. 1830  IF I -N <1  THEN 1670
  184. 1840  IF  RIGHT$(A$(I -N,J),1) < >"1"  AND  RIGHT$(A$(I -N,J),1) < >"C"  THEN CX(S) = I -N:CY(S) = J: RETURN 
  185. 1850  GOTO 1670
  186. 1860  IF N = 1  THEN 1890
  187. 1870  IF J -1 <1  THEN  RETURN 
  188. 1880 J = J -1:DI = 1: RETURN 
  189. 1890  IF J +1 >18  THEN  RETURN 
  190. 1900 J = J +1:DI = 1: RETURN 
  191. 1910  IF N = 1  THEN 1940
  192. 1920  IF I -1 <1  THEN  RETURN 
  193. 1930 I = I -1:DI = 1: RETURN 
  194. 1940  IF I +1 >16  THEN  RETURN 
  195. 1950 I = I +1:DI = 1: RETURN 
  196. 1960  REM  MOVE COMPUTER TANK
  197. 1970 TX = I:TY = J:FL = 0:TI = 0:S = 0
  198. 1980  FOR D = 1 TO 16
  199. 1990  IF  RIGHT$(A$(D,J),1) = "H"  OR A$(D,J) = "HQ2"  OR A$(D,J) = "AD2"  OR A$(D,J) = "FD2"  THEN FL = D
  200. 2000  NEXT D: IF FL < >0  THEN  GOTO 2400
  201. 2010  FOR D = 1 TO 18
  202. 2020  IF  RIGHT$(A$(I,D),1) = "H"  OR A$(I,D) = "HQ2"  OR A$(I,D) = "AD2"  OR A$(I,D) = "FD2"  THEN FL = D
  203. 2030  NEXT D: IF FL < >0  THEN  GOTO 2420
  204. 2040 NU = 4: GOSUB 3530:TI = TI +1: IF TI >10  THEN  RETURN 
  205. 2050 FL = 0: ON N GOTO 2120,2190,2260,2330
  206. 2060  IF A$(TR,TC) = "HQ2"  THEN  XDRAW 32 AT TC *14,Y +(TR *9):A$(TR,TC) = ""
  207. 2070  IF A$(TR,TC) = "AD2"  THEN  XDRAW 33 AT TC *14,Y +(TR *9):A$(TR,TC) = ""
  208. 2080  IF A$(TR,TC) = "FD2"  THEN  XDRAW 34 AT TC *14,Y +(TR *9):A$(TR,TC) = ""
  209. 2090  IF A$(TR,TC) = ""  THEN  XDRAW 36 AT TY *14,Y +(TX *9):A$(TR,TC) = A$(I,J):XC(K) = TR:YC(K) = TC:A$(I,J) = "": XDRAW 36 AT TC *14,Y +(TR *9):TX(K) = TR:TY(K) = TC: GOTO 2440
  210. 2100  IF A$(TR,TC) = "MI2"  THEN  XDRAW 36 AT TY *14,Y +(TX *9): FOR D = 1 TO 50: XDRAW 35 AT TC *14,Y +(TR *9): NEXT :A$(TR,TC) = "":XC(K) = 0:YC(K) = 0:A$(TX,TY) = "": HOME : PRINT  CHR$(7)"TANK HIT MINE AND WAS DESTROYED!": GOSUB 3640:S = N: RETURN 
  211. 2110  RETURN 
  212. 2120  REM  MOVE UP
  213. 2130  IF I = 1  THEN 2040
  214. 2140 NU = 3: GOSUB 3530: IF I -N <1  THEN 2040
  215. 2150  IF MV < = 0  THEN  RETURN 
  216. 2160  IF MV -N <0  THEN 2140
  217. 2170 TR = I -N:TC = J:D = 1
  218. 2180  GOTO 2060
  219. 2190  REM  MOVE DOWN
  220. 2200  IF I = 16  THEN 2040
  221. 2210 NU = 3: GOSUB 3530: IF I +N >16  THEN 2040
  222. 2220  IF MV < = 0  THEN  RETURN 
  223. 2230  IF MV -N <0  THEN 2210
  224. 2240 TR = I +N:TC = J:D = 2
  225. 2250  GOTO 2060
  226. 2260  REM  MOVE LEFT
  227. 2270  IF J = 1  THEN 2040
  228. 2280 NU = 3: GOSUB 3530: IF J -N <1  THEN 2040
  229. 2290  IF MV < = 0  THEN  RETURN 
  230. 2300  IF MV -N <0  THEN 2280
  231. 2310 TR = I:TC = J -N:D = 3
  232. 2320  GOTO 2060
  233. 2330  REM   MOVE RIGHT
  234. 2340  IF J = 18  THEN 2040
  235. 2350 NU = 3: GOSUB 3530: IF J +N >18  THEN 2040
  236. 2360  IF MV < = 0  THEN  RETURN 
  237. 2370  IF MV -N <0  THEN 2350
  238. 2380 TR = I:TC = J +N:D = 4
  239. 2390  GOTO 2060
  240. 2400  IF FL <I  THEN N = 1:D = 1: GOTO 2050
  241. 2410 N = 2:D = 2: GOTO 2050
  242. 2420  IF FL <J  THEN N = 3:D = 3: GOTO 2050
  243. 2430 N = 4:D = 4: GOTO 2050
  244. 2440 S = N: IF N <3  AND MV -S >0  THEN 2460
  245. 2450  RETURN 
  246. 2460 NU = 2: GOSUB 3530
  247. 2470 I = TX(K):J = TY(K):TX = I:TY = J:XC = I:YC = J
  248. 2480  IF D < = 2  THEN  ON N GOSUB 2600,2650: RETURN 
  249. 2490  IF D >2  THEN  ON N GOSUB 2500,2550: RETURN 
  250. 2500  IF I = 1  THEN  RETURN 
  251. 2510  GOSUB 2770: IF N = 0  THEN  RETURN 
  252. 2520  IF MV -(S +N) <0  THEN  RETURN 
  253. 2530  IF I -N <1  THEN  RETURN 
  254. 2540 TR = I -N:TC = J: GOTO 2700
  255. 2550  IF I = 16  THEN  RETURN 
  256. 2560  GOSUB 2770: IF N = 0  THEN  RETURN 
  257. 2570  IF MV -(S +N) <0  THEN  RETURN 
  258. 2580  IF I +N >16  THEN  RETURN 
  259. 2590 TR = I +N:TC = J: GOTO 2700
  260. 2600  IF J = 1  THEN  RETURN 
  261. 2610  GOSUB 2770: IF N = 0  THEN  RETURN 
  262. 2620  IF MV -(S +N) <0  THEN  RETURN 
  263. 2630  IF J -N <1  THEN  RETURN 
  264. 2640 TR = I:TC = J -N: GOTO 2700
  265. 2650  IF J = 18  THEN  RETURN 
  266. 2660  GOSUB 2770: IF N = 0  THEN  RETURN 
  267. 2670  IF MV -(S +N) <0  THEN  RETURN 
  268. 2680  IF J +N >18  THEN  RETURN 
  269. 2690 TR = I:TC = J +N
  270. 2700 FL = 0
  271. 2710  IF A$(TR,TC) = "HQ2"  THEN  XDRAW 32 AT TC *14,Y +(TR *9):A$(TR,TC) = ""
  272. 2720  IF A$(TR,TC) = "AD2"  THEN  XDRAW 33 AT TC *14,Y +(TR *9):A$(TR,TC) = ""
  273. 2730  IF A$(TR,TC) = "FD2"  THEN  XDRAW 34 AT TC *14,Y +(TR *9):A$(TR,TC) = ""
  274. 2740  IF A$(TR,TC) = ""  THEN  XDRAW 36 AT TY *14,Y +(TX *9):A$(TR,TC) = A$(I,J):A$(I,J) = "": XDRAW 36 AT TC *14,Y +(TR *9):TX(K) = TR:TY(K) = TC:XC(K) = TR:YC(K) = TC:S = S +N: RETURN 
  275. 2750  IF A$(TR,TC) = "MI2"  THEN  XDRAW 36 AT TY *14,Y +(TX *9): FOR D = 1 TO 30: XDRAW 35 AT TC *14,Y +(TR *9): NEXT :A$(TR,TC) = "":A$(TX,TY) = "":XC(K) = 0:YC(K) = 0: HOME : PRINT  CHR$(7)"TANK HIT MINE AND WAS DESTROYED!": GOSUB 3640:S = S +N: RETURN 
  276. 2760  RETURN 
  277. 2770 NU = 3 -S: GOSUB 3530: RETURN 
  278. 2780  REM  DRAW GRID
  279. 2790  HGR : HCOLOR= 3: HPLOT 0,0: CALL  -3082
  280. 2800  HCOLOR= 0: FOR I = 8 TO 161  STEP 9: HPLOT 0,I TO 279,I: NEXT 
  281. 2810 J = 1
  282. 2820  FOR I = 13 TO 265  STEP 14: HPLOT I,0 TO I,161
  283. 2830  IF J = 19  THEN 2850
  284. 2840  DRAW J AT I +4,7: DRAW J AT I +4,159:J = J +1
  285. 2850  NEXT 
  286. 2860 J = 1
  287. 2870  FOR I = 16 TO 159  STEP 9
  288. 2880 A$ =  STR$(J)
  289. 2890  IF  LEN(A$) <2  THEN A$ = " " +A$
  290. 2900  IF  LEFT$(A$,1) = " "  THEN 2920
  291. 2910  DRAW ( VAL( LEFT$(A$,1))) +20 AT 1,I: DRAW ( VAL( LEFT$(A$,1))) +20 AT 268,I
  292. 2920 S =  VAL( RIGHT$(A$,1)):S = S +20: IF S = 20  THEN S = 30
  293. 2930  DRAW S AT 6,I: DRAW S AT 273,I
  294. 2940 J = J +1: NEXT 
  295. 2950 Y = 7:J = 1: HCOLOR= 1
  296. 2960  FOR I = 1 TO 8: FOR K = 1 TO 18
  297. 2970 NU = 10: GOSUB 3530: IF N = 2  THEN A$(I,K) = "B": DRAW 20 AT K *14,Y +(I *9):J = J +1
  298. 2980  IF J = 15  THEN K = 18:I = 8
  299. 2990  NEXT K,I
  300. 3000  IF J <15  THEN 2960
  301. 3010 J = 1
  302. 3020  FOR I = 16 TO 10  STEP  -1: FOR K = 1 TO 18
  303. 3030  GOSUB 3530: IF N = 2  THEN A$(I,K) = "B": DRAW 20 AT K *14,Y +(I *9):J = J +1
  304. 3040  IF J = 15  THEN K = 18:I = 10
  305. 3050  NEXT K,I
  306. 3060  IF J <15  THEN 3020
  307. 3070  REM  COMPUTER LOCATIONS
  308. 3080  FOR I = 1 TO 8: FOR J = 1 TO 18
  309. 3090  GOSUB 3530: IF N = 3  AND A$(I,J) = ""  THEN A$(I,J) = "HQ": XDRAW 32 AT J *14,Y +(I *9):I = 8:J = 18:FL = 1
  310. 3100  NEXT J,I
  311. 3110  IF   NOT FL  THEN 3080
  312. 3120 FL = 0
  313. 3130  FOR I = 1 TO 8: FOR J = 1 TO 18
  314. 3140  GOSUB 3530
  315. 3150  IF N = 3  AND A$(I,J) = ""  THEN A$(I,J) = "AD": XDRAW 33 AT J *14,Y +(I *9):I = 8:J = 18:FL = 1
  316. 3160  NEXT J,I:: IF   NOT FL  THEN 3130
  317. 3170 FL = 0
  318. 3180  FOR I = 1 TO 8: FOR J = 1 TO 18
  319. 3190  GOSUB 3530: IF N = 3  AND A$(I,J) = ""  THEN A$(I,J) = "FD": XDRAW 34 AT J *14,Y +(I *9):I = 8:J = 18:FL = 1
  320. 3200  NEXT J,I: IF   NOT FL  THEN 3180
  321. 3210 FL = 0
  322. 3220  FOR I = 8 TO 1  STEP  -1: FOR J = 1 TO 18: GOSUB 3530
  323. 3230  IF N = 2  AND A$(I,J) = ""  THEN A$(I,J) = "M1":FL = FL +1: IF FL = 6  THEN I = 1:J = 18
  324. 3240  NEXT J,I: IF FL <6  THEN 3220
  325. 3250 FL = 0
  326. 3260  FOR I = 3 TO 1  STEP  -1: FOR J = 1 TO 18: GOSUB 3530
  327. 3270  IF N = 1  AND A$(I,J) = ""  THEN FL = FL +1:A$(I,J) =  STR$(FL) +"C":XC(FL) = I:YC(FL) = J: IF FL = 6  THEN I = 1:J = 18
  328. 3280  NEXT J,I: IF FL <6  THEN 3260
  329. 3290  FOR I = 1 TO 3: FOR J = 1 TO 18
  330. 3300  IF  VAL(A$(I,J)) >0  THEN  XDRAW 36 AT J *14,Y +(I *9)
  331. 3310  NEXT J,I
  332. 3320  REM  HUMAN LOCATIONS
  333. 3330  POKE 34,20: HOME 
  334. 3340  REM  PLACE HQ
  335. 3350 OB$ = "HQ": GOSUB 4120:RS = 16:RE = 9:R = 16:C = 1:SH = 32:A$ = "K": GOSUB 3710
  336. 3360 A$(R,C) = "HQ2"
  337. 3370 OB$ = "AMMO DUMP": GOSUB 4120:RS = 16:RE = 9:R = 16:C = 1:SH = 33:A$ = "K": GOSUB 3710
  338. 3380 A$(R,C) = "AD2"
  339. 3390 OB$ = "FUEL DEPOT": GOSUB 4120:RS = 16:RE = 9:R = 16:C = 1:SH = 34:A$ = "K": GOSUB 3710
  340. 3400 A$(R,C) = "FD2"
  341. 3410  FOR K = 1 TO 6
  342. 3420 OB$ = "TANK MINE #" + STR$(K): GOSUB 4120:RS = 16:RE = 9:R = 16:C = 1:SH = 19:A$ = "K": GOSUB 3710
  343. 3430 A$(R,C) = "MI2"
  344. 3440  NEXT 
  345. 3450  FOR I = 1 TO 6:C = 1:OB$ = "TANK #" + STR$(I): GOSUB 4120
  346. 3460 RS = 16:RE = 14:R = 16:C = 1:SH = 31:A$ = "K": GOSUB 3710
  347. 3470 A$(R,C) =  STR$(I) +"H":XH(I) = R:YH(I) = C
  348. 3480  NEXT 
  349. 3490  FOR I = 9 TO 16: FOR J = 1 TO 18
  350. 3500  IF A$(I,J) = "MI2"  THEN  XDRAW 19 AT J *14,Y +(I *9)
  351. 3510  NEXT J,I
  352. 3520  RETURN 
  353. 3530  REM  PICK RND NO.
  354. 3540 N =  INT( RND( PEEK(78) + PEEK(79) *256) *NU) +1
  355. 3550  RETURN 
  356. 3560  REM  DRAW AND ERASE TANK MINE
  357. 3570  FOR D = 1 TO 10: XDRAW 19 AT C *14,Y +(R *9): FOR E = 1 TO 50: NEXT : NEXT : RETURN 
  358. 3580  REM  SHOW WHERE SHOT LANDED (COMPUTER)
  359. 3590  CALL 768
  360. 3600  FOR D = 1 TO 20: XDRAW 35 AT CY(I) *14,Y +(CX(I) *9): FOR E = 1 TO 50: NEXT E,D: RETURN 
  361. 3610  REM  SHOW WHERE SHOT LANDED (HUMAN)
  362. 3620  CALL 768
  363. 3630  FOR D = 1 TO 20: XDRAW 35 AT HY(I) *14,Y +(HX(I) *9): FOR E = 1 TO 50: NEXT E,D: RETURN 
  364. 3640  FOR D = 1 TO 3000: NEXT : RETURN 
  365. 3650  HTAB 21 - LEN(M$)/2: PRINT M$: RETURN 
  366. 3660  FOR X = 768 TO 781
  367. 3670  READ Y: POKE X,Y: NEXT 
  368. 3680  RETURN 
  369. 3690  DATA 160,20,169,50,32,168,252,173,48,192,136,208,245,96
  370. 3700  REM  MOVE SHAPES ON SCREEN USING I-J-K-M AND <SPACE>
  371. 3710  IF SH = 37  THEN  GOSUB 4050: GOTO 3790
  372. 3720  IF SH = 31  THEN  IF A$(R,C) = "B"  OR  RIGHT$(A$(R,C),1) = "H"  OR  RIGHT$(A$(R,C),1) = "C"  THEN 3850
  373. 3730  IF FL  THEN FL = 0: GOTO 3720
  374. 3740  IF SH = 19  THEN  IF  LEFT$(A$(R,C),1) = "M"  THEN 3850
  375. 3750  IF FL  THEN FL = 0: GOTO 3740
  376. 3760  IF A$(R,C) = "B"  OR A$(R,C) = "HQ2"  OR A$(R,C) = "AD2"  OR A$(R,C) = "FD2"  THEN 3850
  377. 3770  IF FL  THEN FL = 0: GOTO 3760
  378. 3780  IF MT  THEN  GOTO 3800
  379. 3790  XDRAW SH AT C *14,Y +(R *9): IF R = TX  AND C = TY  AND SH >20  AND SH <27  THEN  XDRAW SH AT C *14,Y +R *9:MT = 1
  380. 3800  POKE 49168,0: WAIT  -16384,128:A$ =  CHR$( PEEK( -16384) -128): POKE 49168,0
  381. 3810  IF MT  THEN  IF A$ < >"I"  AND A$ < >"J"  AND A$ < >"K"  AND A$ < >"M"  AND A$ < > CHR$(32)  THEN 3710
  382. 3820  IF MT  THEN MT = 0: GOTO 3840
  383. 3830  XDRAW SH AT C *14,Y +(R *9): IF A$ < >"I"  AND A$ < >"J"  AND A$ < >"K"  AND A$ < >"M"  AND A$ < > CHR$(32)  THEN 3710
  384. 3840  IF A$ =  CHR$(32)  THEN 4010
  385. 3850  IF A$ = "I"  THEN 3900
  386. 3860  IF A$ = "J"  THEN 3930
  387. 3870  IF A$ = "K"  THEN 3960
  388. 3880  IF A$ = "M"  THEN 3990
  389. 3890  REM  MOVE UP
  390. 3900  IF R = RE  THEN R = RS: GOTO 3710
  391. 3910 R = R -1: GOTO 3710
  392. 3920  REM  MOVE LEFT
  393. 3930  IF C = 1  THEN C = 18: GOTO 3710
  394. 3940 C = C -1: GOTO 3710
  395. 3950  REM  MOVE RIGHT
  396. 3960  IF C = 18  THEN C = 1: GOTO 3710
  397. 3970 C = C +1: GOTO 3710
  398. 3980  REM  MOVE DOWN
  399. 3990  IF R = RS  THEN R = RE: GOTO 3710
  400. 4000 R = R +1: GOTO 3710
  401. 4010  IF SH = 37  OR SH >20  AND SH <27  THEN 4030
  402. 4020  IF A$(R,C) < >""  THEN  HOME : PRINT  CHR$(7)"THAT SPACE IS OCCUPIED!": FOR D = 1 TO 2000: NEXT : GOSUB 4120: GOTO 3710
  403. 4030  IF SH >20  AND SH <27  THEN  RETURN 
  404. 4040  XDRAW SH AT C *14,Y +(R *9): RETURN 
  405. 4050  IF I = 1  THEN  RETURN 
  406. 4060  FOR J = 1 TO I
  407. 4070  IF R = HX(J)  AND C = HY(J)  THEN FL = 1
  408. 4080  NEXT J
  409. 4090  IF FL  THEN  POP :FL = 0: GOTO 3850
  410. 4100  RETURN 
  411. 4110  REM  PRINT I-J-K-M PROMPT
  412. 4120  HOME : PRINT "ENTER LOCATION OF ";OB$: PRINT "USE I-J-K-M TO MOVE": PRINT "<SPACE> TO PLACE ";OB$;: RETURN