home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib24a.dsk
/
JUNE.1985
/
ANTS.bas
next >
Wrap
BASIC Source File
|
2023-02-26
|
12KB
|
292 lines
10 REM **********************
20 REM * ANTS *
30 REM * BY COLIN FRENCH *
40 REM * COPYRIGHT (C) 1985 *
50 REM * BY MICROSPARC, INC *
60 REM * CONCORD, MA 01742 *
70 REM **********************
80 GOTO 1550: REM -INITIALIZATION-
90 REM **** MAIN LOOP ****
100 HCOLOR= 3: DRAW MAN(DIR,MOVE) AT XM,YM
110 ODIR = DIR:OMOVE = MOVE:OX = XM:MOVE = NOT (MOVE)
120 ON MD GOSUB 2330,2380
130 XM = XM +(DIR -TWO) *SPD
140 IF XM <0 THEN XM = 0
150 IF XM >260 THEN XM = 260
160 TC = TC -INC: IF NOT (TC) THEN GOSUB 230: POKE -16368,0
170 IF TC = LANT/TWO THEN GOSUB 910: REM -LEADER APPEARS?-
180 IF LDR THEN LDR = LDR -INC: IF NOT (LDR) THEN GOSUB 1100
190 IF NOT (ACT) THEN HCOLOR= 1: DRAW MAN(ODIR,OMOVE) AT OX,YM: GOTO 100
200 ACT = ACT -INC: IF NOT (ACT) THEN GOSUB 610: GOTO 160
210 IF SOUND THEN POKE 768,ACT +7: POKE 769,50: CALL 770
220 GOTO 160
230 REM **** TIME UP ****
240 ACT = 0: IF REPAIR THEN REPAIR = 0: GOTO 310
250 FOR A = 1 TO 29: IF AX%(A) = -1 THEN 290
260 E%(AX%(A),AY%(A)) = -1:NBLK = NBLK -1
270 HCOLOR= 4: DRAW BLK AT AX%(A) *20,AY%(A) *14 +89
280 IF SOUND THEN POKE 768,20: POKE 769,35: CALL 770
290 AX%(A) = -1:AY%(A) = -1: NEXT A
300 GOSUB 1160: REM -CHECK FOR LOSING-
310 REM -INIT ANT POSITIONS-
320 LEV = LEV +1:NANT = LEV: IF NANT >29 THEN NANT = 29
330 IF NANT <12 THEN NANT = 12
340 VTAB 23: HTAB 9: PRINT LEV
350 IF NANT <NBLK THEN 440
360 REM -ONE ANT FOR EACH BLOCK-
370 NANT = NBLK:A = 1
380 FOR Y = 0 TO 5: FOR X = 0 TO 13
390 IF E%(X,Y) < >0 THEN 420
400 E%(X,Y) = A:AX%(A) = X:AY%(A) = Y:A = A +1: IF A >NANT THEN 560
410 IF SOUND THEN POKE 768,170: POKE 769,A/5 +1: CALL 770
420 NEXT X,Y
430 GOTO 560
440 REM -TRY TO RANDOMLY CHOOSE BLOCKS-
450 FOR A = 1 TO 29:F = 0
460 AX%(A) = INT( RND(1) *14):AY%(A) = INT( RND(1) *6)
470 IF SOUND THEN POKE 768,170: POKE 769,A/5 +1: CALL 770
480 IF E%(AX%(A),AY%(A)) = 0 THEN 530
490 IF F <1 THEN 460
500 F = F +1: FOR Y = 5 TO 0 STEP -1: FOR X = 13 TO 0 STEP -1
510 IF E%(X,Y) < >0 THEN NEXT X,Y: PRINT "ERROR IN 570": END
520 AX%(A) = X:AY%(A) = Y
530 IF A >NANT THEN AX%(A) = -1:AY%(A) = -1: GOTO 550
540 E%(AX%(A),AY%(A)) = A
550 NEXT A
560 REM -DISPLAY ANTS-
570 FOR A = 1 TO NANT
580 HCOLOR= 4: DRAW BLK AT AX%(A) *20,AY%(A) *14 +89
590 HCOLOR= 5: DRAW ANT AT AX%(A) *20 +1,AY%(A) *14 +89
600 NEXT A:TC = LANT: RETURN
610 REM **** RESULT OF BUTTON PRESS ****
620 X = INT(XM/19)
630 IF REPAIR THEN 840
640 REM -CHECK FOR KILLING LEADER-
650 IF X < >AX%(30) THEN 740
660 HCOLOR= 4: DRAW BLK AT AX%(30) *20,AY%(30) *14 +89
670 HCOLOR= 5: DRAW EARTH AT AX%(30) *20 +1,AY%(30) *14 +89
680 IF SOUND THEN FOR D = 125 TO 225 STEP 10: POKE 768,D: POKE 769,8: CALL 770: NEXT
690 AX%(30) = -1:AY%(30) = -1: FOR A = 1 TO 29: IF AX%(A) = -1 THEN 720
700 HCOLOR= 4: DRAW BLK AT AX%(A) *20,AY%(A) *14 +89
710 HCOLOR= 5: DRAW EARTH AT AX%(A) *20 +1,AY%(A) *14 +89:E%(AX%(A),AY%(A)) = 0
720 AX%(A) = -1:AY%(A) = -1: NEXT A
730 REPAIR = 1:TC = LREPAIR:LDR = 0: GOTO 900
740 REM -CHECK FOR KILLING AN ANT-
750 FOR Y = 0 TO 5:A = E%(X,Y): IF A <1 THEN NEXT Y: GOTO 840
760 HCOLOR= 4: DRAW BLK AT X *20,Y *14 +89
770 HCOLOR= 5: DRAW EARTH AT X *20 +1,Y *14 +89
780 IF SOUND THEN FOR D = 1 TO 8: POKE SD, PEEK(SD): NEXT
790 E%(X,Y) = 0:AX%(A) = -1:AY%(A) = -1
800 SCR = SCR +5: VTAB 23: HTAB 28: PRINT SCR
810 NANT = NANT -1: IF NANT >0 THEN 900
820 REM -ALL ANTS KILLED, ADVANCE A LEVEL-
830 GOTO 310
840 REM -NO ANTS,TRY TO REPAIR GROUND-
850 FOR Y = 0 TO 5
860 IF E%(X,Y) > -1 THEN NEXT Y: GOTO 900
870 HCOLOR= 5: DRAW EARTH AT X *20 +1,Y *14 +89
880 IF SOUND THEN POKE 768,250: POKE 769,15: CALL 770
890 E%(X,Y) = 0:NBLK = NBLK +1
900 RETURN
910 REM **** LEADER APPEARS? ****
920 IF INT( RND(1) *LEV) <8 THEN 1090
930 REM -TRY TO PUT BEHIND MAN-
940 AX%(30) = INT(XM/19) -( INT( RND(1) *1 +3)) *(DIR -2)
950 AY%(30) = INT( RND(1) *6)
960 IF AX%(30) <0 THEN AX%(30) = 0
970 IF AX%(30) >13 THEN AX%(30) = 13
980 REM -DISPLAY LEADER-
990 HCOLOR= 5: DRAW BLK AT AX%(30) *20,AY%(30) *14 +89
1000 HCOLOR= 4: DRAW ANT AT AX%(30) *20 +1,AY%(30) *14 +89
1010 IF SOUND THEN POKE 768,10: POKE 769,10: CALL 770: POKE 768,15: POKE 769,15: CALL 770
1020 REM -CHECK IF BLOCK OCCUPIED/EMPTY-
1030 A = E%(AX%(30),AY%(30))
1040 NOBLK = 0: IF A = -1 THEN NOBLK = 1
1050 IF A >0 THEN AX%(A) = -1:AY%(A) = -1
1060 E%(AX%(30),AY%(30)) = 0
1070 REM -SET TIME LIMIT FOR LEADER-
1080 LDR = 16
1090 RETURN
1100 REM **** LEADER DISAPPEARS ****
1110 E%(AX%(30),AY%(30)) = -1: IF NOT (NOBLK) THEN BLK = NBLK -1
1120 HCOLOR= 4: DRAW BLK AT AX%(30) *20,AY%(30) *14 +89
1130 IF SOUND THEN POKE 768,20: POKE 769,35: CALL 770
1140 AX%(30) = -1:AY%(30) = -1
1150 RETURN
1160 REM **** CHECK FOR LOSING ****
1170 FOR X = 0 TO 13: FOR Y = 0 TO 5
1180 IF E%(X,Y) = 0 THEN NEXT X: RETURN
1190 NEXT Y: POP : POP
1200 REM -LOST GAME-
1210 FOR N = 1 TO 3: FOR Y = 5 TO 0 STEP -1
1220 HCOLOR= 5: DRAW BLK AT X *20,Y *14 +89
1230 IF SOUND THEN POKE 768,Y *15 +20: POKE 769,10: CALL 770
1240 IF N = 3 THEN 1260
1250 HCOLOR= 4: DRAW BLK AT X *20,Y *14 +89
1260 NEXT Y,N
1270 REM -DRAW ESCAPING ANTS-
1280 HCOLOR= 4: FOR N = 5 TO 0 STEP -1
1290 DRAW ANT AT X *20 +1,N *14 +89
1300 NEXT N
1310 HCOLOR= 0: DRAW ANT AT OX,YM -8
1320 REM -CHECK FOR NEW HIGH SCORE-
1330 IF SCR < = HS THEN 1480
1340 VTAB 21: HTAB 9: FLASH : PRINT "!! A NEW HIGH SCORE !!": NORMAL
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
1360 HS = SCR: FOR D = 1 TO 1000: NEXT D
1370 HOME : VTAB 22: PRINT TAB( 8);"ENTER YOUR INITIALS: ";NM$;: HTAB 29
1380 TN$ = "": FOR N = 1 TO 3: GET Z$: IF Z$ = CHR$(13) THEN 1420
1390 IF ASC(Z$) <65 OR ASC(Z$) >90 THEN N = N -1: GOTO 1410
1400 PRINT Z$;:TN$ = TN$ +Z$: IF N = 1 THEN PRINT " ";: HTAB 30
1410 NEXT N
1420 IF LEN(TN$) = 0 THEN 1440
1430 TN$ = TN$ +" ":NM$ = LEFT$(TN$,3)
1440 PRINT : PRINT D$;"OPEN ANTS.HS": PRINT D$;"CLOSE ANTS.HS": PRINT D$;"DELETE ANTS.HS"
1450 PRINT D$;"OPEN ANTS.HS": PRINT D$;"WRITE ANTS.HS"
1460 PRINT HS: PRINT NM$
1470 PRINT D$;"CLOSE ANTS.HS"
1480 REM -PLAY AGAIN?-
1490 HOME : VTAB 22: PRINT "YOUR SCORE: ";SCR;: HTAB 20: PRINT "HIGH SCORE: ";HS
1500 PRINT "PRESS P TO PLAY AGAIN, Q TO QUIT ";
1510 GET Z$: PRINT " " CHR$(8);: IF Z$ = "Q" OR Z$ = CHR$(27) THEN TEXT : HOME : END
1520 IF Z$ < >"P" THEN 1510
1530 HCOLOR= 1: DRAW BLK AT OX,YM: DRAW BLK AT OX,YM -8
1540 GOTO 1840
1550 REM **** INITIALIZATION ****
1560 REM -RELOAD PROGRAM ABOVE HGR1
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"
1580 DIM E%(13,5),AX%(30),AY%(30),MAN(3,1)
1590 D$ = CHR$(4): HOME : HGR
1600 PRINT D$;"BLOAD ANTS.SHAPES,A$900"
1610 FOR I = 770 TO 801: READ X: POKE I,X: NEXT
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
1630 REM -SET SHAPE TABLE POINTER-
1640 POKE 232,0: POKE 233,9: SCALE= 1: ROT= 0
1650 ONERR GOTO 1690
1660 PRINT D$;"OPEN ANTS.HS"
1670 PRINT D$;"READ ANTS.HS"
1680 INPUT HS: INPUT NM$
1690 PRINT D$;"CLOSE ANTS.HS"
1700 POKE 216,0: REM -RESET ERROR FLAG-
1710 IF NM$ = "" THEN NM$ = "---"
1720 REM -CONSTANTS-
1730 BUT = -16287:PRESSED = 127:SD = -16336
1740 ZERO = 0:INC = 1:TWO = 2
1750 MULT = 1.033:SPD = 8
1760 LFT = 1:ST = 2:RGT = 3
1770 MAN(1,0) = 1:MAN(1,1) = 2:MAN(2,0) = 3
1780 MAN(2,1) = 3:MAN(3,0) = 4:MAN(3,1) = 5
1790 ANT = 6:EARTH = 7:BLK = 8
1800 REM -CREATE BACKGROUND-
1810 GOSUB 2440
1820 REM -INTRODUCTION-
1830 GOSUB 2020
1840 REM --- GAME INITIALIZATION ---
1850 REM -INIT EARTH ARRAY & DRAW GROUND-
1860 FOR Y = 0 TO 5: FOR X = 0 TO 13
1870 HCOLOR= 4: DRAW BLK AT X *20,Y *14 +89
1880 HCOLOR= 5: DRAW EARTH AT X *20 +1,Y *14 +89
1890 E%(X,Y) = 0
1900 NEXT X,Y
1910 REM -INIT ANT ARRAY-
1920 FOR A = 1 TO 30:AX%(A) = -1:AY%(A) = -1: NEXT A
1930 REM -VARIABLES-
1940 LEV = 0:DIR = ST:XM = 10:YM = 72:MOVE = 1:SCR = 0
1950 NBLK = 84:LANT = 110:LREPAIR = 40:TC = LREPAIR/2
1960 REM -FLAGS-
1970 ACT = 0:REPAIR = 1:LDR = 0
1980 REM -INIT MAN & SCORE-
1990 HOME : VTAB 22: PRINT "***ANTS!*** HIGH SCORE: BY ";NM$;: HTAB 28: PRINT HS
2000 PRINT " LEVEL: 1 YOUR SCORE: ";SCR
2010 GOTO 90
2020 REM **** INTRODUCTION ****
2030 HOME : VTAB 21: PRINT "** COPYRIGHT 1985 BY MICROSPARC, INC.**"
2040 PRINT " WOULD YOU LIKE INSTRUCTIONS? ";
2050 GET Z$: IF Z$ = "Y" THEN GOSUB 2160: GOTO 2070
2060 IF Z$ < >"N" THEN 2050
2070 HOME : VTAB 23: PRINT " DO YOU WANT SOUND EFFECTS? ";
2080 GET Z$: IF Z$ = "Y" THEN SOUND = 1: GOTO 2110
2090 IF Z$ < >"N" THEN 2080
2100 SOUND = 0
2110 HOME : VTAB 23: HTAB 3: PRINT "P)ADDLE OR K)EYBOARD? ";: GET Z$: IF Z$ < >"P" AND Z$ < >"K" THEN 2110
2120 PRINT Z$;:MD = 1 +(Z$ = "K"): ON MD GOSUB 2140,2150
2130 RETURN
2140 HOME : VTAB 23: PRINT "USE PADDLE 0 TO MOVE LEFT AND RIGHT": PRINT "PRESS BUTTON 0 TO FIRE. ";: GET Z$: PRINT Z$;: RETURN
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
2160 REM -DISPLAY INSTRUCTIONS-
2170 TEXT : HOME : HTAB 13: PRINT "*** ANTS! ***"
2180 PRINT : PRINT " MUTANT KILLER ANTS ARE GNAWING AT THE"
2190 PRINT "UNDERSIDE OF THE EARTH'S CRUST, TRYING"
2200 PRINT "TO BREAK THROUGH AND INVADE OUR WORLD."
2210 PRINT : PRINT " ARMED WITH YOUR TRUSTY ELECTRO-SONIC"
2220 PRINT "DISRUPTER, YOU MUST STOP THE ANTS FROM"
2230 PRINT "COMPLETING A PASSAGE UP TO THE SURFACE"
2240 PRINT "OF THE EARTH."
2250 PRINT : PRINT " THE ANTS' LEADER, A DARK FIGURE AMID"
2260 PRINT "A HELL-LIKE ORANGE GLARE, MAY BRIEFLY"
2270 PRINT "APPEAR. DESTROY HER AND THE ANTS WILL"
2280 PRINT "WANDER OFF FOR A WHILE, GIVING YOU A"
2290 PRINT "CHANCE TO REPAIR THE HOLES AND PASSAGES"
2300 PRINT "DUG BY THE ANTS."
2310 VTAB 23: HTAB 7: PRINT "PRESS ANY KEY TO START GAME ";: GET Z$: PRINT Z$: POKE -16301,0: POKE -16304,0: RETURN
2320 REM PADDLE ROUTINES
2330 DIR = ST: IF PEEK(BUT) >PRESSED THEN ACT = 4
2340 P = INT( PDL(ZERO) *MULT): IF P <75 THEN DIR = LFT
2350 IF P >180 THEN DIR = RGT
2360 RETURN
2370 REM KEYBOARD ROUTINES
2380 Z = PEEK( -16384): IF Z <128 THEN 2430
2390 POKE -16368,0: IF Z = 136 THEN DIR = LFT
2400 IF Z = 149 THEN DIR = RGT
2410 IF Z = 160 THEN ACT = 4
2420 IF Z = 141 THEN DIR = ST
2430 RETURN
2440 SKY = 7:BLK = 8
2450 REM *** DRAW BACKGROUND ***
2460 REM -SKY-
2470 FOR Y = 0 TO 2: FOR X = 0 TO 13
2480 HCOLOR= 7: DRAW BLK AT X *20,Y *14 +13
2490 HCOLOR= 6: DRAW SKY AT X *20 +1,Y *14 +13
2500 NEXT X,Y
2510 REM -GRASS-
2520 HCOLOR= 1
2530 FOR Y = 0 TO 2: FOR X = 0 TO 13
2540 DRAW BLK AT X *20,Y *10 +55
2550 NEXT X,Y
2560 HPLOT 28,41 TO 69,41: HPLOT 35,40 TO 55,40
2570 HPLOT 140,41 TO 209,41: HPLOT 154,40 TO 195,40
2580 REM -CLOUDS-
2590 HCOLOR= 7
2600 X = 60:Y = 12: GOSUB 2640
2610 X = 100:Y = 16: GOSUB 2640
2620 X = 185:Y = 18: GOSUB 2640
2630 GOTO 2730
2640 REM -CLOUD DRAWING SUBROUTINE-
2650 HPLOT X +7,Y TO X +21,Y
2660 HPLOT X,Y -1 TO X +35,Y -1
2670 HPLOT X,Y -2 TO X +35,Y -2
2680 HPLOT X,Y -3 TO X +35,Y -3
2690 HPLOT X +7,Y -4 TO X +28,Y -4
2700 HPLOT X +14,Y -5 TO X +28,Y -5
2710 HPLOT X +14,Y -6 TO X +21,Y -6
2720 RETURN
2730 REM -TITLE-
2740 HCOLOR= 5
2750 READ X,Y: IF X <0 THEN 2830
2760 DRAW BLK AT X *10,Y *7 +89
2770 GOTO 2750
2780 DATA 2,2,4,2,5,2,2,4,4,4,5,4,2,6,5,6,2,7,5,7
2790 DATA 8,2,10,2,11,2,8,4,11,4,8,6,11,6,8,7,11,7
2800 DATA 14,2,16,2,17,2,16,4,16,6,16,7
2810 DATA 20,2,22,2,20,4,22,4,22,6,20,7,22,7
2820 DATA 25,2,25,4,25,5,25,8,-1,-1
2830 HCOLOR= 4
2840 READ X,Y: IF X <0 THEN 2920
2850 DRAW BLK AT X *10,Y *7 +89
2860 GOTO 2840
2870 DATA 3,3,4,3,3,6,4,6,3,7,4,7
2880 DATA 9,3,10,3,9,5,10,5,9,7,10,7
2890 DATA 14,3,17,3,17,5,17,7
2900 DATA 21,3,22,3,20,6,21,6
2910 DATA 26,2,26,4,26,6,26,8,25,9,-1,-1
2920 RETURN