home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
17 Bit Software 1: Collection A
/
17Bit_Collection_A.iso
/
files
/
36.dms
/
36.adf
/
INVADER.bas
< prev
next >
Wrap
BASIC Source File
|
1988-05-22
|
7KB
|
140 lines
10 SCREEN 0,4
20 ?" - INVADER -":?:?"By Andrew Eckert":?"(C) Eckwell Inc."
30 ?" January 1986"
40 ?:?:?"Prepare for battle!":? AT (1,23);" ";
100 X%=126: Y%=122: HP%=1000
105 RANDOMIZE 1
110 DIM ENEMY%(10,5): DIM SHOT%(3): DIM ESHOT%(3): DIM K%(2)
120 DIM P%(512): DIM H%(128): DIM D%(128): DIM S%(128): DIM STARS%(5,3)
130 OPEN "I",1,"DRONE.INV": OPEN "I",2,"HOVERER.INV": OPEN "I",3,"SPIKER.INV"
140 INPUT #1,Q: INPUT #2,Q: INPUT #3,Q
150 FOR Q=0 TO 128: INPUT #1,D%(Q): INPUT #2,H%(Q): INPUT #3,S%(Q)
160 NEXT Q: CLOSE 1,2,3
170 OPEN "I",1,"SHIP.INV":INPUT #1,Q
180 FOR Q=0 TO 512: INPUT #1,P%(Q): NEXT Q: CLOSE 1
185 FOR Q=1 TO 5: STARS%(Q,1)=INT(RND(1)*300)+1: STARS%(Q,2)=INT(RND(1)*170)+3: STARS%(Q,3)=(INT(RND(1)*4)+1)*5: NEXT Q
190 PENO 1: PENA 1: BOX(0,0 ; 300,175),1
200 ? AT (1,23);"";
210 W=1: QQ=INT(RND(1)*3)+1: FOR Q=1 TO QQ: ENEMY%(Q,1)=1: ENEMY%(Q,4)=(INT(RND(1)*3)+1)
215 ENEMY%(Q,5)=INT(RND(1)*7)-3
220 ENEMY%(Q,2)=INT(RND(1)*255)+10: ENEMY%(Q,3)=0
225 IF ENEMY%(Q,5)=0 AND ENEMY%(Q,4)=2 THEN 215
230 IF ENEMY%(Q,4)=1 THEN GSHAPE (ENEMY%(Q,2),ENEMY%(Q,3)), D%()
240 IF ENEMY%(Q,4)=2 THEN GSHAPE (ENEMY%(Q,2),ENEMY%(Q,3)), H%()
250 IF ENEMY%(Q,4)=3 THEN GSHAPE (ENEMY%(Q,2),ENEMY%(Q,3)), S%()
260 NEXT Q
270 GSHAPE (X%,Y%), P%()
500 ' - MAIN ROUTINE -
505 IF HP%<0 THEN 5000
510 ASK MOUSE XX%,YY%,BB%
520 IF XX%+9<X%+23 THEN XD%=-10
525 IF XX%-9>X%+23 THEN XD%=10
530 IF XX%>X%+19 AND XX%<X%+30 THEN XD%=XX%-(X%+23)
540 X%=X%+XD%: IF X%<0 THEN X%=0: XD%=0
550 IF X%>253 THEN X%=253: XD%=0
560 IF YY%+9<Y% THEN Y%=Y%-10: IF Y%<81 THEN Y%=81
570 IF YY%-9>Y% THEN Y%=Y%+10: IF Y%>121 THEN Y%=121
580 GSHAPE (X%,Y%), P%()
590 GOSUB 1000: GOSUB 2000: GOSUB 3000: GOSUB 4000: GOSUB 6000
650 IF BB%=4 AND SHOT%(1)=0 THEN SHOT%(1)=1: SHOT%(2)=X%+23: SHOT%(3)=Y%+34
660 ? AT(1,23);"H.P.:";HP%;TAB(14);"WAVE:";W;TAB(24);"KILLS:";K%(1);
670 IF K%(2)>W*5 THEN HP%=HP%+INT(RND(1)*100)+200: W=W+1: K%(2)=0
990 GOTO 500
1000 ' - MOVE/DRAW ENEMIES -
1005 PENO 1: PENA 1
1010 FOR Q=1 TO 10: IF ENEMY%(Q,1)=0 THEN 1500
1020 QQ=ENEMY%(Q,4): ON QQ GOTO 1030,1100,1300
1030 ' DRONE
1040 ENEMY%(Q,3)=ENEMY%(Q,3)+4: IF ENEMY%(Q,3)>146 THEN ENEMY%(Q,1)=0:BOX(ENEMY%(Q,2)+3,146 ; ENEMY%(Q,2)+13,175),1: GOTO 1500
1050 ENEMY%(Q,2)=ENEMY%(Q,2)+ENEMY%(Q,5): IF ENEMY%(Q,2)>284 THEN ENEMY%(Q,1)=0: BOX(284,ENEMY%(Q,3) ; 300,ENEMY%(Q,3)+19),1: GOTO 1500
1060 IF ENEMY%(Q,2)<0 THEN ENEMY%(Q,1)=0: BOX(16,ENEMY%(Q,3) ; 0,ENEMY%(Q,3)+19),1: GOTO 1500
1070 GSHAPE (ENEMY%(Q,2),ENEMY%(Q,3)), D%(): GOTO 1500
1100 ' HOVERER
1110 ENEMY%(Q,2)=ENEMY%(Q,2)+ENEMY%(Q,5)
1120 IF ENEMY%(Q,2)<0 THEN ENEMY%(Q,1)=0: BOX (0,0 ; 23,6),1: GOTO 1500
1130 IF ENEMY%(Q,2)>275 THEN ENEMY%(Q,1)=0: BOX(277,0 ; 300,6),1: GOTO 1500
1140 GSHAPE (ENEMY%(Q,2),ENEMY%(Q,3)), H%()
1150 IF INT(RND(1)*50)+1<>5 THEN 1500
1160 LINEPAT &B1011010110101101: FOR QQ=1 TO 20: PENA INT(RND(1)*14)+1
1170 DRAW (ENEMY%(Q,2)+13,5 TO ENEMY%(Q,2)+13,175): NEXT QQ: PENA 1
1175 LINEPAT &B1111111111111111: DRAW (ENEMY%(Q,2)+13,5 TO ENEMY%(Q,2)+13,175)
1180 IF ENEMY%(Q,2)>X%-3 AND ENEMY%(Q,2)<X%+25 THEN HP%=HP%-(INT(RND(1)*100)+100)
1190 GOTO 1500
1300 ' SPIKER
1310 ENEMY%(Q,3)=ENEMY%(Q,3)+5
1320 IF ENEMY%(Q,3)>151 THEN ENEMY%(Q,1)=0: BOX (ENEMY%(Q,2),151 ; ENEMY%(Q,2)+19,175),1: GOTO 1500
1330 IF X%<ENEMY%(Q,2) THEN ENEMY%(Q,5)=ENEMY%(Q,5)-1: IF ENEMY%(Q,5)<-5 THEN ENEMY%(Q,5)=-5
1340 IF X%>ENEMY%(Q,2) THEN ENEMY%(Q,5)=ENEMY%(Q,5)+1: IF ENEMY%(Q,5)>5 THEN ENEMY%(Q,5)=5
1350 ENEMY%(Q,2)=ENEMY%(Q,2)+ENEMY%(Q,5)
1380 GSHAPE (ENEMY%(Q,2),ENEMY%(Q,3)), S%()
1500 NEXT Q
1510 RETURN
2000 ' - CRASH? -
2010 FOR Q=1 TO 10: IF ENEMY%(Q,1)=0 OR ENEMY%(Q,4)=2 THEN 2500
2020 ON ENEMY%(Q,4) GOTO 2030,2000,2200
2030 IF ENEMY%(Q,2)>X%+2 AND ENEMY%(Q,2)<X%+34 AND ENEMY%(Q,3)>Y%-9 AND ENEMY%(Q,3)<Y%+44 THEN GOSUB 2600
2040 GOTO 2500
2200 IF ENEMY%(Q,2)>X%-8 AND ENEMY%(Q,2)<X%+32 AND ENEMY%(Q,3)>Y%-14 AND ENEMY%(Q,3)<Y%+39 THEN GOSUB 2600
2210 GOTO 2500
2500 NEXT Q
2510 RETURN
2600 ' - BOOM -
2610 FOR QQ=1 TO 30: RGB 1,15,9,10: RGB 1,15,15,2: RGB 1,14,3,0: RGB 1,0,0,0: NEXT QQ
2620 HP%=HP%-(INT(RND(1)*50)+80)
2630 ENEMY%(Q,1)=0: PENO 1: PENA 1: BOX(ENEMY%(Q,2),ENEMY%(Q,3) ; ENEMY%(Q,2)+18, ENEMY%(Q,3)+24),1
2640 RETURN
3000 ' - MOVE STARS -
3010 FOR Q=1 TO 5: PENA 1: DRAW(STARS%(Q,1),STARS%(Q,2))
3020 STARS%(Q,2)=STARS%(Q,2)+STARS%(Q,3): IF STARS%(Q,2)>175 THEN 3030
3025 GOTO 3040
3030 STARS%(Q,1)=INT(RND(1)*280)+10: STARS%(Q,2)=0: STARS%(Q,3)=INT(RND(1)*4)+1: STARS%(Q,3)=STARS%(Q,3)*5
3040 PENA 2: DRAW (STARS%(Q,1),STARS%(Q,2))
3050 NEXT Q: RETURN
4000 ' - NEW ENEMIES -
4010 QQ=0: FOR Q=1 TO 10: QQ=QQ+ENEMY%(Q,1): NEXT Q: IF QQ>W+3 THEN RETURN
4020 IF INT(RND(1)*5)+1<>3 THEN RETURN
4030 FOR Q=1 TO 10: IF ENEMY%(Q,1)=0 THEN 4050
4040 NEXT Q: RETURN
4050 ENEMY%(Q,1)=1: ENEMY%(Q,2)=INT(RND(1)*250)+25: ENEMY%(Q,3)=0
4060 ENEMY%(Q,4)=INT(RND(1)*3)+1: ENEMY%(Q,5)=INT(RND(1)*7)-3: IF ENEMY%(Q,4)=3 THEN ENEMY%(Q,5)=0
4065 IF ENEMY%(Q,4)=2 AND ENEMY%(Q,5)=0 THEN 4050
4070 RETURN
5000 REM - PLAYER DEATH -
5010 FOR Q=1 TO 150: RGB 1,15,15,15: RGB 1,15,15,2: RGB 1,15,6,0: RGB 1,0,0,0: NEXT Q
5130 FOR QQ=1 TO 100 STEP 5: PENO INT(RND(1)*14)+2: CIRCLE(X%+23,Y%+29),QQ,.5: NEXT QQ
5140 PENO 1: FOR QQ=1 TO 100 STEP 5: CIRCLE(X%+23,Y%+29),QQ,.5: NEXT QQ
5150 SLEEP (10^5): SCNCLR: ? AT(1,1);" ";
5160 ? AT (14,6);"GAME OVER":? AT (1,17);
5170 ?"LAST WAVE: ";W:?"KILLS: ";K%(1)
5180 ?:?
5990 END
6000 ' - SHOTS -
6010 IF SHOT%(1)=0 THEN RETURN
6020 PENA 1: DRAW (SHOT%(2),SHOT%(3) TO SHOT%(2),SHOT%(3)-24)
6030 SHOT%(3)=SHOT%(3)-25: IF SHOT%(3)<0 THEN SHOT%(1)=0: RETURN
6040 PENA 4: DRAW (SHOT%(2),SHOT%(3) TO SHOT%(2),SHOT%(3)-24)
6050 FOR Q=1 TO 10: IF ENEMY%(Q,1)=0 THEN 6400
6060 ON ENEMY%(Q,4) GOTO 6070,6150,6250
6070 IF SHOT%(2)>ENEMY%(Q,2)+1 AND SHOT%(2)<ENEMY%(Q,2)+13 AND SHOT%(3)>ENEMY%(Q,3) AND SHOT%(3)<ENEMY%(Q,3)+44 THEN 6090
6080 GOTO 6400
6090 ENEMY%(Q,1)=0: K%(1)=K%(1)+1: PENO 1: PENA 1
6100 BOX (ENEMY%(Q,2),ENEMY%(Q,3) ; ENEMY%(Q,2)+13,ENEMY%(Q,3)+19),1: SHOT%(1)=0: DRAW (SHOT%(2),SHOT%(3) TO SHOT%(2),SHOT%(3)-24)
6120 FOR Q=1 TO 30: RGB 1,15,2,14: RGB 1,15,11,0: RGB 1,15,15,2: RGB 1,0,0,0: NEXT Q: GOTO 6400
6150 IF SHOT%(2)>ENEMY%(Q,2)+2 AND SHOT%(2)<ENEMY%(Q,2)+22 AND SHOT%(3)<25 THEN 6170
6160 GOTO 6400
6170 FOR QQ=1 TO 30: RGB 1,15,2,14: RGB 1,15,11,0: RGB 1,15,15,2: RGB 1,0,0,0: NEXT QQ
6180 PENO 1: PENA 1: BOX (ENEMY%(Q,2),0 ; ENEMY%(Q,2)+23,5),1: DRAW (SHOT%(2),0 TO SHOT%(2),175): SHOT%(1)=0
6183 FOR QQ=1 TO 13: PENA INT(RND(1)*14)+2: DRAW (ENEMY%(Q,2)-QQ,QQ): DRAW (ENEMY%(Q,2)+QQ,QQ): DRAW (ENEMY%(Q,2),QQ)
6185 SLEEP (10^3)
6186 PENA 1: DRAW (ENEMY%(Q,2)-QQ,QQ): DRAW (ENEMY%(Q,2)+QQ,QQ): DRAW (ENEMY%(Q,2),QQ): NEXT QQ
6190 ENEMY%(Q,1)=0: K%(2)=K%(2)+1: K%(1)=K%(1)+1: GOTO 6400
6250 IF SHOT%(2)>ENEMY%(Q,2)+5 AND SHOT%(2)<ENEMY%(Q,2)+19 AND SHOT%(3)<ENEMY%(Q,3)+49 AND SHOT%(3)>ENEMY%(Q,3)+5 THEN 6270
6260 GOTO 6400
6270 FOR QQ=1 TO 30: RGB 1,15,2,14: RGB 1,15,11,0: RGB 1,15,15,2: RGB 1,0,0,0: NEXT QQ
6280 PENO 1: PENA 1: BOX (ENEMY%(Q,2),ENEMY%(Q,3) ; ENEMY%(Q,2)+17,ENEMY%(Q,3)+23),1: DRAW (SHOT%(2),0 TO SHOT%(2),175): SHOT%(1)=0
6290 ENEMY%(Q,1)=0: K%(1)=K%(1)+1
6300 FOR QQ=1 TO 15 STEP 3: PENO INT(RND(1)*14)+2: CIRCLE(ENEMY%(Q,2)+12,ENEMY%(Q,3)+15),QQ
6310 PENO 1: CIRCLE(ENEMY%(Q,2)+12,ENEMY%(Q,3)+15),QQ: NEXT QQ
6400 NEXT Q: RETURN
6500 RETURN