home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib24a.dsk / JUNE.1985 / ANTS.bas next >
BASIC Source File  |  2023-02-26  |  12KB  |  292 lines

  1. 10  REM **********************
  2. 20  REM *       ANTS         *
  3. 30  REM *  BY COLIN FRENCH   *
  4. 40  REM * COPYRIGHT (C) 1985 *
  5. 50  REM * BY MICROSPARC, INC *
  6. 60  REM * CONCORD, MA  01742 *
  7. 70  REM **********************
  8. 80  GOTO 1550: REM  -INITIALIZATION-
  9. 90  REM **** MAIN LOOP ****
  10. 100  HCOLOR= 3: DRAW MAN(DIR,MOVE) AT XM,YM
  11. 110 ODIR = DIR:OMOVE = MOVE:OX = XM:MOVE =   NOT (MOVE)
  12. 120  ON MD GOSUB 2330,2380
  13. 130 XM = XM +(DIR -TWO) *SPD
  14. 140  IF XM <0  THEN XM = 0
  15. 150  IF XM >260  THEN XM = 260
  16. 160 TC = TC -INC: IF   NOT (TC)  THEN  GOSUB 230: POKE  -16368,0
  17. 170  IF TC = LANT/TWO  THEN  GOSUB 910: REM   -LEADER APPEARS?-
  18. 180  IF LDR  THEN LDR = LDR -INC: IF   NOT (LDR)  THEN  GOSUB 1100
  19. 190  IF   NOT (ACT)  THEN  HCOLOR= 1: DRAW MAN(ODIR,OMOVE) AT OX,YM: GOTO 100
  20. 200 ACT = ACT -INC: IF   NOT (ACT)  THEN  GOSUB 610: GOTO 160
  21. 210  IF SOUND  THEN  POKE 768,ACT +7: POKE 769,50: CALL 770
  22. 220  GOTO 160
  23. 230  REM **** TIME UP ****
  24. 240 ACT = 0: IF REPAIR  THEN REPAIR = 0: GOTO 310
  25. 250  FOR A = 1 TO 29: IF AX%(A) =  -1  THEN 290
  26. 260 E%(AX%(A),AY%(A)) =  -1:NBLK = NBLK -1
  27. 270  HCOLOR= 4: DRAW BLK AT AX%(A) *20,AY%(A) *14 +89
  28. 280  IF SOUND  THEN  POKE 768,20: POKE 769,35: CALL 770
  29. 290 AX%(A) =  -1:AY%(A) =  -1: NEXT A
  30. 300  GOSUB 1160: REM  -CHECK FOR LOSING-
  31. 310  REM  -INIT ANT POSITIONS-
  32. 320 LEV = LEV +1:NANT = LEV: IF NANT >29  THEN NANT = 29
  33. 330  IF NANT <12  THEN NANT = 12
  34. 340  VTAB 23: HTAB 9: PRINT LEV
  35. 350  IF NANT <NBLK  THEN 440
  36. 360  REM  -ONE ANT FOR EACH BLOCK-
  37. 370 NANT = NBLK:A = 1
  38. 380  FOR Y = 0 TO 5: FOR X = 0 TO 13
  39. 390  IF E%(X,Y) < >0  THEN 420
  40. 400 E%(X,Y) = A:AX%(A) = X:AY%(A) = Y:A = A +1: IF A >NANT  THEN 560
  41. 410  IF SOUND  THEN  POKE 768,170: POKE 769,A/5 +1: CALL 770
  42. 420  NEXT X,Y
  43. 430  GOTO 560
  44. 440  REM  -TRY TO RANDOMLY CHOOSE BLOCKS-
  45. 450  FOR A = 1 TO 29:F = 0
  46. 460 AX%(A) =  INT( RND(1) *14):AY%(A) =  INT( RND(1) *6)
  47. 470  IF SOUND  THEN  POKE 768,170: POKE 769,A/5 +1: CALL 770
  48. 480  IF E%(AX%(A),AY%(A)) = 0  THEN 530
  49. 490  IF F <1  THEN 460
  50. 500 F = F +1: FOR Y = 5 TO 0  STEP  -1: FOR X = 13 TO 0  STEP  -1
  51. 510  IF E%(X,Y) < >0  THEN  NEXT X,Y: PRINT "ERROR IN 570": END 
  52. 520 AX%(A) = X:AY%(A) = Y
  53. 530  IF A >NANT  THEN AX%(A) =  -1:AY%(A) =  -1: GOTO 550
  54. 540 E%(AX%(A),AY%(A)) = A
  55. 550  NEXT A
  56. 560  REM  -DISPLAY ANTS-
  57. 570  FOR A = 1 TO NANT
  58. 580  HCOLOR= 4: DRAW BLK AT AX%(A) *20,AY%(A) *14 +89
  59. 590  HCOLOR= 5: DRAW ANT AT AX%(A) *20 +1,AY%(A) *14 +89
  60. 600  NEXT A:TC = LANT: RETURN 
  61. 610  REM **** RESULT OF BUTTON PRESS ****
  62. 620 X =  INT(XM/19)
  63. 630  IF REPAIR  THEN 840
  64. 640  REM  -CHECK FOR KILLING LEADER-
  65. 650  IF X < >AX%(30)  THEN 740
  66. 660  HCOLOR= 4: DRAW BLK AT AX%(30) *20,AY%(30) *14 +89
  67. 670  HCOLOR= 5: DRAW EARTH AT AX%(30) *20 +1,AY%(30) *14 +89
  68. 680  IF SOUND  THEN  FOR D = 125 TO 225  STEP 10: POKE 768,D: POKE 769,8: CALL 770: NEXT 
  69. 690 AX%(30) =  -1:AY%(30) =  -1: FOR A = 1 TO 29: IF AX%(A) =  -1  THEN 720
  70. 700  HCOLOR= 4: DRAW BLK AT AX%(A) *20,AY%(A) *14 +89
  71. 710  HCOLOR= 5: DRAW EARTH AT AX%(A) *20 +1,AY%(A) *14 +89:E%(AX%(A),AY%(A)) = 0
  72. 720 AX%(A) =  -1:AY%(A) =  -1: NEXT A
  73. 730 REPAIR = 1:TC = LREPAIR:LDR = 0: GOTO 900
  74. 740  REM  -CHECK FOR KILLING AN ANT-
  75. 750  FOR Y = 0 TO 5:A = E%(X,Y): IF A <1  THEN  NEXT Y: GOTO 840
  76. 760  HCOLOR= 4: DRAW BLK AT X *20,Y *14 +89
  77. 770  HCOLOR= 5: DRAW EARTH AT X *20 +1,Y *14 +89
  78. 780  IF SOUND  THEN  FOR D = 1 TO 8: POKE SD, PEEK(SD): NEXT 
  79. 790 E%(X,Y) = 0:AX%(A) =  -1:AY%(A) =  -1
  80. 800 SCR = SCR +5: VTAB 23: HTAB 28: PRINT SCR
  81. 810 NANT = NANT -1: IF NANT >0  THEN 900
  82. 820  REM  -ALL ANTS KILLED, ADVANCE A LEVEL-
  83. 830  GOTO 310
  84. 840  REM  -NO ANTS,TRY TO REPAIR GROUND-
  85. 850  FOR Y = 0 TO 5
  86. 860  IF E%(X,Y) > -1  THEN  NEXT Y: GOTO 900
  87. 870  HCOLOR= 5: DRAW EARTH AT X *20 +1,Y *14 +89
  88. 880  IF SOUND  THEN  POKE 768,250: POKE 769,15: CALL 770
  89. 890 E%(X,Y) = 0:NBLK = NBLK +1
  90. 900  RETURN 
  91. 910  REM **** LEADER APPEARS? ****
  92. 920  IF  INT( RND(1) *LEV) <8  THEN 1090
  93. 930  REM  -TRY TO PUT BEHIND MAN-
  94. 940 AX%(30) =  INT(XM/19) -( INT( RND(1) *1 +3)) *(DIR -2)
  95. 950 AY%(30) =  INT( RND(1) *6)
  96. 960  IF AX%(30) <0  THEN AX%(30) = 0
  97. 970  IF AX%(30) >13  THEN AX%(30) = 13
  98. 980  REM  -DISPLAY LEADER-
  99. 990  HCOLOR= 5: DRAW BLK AT AX%(30) *20,AY%(30) *14 +89
  100. 1000  HCOLOR= 4: DRAW ANT AT AX%(30) *20 +1,AY%(30) *14 +89
  101. 1010  IF SOUND  THEN  POKE 768,10: POKE 769,10: CALL 770: POKE 768,15: POKE 769,15: CALL 770
  102. 1020  REM  -CHECK IF BLOCK OCCUPIED/EMPTY-
  103. 1030 A = E%(AX%(30),AY%(30))
  104. 1040 NOBLK = 0: IF A =  -1  THEN NOBLK = 1
  105. 1050  IF A >0  THEN AX%(A) =  -1:AY%(A) =  -1
  106. 1060 E%(AX%(30),AY%(30)) = 0
  107. 1070  REM  -SET TIME LIMIT FOR LEADER-
  108. 1080 LDR = 16
  109. 1090  RETURN 
  110. 1100  REM **** LEADER DISAPPEARS ****
  111. 1110 E%(AX%(30),AY%(30)) =  -1: IF   NOT (NOBLK)  THEN BLK = NBLK -1
  112. 1120  HCOLOR= 4: DRAW BLK AT AX%(30) *20,AY%(30) *14 +89
  113. 1130  IF SOUND  THEN  POKE 768,20: POKE 769,35: CALL 770
  114. 1140 AX%(30) =  -1:AY%(30) =  -1
  115. 1150  RETURN 
  116. 1160  REM **** CHECK FOR LOSING ****
  117. 1170  FOR X = 0 TO 13: FOR Y = 0 TO 5
  118. 1180  IF E%(X,Y) = 0  THEN  NEXT X: RETURN 
  119. 1190  NEXT Y: POP : POP 
  120. 1200  REM  -LOST GAME-
  121. 1210  FOR N = 1 TO 3: FOR Y = 5 TO 0  STEP  -1
  122. 1220  HCOLOR= 5: DRAW BLK AT X *20,Y *14 +89
  123. 1230  IF SOUND  THEN  POKE 768,Y *15 +20: POKE 769,10: CALL 770
  124. 1240  IF N = 3  THEN 1260
  125. 1250  HCOLOR= 4: DRAW BLK AT X *20,Y *14 +89
  126. 1260  NEXT Y,N
  127. 1270  REM  -DRAW ESCAPING ANTS-
  128. 1280  HCOLOR= 4: FOR N = 5 TO 0  STEP  -1
  129. 1290  DRAW ANT AT X *20 +1,N *14 +89
  130. 1300  NEXT N
  131. 1310  HCOLOR= 0: DRAW ANT AT OX,YM -8
  132. 1320  REM  -CHECK FOR NEW HIGH SCORE-
  133. 1330  IF SCR < = HS  THEN 1480
  134. 1340  VTAB 21: HTAB 9: FLASH : PRINT "!! A NEW HIGH SCORE !!": NORMAL 
  135. 1350  IF SOUND  THEN  FOR N = 1 TO 3: FOR P = 150 TO 50  STEP  -10: POKE 768,P: POKE 769,7: CALL 770: NEXT P,N
  136. 1360 HS = SCR: FOR D = 1 TO 1000: NEXT D
  137. 1370  HOME : VTAB 22: PRINT  TAB( 8);"ENTER YOUR INITIALS: ";NM$;: HTAB 29
  138. 1380 TN$ = "": FOR N = 1 TO 3: GET Z$: IF Z$ =  CHR$(13)  THEN 1420
  139. 1390  IF  ASC(Z$) <65  OR  ASC(Z$) >90  THEN N = N -1: GOTO 1410
  140. 1400  PRINT Z$;:TN$ = TN$ +Z$: IF N = 1  THEN  PRINT "  ";: HTAB 30
  141. 1410  NEXT N
  142. 1420  IF  LEN(TN$) = 0  THEN 1440
  143. 1430 TN$ = TN$ +"   ":NM$ =  LEFT$(TN$,3)
  144. 1440  PRINT : PRINT D$;"OPEN ANTS.HS": PRINT D$;"CLOSE ANTS.HS": PRINT D$;"DELETE ANTS.HS"
  145. 1450  PRINT D$;"OPEN ANTS.HS": PRINT D$;"WRITE ANTS.HS"
  146. 1460  PRINT HS: PRINT NM$
  147. 1470  PRINT D$;"CLOSE ANTS.HS"
  148. 1480  REM  -PLAY AGAIN?-
  149. 1490  HOME : VTAB 22: PRINT "YOUR SCORE: ";SCR;: HTAB 20: PRINT "HIGH SCORE: ";HS
  150. 1500  PRINT "PRESS P TO PLAY AGAIN, Q TO QUIT ";
  151. 1510  GET Z$: PRINT " " CHR$(8);: IF Z$ = "Q"  OR Z$ =  CHR$(27)  THEN  TEXT : HOME : END 
  152. 1520  IF Z$ < >"P"  THEN 1510
  153. 1530  HCOLOR= 1: DRAW BLK AT OX,YM: DRAW BLK AT OX,YM -8
  154. 1540  GOTO 1840
  155. 1550  REM **** INITIALIZATION ****
  156. 1560  REM  -RELOAD PROGRAM ABOVE HGR1
  157. 1570  IF  PEEK(103) < >1  OR  PEEK(104) < >64  OR  PEEK(16384) < >0  THEN  POKE 103,1: POKE 104,64: POKE 16384,0: PRINT  CHR$(4)"RUN ANTS"
  158. 1580  DIM E%(13,5),AX%(30),AY%(30),MAN(3,1)
  159. 1590 D$ =  CHR$(4): HOME : HGR 
  160. 1600  PRINT D$;"BLOAD ANTS.SHAPES,A$900"
  161. 1610  FOR I = 770 TO 801: READ X: POKE I,X: NEXT 
  162. 1620  DATA  173,0,3,141,34,3,173,48,192,206,1,3,240,17,162,8,202,208,253,174,34,3,202,240,231,142,34,3,76,16,3,96
  163. 1630  REM  -SET SHAPE TABLE POINTER-
  164. 1640  POKE 232,0: POKE 233,9: SCALE= 1: ROT= 0
  165. 1650  ONERR  GOTO 1690
  166. 1660  PRINT D$;"OPEN ANTS.HS"
  167. 1670  PRINT D$;"READ ANTS.HS"
  168. 1680  INPUT HS: INPUT NM$
  169. 1690  PRINT D$;"CLOSE ANTS.HS"
  170. 1700  POKE 216,0: REM  -RESET ERROR FLAG-
  171. 1710  IF NM$ = ""  THEN NM$ = "---"
  172. 1720  REM  -CONSTANTS-
  173. 1730 BUT =  -16287:PRESSED = 127:SD =  -16336
  174. 1740 ZERO = 0:INC = 1:TWO = 2
  175. 1750 MULT = 1.033:SPD = 8
  176. 1760 LFT = 1:ST = 2:RGT = 3
  177. 1770 MAN(1,0) = 1:MAN(1,1) = 2:MAN(2,0) = 3
  178. 1780 MAN(2,1) = 3:MAN(3,0) = 4:MAN(3,1) = 5
  179. 1790 ANT = 6:EARTH = 7:BLK = 8
  180. 1800  REM  -CREATE BACKGROUND-
  181. 1810  GOSUB 2440
  182. 1820  REM  -INTRODUCTION-
  183. 1830  GOSUB 2020
  184. 1840  REM  --- GAME INITIALIZATION ---
  185. 1850  REM  -INIT EARTH ARRAY & DRAW GROUND-
  186. 1860  FOR Y = 0 TO 5: FOR X = 0 TO 13
  187. 1870  HCOLOR= 4: DRAW BLK AT X *20,Y *14 +89
  188. 1880  HCOLOR= 5: DRAW EARTH AT X *20 +1,Y *14 +89
  189. 1890 E%(X,Y) = 0
  190. 1900  NEXT X,Y
  191. 1910  REM  -INIT ANT ARRAY-
  192. 1920  FOR A = 1 TO 30:AX%(A) =  -1:AY%(A) =  -1: NEXT A
  193. 1930  REM  -VARIABLES-
  194. 1940 LEV = 0:DIR = ST:XM = 10:YM = 72:MOVE = 1:SCR = 0
  195. 1950 NBLK = 84:LANT = 110:LREPAIR = 40:TC = LREPAIR/2
  196. 1960  REM  -FLAGS-
  197. 1970 ACT = 0:REPAIR = 1:LDR = 0
  198. 1980  REM  -INIT MAN & SCORE-
  199. 1990  HOME : VTAB 22: PRINT "***ANTS!***    HIGH SCORE:       BY ";NM$;: HTAB 28: PRINT HS
  200. 2000  PRINT " LEVEL: 1      YOUR SCORE: ";SCR
  201. 2010  GOTO 90
  202. 2020  REM **** INTRODUCTION ****
  203. 2030  HOME : VTAB 21: PRINT "** COPYRIGHT 1985 BY MICROSPARC, INC.**"
  204. 2040  PRINT "    WOULD YOU LIKE INSTRUCTIONS? ";
  205. 2050  GET Z$: IF Z$ = "Y"  THEN  GOSUB 2160: GOTO 2070
  206. 2060  IF Z$ < >"N"  THEN 2050
  207. 2070  HOME : VTAB 23: PRINT "     DO YOU WANT SOUND EFFECTS? ";
  208. 2080  GET Z$: IF Z$ = "Y"  THEN SOUND = 1: GOTO 2110
  209. 2090  IF Z$ < >"N"  THEN 2080
  210. 2100 SOUND = 0
  211. 2110  HOME : VTAB 23: HTAB 3: PRINT "P)ADDLE OR K)EYBOARD? ";: GET Z$: IF Z$ < >"P"  AND Z$ < >"K"  THEN 2110
  212. 2120  PRINT Z$;:MD = 1 +(Z$ = "K"): ON MD GOSUB 2140,2150
  213. 2130  RETURN 
  214. 2140  HOME : VTAB 23: PRINT "USE PADDLE 0 TO MOVE LEFT AND RIGHT": PRINT "PRESS BUTTON 0 TO FIRE. ";: GET Z$: PRINT Z$;: RETURN 
  215. 2150  HOME : VTAB 23: PRINT "USE ARROW KEYS TO MOVE LEFT AND RIGHT,": PRINT "<RETURN> TO STOP, AND <SPACE> TO FIRE.";: GET Z$: PRINT Z$;: RETURN 
  216. 2160  REM  -DISPLAY INSTRUCTIONS-
  217. 2170  TEXT : HOME : HTAB 13: PRINT "*** ANTS! ***"
  218. 2180  PRINT : PRINT "  MUTANT KILLER ANTS ARE GNAWING AT THE"
  219. 2190  PRINT "UNDERSIDE OF THE EARTH'S CRUST, TRYING"
  220. 2200  PRINT "TO BREAK THROUGH AND INVADE OUR WORLD."
  221. 2210  PRINT : PRINT "  ARMED WITH YOUR TRUSTY ELECTRO-SONIC"
  222. 2220  PRINT "DISRUPTER, YOU MUST STOP THE ANTS FROM"
  223. 2230  PRINT "COMPLETING A PASSAGE UP TO THE SURFACE"
  224. 2240  PRINT "OF THE EARTH."
  225. 2250  PRINT : PRINT "  THE ANTS' LEADER, A DARK FIGURE AMID"
  226. 2260  PRINT "A HELL-LIKE ORANGE GLARE, MAY BRIEFLY"
  227. 2270  PRINT "APPEAR.  DESTROY HER AND THE ANTS WILL"
  228. 2280  PRINT "WANDER OFF FOR A WHILE, GIVING YOU A"
  229. 2290  PRINT "CHANCE TO REPAIR THE HOLES AND PASSAGES"
  230. 2300  PRINT "DUG BY THE ANTS."
  231. 2310  VTAB 23: HTAB 7: PRINT "PRESS ANY KEY TO START GAME ";: GET Z$: PRINT Z$: POKE  -16301,0: POKE  -16304,0: RETURN 
  232. 2320  REM  PADDLE ROUTINES
  233. 2330 DIR = ST: IF  PEEK(BUT) >PRESSED  THEN ACT = 4
  234. 2340 P =  INT( PDL(ZERO) *MULT): IF P <75  THEN DIR = LFT
  235. 2350  IF P >180  THEN DIR = RGT
  236. 2360  RETURN 
  237. 2370  REM  KEYBOARD ROUTINES
  238. 2380 Z =  PEEK( -16384): IF Z <128  THEN 2430
  239. 2390  POKE  -16368,0: IF Z = 136  THEN DIR = LFT
  240. 2400  IF Z = 149  THEN DIR = RGT
  241. 2410  IF Z = 160  THEN ACT = 4
  242. 2420  IF Z = 141  THEN DIR = ST
  243. 2430  RETURN 
  244. 2440 SKY = 7:BLK = 8
  245. 2450  REM *** DRAW BACKGROUND ***
  246. 2460  REM  -SKY-
  247. 2470  FOR Y = 0 TO 2: FOR X = 0 TO 13
  248. 2480  HCOLOR= 7: DRAW BLK AT X *20,Y *14 +13
  249. 2490  HCOLOR= 6: DRAW SKY AT X *20 +1,Y *14 +13
  250. 2500  NEXT X,Y
  251. 2510  REM  -GRASS-
  252. 2520  HCOLOR= 1
  253. 2530  FOR Y = 0 TO 2: FOR X = 0 TO 13
  254. 2540  DRAW BLK AT X *20,Y *10 +55
  255. 2550  NEXT X,Y
  256. 2560  HPLOT 28,41 TO 69,41: HPLOT 35,40 TO 55,40
  257. 2570  HPLOT 140,41 TO 209,41: HPLOT 154,40 TO 195,40
  258. 2580  REM  -CLOUDS-
  259. 2590  HCOLOR= 7
  260. 2600 X = 60:Y = 12: GOSUB 2640
  261. 2610 X = 100:Y = 16: GOSUB 2640
  262. 2620 X = 185:Y = 18: GOSUB 2640
  263. 2630  GOTO 2730
  264. 2640  REM  -CLOUD DRAWING SUBROUTINE-
  265. 2650  HPLOT X +7,Y TO X +21,Y
  266. 2660  HPLOT X,Y -1 TO X +35,Y -1
  267. 2670  HPLOT X,Y -2 TO X +35,Y -2
  268. 2680  HPLOT X,Y -3 TO X +35,Y -3
  269. 2690  HPLOT X +7,Y -4 TO X +28,Y -4
  270. 2700  HPLOT X +14,Y -5 TO X +28,Y -5
  271. 2710  HPLOT X +14,Y -6 TO X +21,Y -6
  272. 2720  RETURN 
  273. 2730  REM  -TITLE-
  274. 2740  HCOLOR= 5
  275. 2750  READ X,Y: IF X <0  THEN 2830
  276. 2760  DRAW BLK AT X *10,Y *7 +89
  277. 2770  GOTO 2750
  278. 2780  DATA  2,2,4,2,5,2,2,4,4,4,5,4,2,6,5,6,2,7,5,7
  279. 2790  DATA  8,2,10,2,11,2,8,4,11,4,8,6,11,6,8,7,11,7
  280. 2800  DATA  14,2,16,2,17,2,16,4,16,6,16,7
  281. 2810  DATA  20,2,22,2,20,4,22,4,22,6,20,7,22,7
  282. 2820  DATA  25,2,25,4,25,5,25,8,-1,-1
  283. 2830  HCOLOR= 4
  284. 2840  READ X,Y: IF X <0  THEN 2920
  285. 2850  DRAW BLK AT X *10,Y *7 +89
  286. 2860  GOTO 2840
  287. 2870  DATA  3,3,4,3,3,6,4,6,3,7,4,7
  288. 2880  DATA  9,3,10,3,9,5,10,5,9,7,10,7
  289. 2890  DATA  14,3,17,3,17,5,17,7
  290. 2900  DATA  21,3,22,3,20,6,21,6
  291. 2910  DATA  26,2,26,4,26,6,26,8,25,9,-1,-1
  292. 2920  RETURN