Code: Select all
10 REM ELITE
20 GOSUB 3000
30 GOSUB 3500
400 REM PLAY
410 LET DY=0
420 LET DX=1
430 GOSUB 1500
440 GOTO 460
450 GOSUB 2500
460 GOSUB 1000
470 GOSUB 1100
480 GOSUB 2000
490 LET KEY=CODE INKEY$
500 IF KEY=0 THEN GOTO 460
510 IF KEY=FIRE THEN GOTO 450
520 GOTO 430
999 STOP
1000 REM LASER SIGHT
1010 PRINT AT 6,14;"\.'"
1020 PRINT AT 6,17;"\'."
1030 PRINT AT 7,14;"\'."
1040 PRINT AT 7,17;"\.'"
1050 RETURN
1100 REM STAR FIELD
1110 IF STARS=0 THEN GOTO 1220
1120 LET S$=" "
1130 GOSUB 1300
1140 IF INT (RND*10)=1 THEN LET SM=SM+1
1150 LET SX=SX+DX
1160 LET SY=SY-DY
1170 LET SM=SM-DY
1180 IF SY+SM>13 THEN GOTO 1230
1190 LET S$="."
1200 GOSUB 1300
1210 RETURN
1220 LET STARS=1
1230 LET SM=0
1240 LET SX=INT (RND*3)+5
1250 LET SY=INT(RND*2)+4
1260 GOTO 1190
1300 REM STAR
1310 IF SY+SM>=0 AND SY+SM<14 AND SX-SM>=0 AND SX-SM<32 THEN PRINT AT SY+SM,SX-SM;S$
1320 IF SY+SM*2-4>=0 AND SY+SM*2-4<14 AND SX+10>=0 AND SX+10<32 THEN PRINT AT SY+SM*2-4,SX+10;S$
1330 IF SY+SM-1>=0 AND SY+SM-1<14 AND SX+SM+20>=0 AND SX+SM+20<32 THEN PRINT AT SY+SM-1,SX+SM+20;S$
1340 RETURN
1500 REM CONTROLS
1510 PRINT AT 18,15;" "
1520 PRINT AT 19,14;" \ :\: "
1530 PRINT AT 20,15;" "
1540 IF DX<>DY THEN LET KEY=0
1550 LET DY=0
1560 LET DX=0
1570 IF KEY=LEFT THEN GOTO 1620
1580 IF KEY=RIGHT THEN GOTO 1650
1590 IF KEY=up THEN GOTO 1680
1600 IF KEY=DOWN THEN GOTO 1710
1610 RETURN
1620 LET DX=DX+1
1630 PRINT AT 19,14;"\ :"
1640 RETURN
1650 LET DX=DX-1
1660 PRINT AT 19,17;"\: "
1670 RETURN
1680 LET DY=DY-1
1690 PRINT AT 18,15;"\ '\' "
1700 RETURN
1710 LET DY=DY+1
1720 PRINT AT 20,15;"\ .\. "
1730 RETURN
2000 REM ENEMY SHIP
2010 IF SHIP=0 AND INT (RND*6)<>1 THEN RETURN
2020 IF SHIP=0 THEN GOTO 2240
2030 IF EY<13 OR EY>43 THEN GOTO 2060
2040 IF EX>=1 AND EX<65 THEN UNPLOT EX-1,EY
2050 IF EX>-2 AND EX<63 THEN UNPLOT EX+1,EY
2060 IF EX<0 OR EX>64 THEN GOTO 2090
2070 IF EY>13 AND EY<45 THEN UNPLOT EX,EY-1
2080 IF EY>11 AND EY<43 THEN UNPLOT EX,EY+1
2090 IF EL=0 THEN GOTO 2700
2100 LET DIR=INT (RND*8)+1
2110 IF DIR=1 AND EY<42 THEN LET EY=EY+1
2120 IF DIR=2 AND EX<62 THEN LET EX=EX+1
2130 IF DIR=3 AND EY>28 THEN LET EY=EY-1
2140 IF DIR=4 AND EX>1 THEN LET EX=EX-1
2150 LET EX=EX+DX
2160 LET EY=EY+DY
2170 IF EY<13 OR EY>43 THEN GOTO 2200
2180 IF EX>=1 AND EX<65 THEN PLOT EX-1,EY
2190 IF EX>-2 AND EX<63 THEN PLOT EX+1,EY
2200 IF EX<0 OR EX>63 THEN GOTO 2230
2210 IF EY>13 AND EY<45 THEN PLOT EX,EY-1
2220 IF EY>11 AND EY<43 THEN PLOT EX,EY+1
2230 RETURN
2240 LET SHIP=1
2250 LET EL=INT (RND*3)+2
2260 LET EX=INT (RND*62)+1
2270 LET EY=INT (RND*10)+33
2280 GOTO 2170
2500 REM FIRE LASER
2510 FOR I=14 TO 7 STEP -1
2520 PRINT AT I,22-I;"\.'"
2530 PRINT AT I,9+I;"\'."
2540 NEXT I
2550 PAUSE 4
2560 FOR I=14 TO 7 STEP -1
2570 PRINT AT I,22-I;" "
2580 PRINT AT I,9+I;" "
2590 NEXT I
2600 IF EY<29 OR EY>30 THEN RETURN
2610 IF EX<30 OR EX>33 THEN RETURN
2620 LET EL=EL-1
2630 RETURN
2700 REM SHIP EXPLODES
2710 LET SHIP=0
2720 FOR I=1 TO 2
2730 PLOT EX,EY
2740 PLOT EX-1,EY
2750 PLOT EX+1,EY
2760 PLOT EX,EY-1
2770 PLOT EX,EY+1
2780 UNPLOT EX,EY
2790 PLOT EX-2,EY-2
2800 PLOT EX+2,EY-2
2810 PLOT EX-2,EY+2
2820 PLOT EX+2,EY+2
2830 UNPLOT EX-1,EY
2840 UNPLOT EX+1,EY
2850 UNPLOT EX,EY-1
2860 UNPLOT EX,EY+1
2870 UNPLOT EX-2,EY-2
2880 UNPLOT EX+2,EY-2
2890 UNPLOT EX-2,EY+2
2900 UNPLOT EX+2,EY+2
2910 NEXT I
2920 RETURN
3000 REM DRAW DISPLAY
3010 FOR I=0 TO 31
3030 PRINT AT 15,I;"\.."
3040 NEXT I
3050 FOR I=16 TO 21
3060 PRINT AT I,7;"\ :"
3070 PRINT AT I,24;"\: "
3080 NEXT I
3090 PRINT AT 17,12;"\ .\..\.'\''\''\'.\..\. "
3100 PRINT AT 18,10;"\..\''\' "," \ '\''\.."
3110 PRINT AT 19,9;"\.'"," \'."
3120 PRINT AT 20,8;"\ .\' "," \ '\. "
3130 PRINT AT 21,8;"\ : E L I T E \: "
3140 PRINT AT 19,15;"\ :\: "
3150 PRINT AT 17,0;"FUEL:"
3160 PRINT AT 18,0;"\##\##\##\##\##\##\##"
3170 PRINT AT 20,0;"ENERGY"
3180 PRINT AT 21,0;"\##\##\##\##\##\##\##"
3190 PRINT AT 17,25;"AMMO:"
3200 PRINT AT 18,25;"\##\##\##\##\##\##\##"
3210 PRINT AT 20,25;"SHIELD:"
3220 PRINT AT 21,25;"\##\##\##\##\##\##\##"
3230 RETURN
3500 REM SETTINGS
3510 LET SHIP=0
3520 LET STARS=0
3530 LET FIRE=CODE "F"
3540 LET LEFT=CODE "A"
3550 LET RIGHT=CODE "D"
3560 LET DOWN=CODE "W"
3570 LET UP=CODE "S"
3580 PRINT AT 0,0;"S:TART C:ONFIGURE?",,," DEFAULT: F,A,D,W,S"
3590 GOSUB 3810
3600 PRINT AT 0,0;" ",,," "
3610 IF KEY=CODE "S" THEN RETURN
3620 PRINT AT 0,0;"PRESS KEY FOR ACTION:"
3630 PRINT AT 2,2;"FIRE?"
3640 GOSUB 3810
3650 LET FIRE=KEY
3660 PRINT AT 2,2;"LEFT?"
3670 GOSUB 3810
3680 LET LEFT=KEY
3690 PRINT AT 2,2;"RIGHT?"
3700 GOSUB 3810
3710 LET RIGHT=KEY
3720 PRINT AT 2,2;"UP? "
3730 GOSUB 3810
3740 LET UP=KEY
3750 PRINT AT 2,2;"DOWN? "
3760 GOSUB 3810
3770 LET DOWN=KEY
3780 PRINT AT 0,0;" "
3790 PRINT AT 2,2;" "
3800 RETURN
3810 REM GET KEY
3820 LET KEY=CODE INKEY$
3830 IF KEY<>0 THEN RETURN
3840 GOTO 3820
Also, I may write a separate utility program that'll renumber the BASIC code for me. Pain to constantly have to change line numbers to keep things uniform. ZX81 doesn't support renumber feature.