In Minefield, written by Neal Cavalier-Smith, you use the 'Z', 'X', '*' and '?' keys to move yourself around the screen, in which you have to manoeuvre your tank across the minefield to get to the other side.
Once you get safely to the right hand-side of the screen, you'll be given the chance of tackling a more difficult field. The blank column on the left-hand side of the screen is a safe 'no man's land' where you can move around in safety. There is no danger of a mine being planted there.
The number in the bottom right-hand corner of the screen denotes the number of mines which your tank is near (including those which are diagonally adjacent to it). The tank's colour (and the colour of its tracks) tells you how many mines are near, as follows:
0 | black |
1 | red |
2 | green |
3 | blue |
4 | magenta |
10 REM MINEFIELD 20 REM By Neal Cavalier-Smith 30 40 MODE 5 50 PROCsetup 60 REPEAT 70 PROCplay 80 UNTIL FALSE 90 STOP 100 DEFPROCsetup 110 VDU23,130,-1,-1,-1,-1,-1,-1,-1,-1 120 VDU23,131,0,0,0,0,0,126,-1,126 130 VDU23,132,81,29,198,42,36,114,247, 126 140 VDU23,133,0,0,31,48,120,254,125,17 0 150 VDU23,134,0,0,31,48,120,-1,252,85 160 VDU23,1,0,0,0,0,0,0,0,0 170 L=1 180 S=0 190 X%=1 200 Y%=13 210 move=0 220 DIMK(500) 230 DIMD(500) 240 DIMM(18,28) 250 FORK%=2TO18 260 FORD%=1TO27 270 IFRND(10+L%*2)<9THENM(K%,D%)=999 280 VDU31,K%,D%,131 290 NEXT:NEXT 300 ENDPROC 310 DEFPROCplay 320 REPEAT 330 VDU19,0,3,0,0,0,0,0 340 VDU19,0,3,0,0,0,0,0 350 VDU19,2,4,0,0,0,0,0 360 SOUND1,-15,5000,1 370 FORX=0TO27 380 IFX<20THENVDU31,19-X,0,32,31,X+1 ,28,32,31,19-X,0,64,31,X,28,64 390 COLOUR1 400 VDU31,X%,Y%,133 410 COLOUR2 420 VDU31,0,X+1,32,31,19,28-X,32,31, 0,X,64,31,19,28-X,64 430 COLOUR1 440 VDU31,X%,Y%,134 450 IFINKEY(2)<>-1 THEN PROCmove 460 COLOUR2 470 NEXT 480 UNTIL FALSE 490 ENDPROC 500 DEFPROCmove 510 move=move+1 520 IFINKEY(-98)ANDX%>01THENX%=X%-1:VD U31,X%+1,Y%,130 530 IFINKEY(-67)ANDX%<18THENX%=X%+1:VD U31,X%-1,Y%,130 540 IFINKEY(-73)ANDY%>01THENY%=Y%-1:PR INTTAB(X%,Y%+1);CHR$130; 550 IFINKEY(-105)ANDY%<27THENY%=Y%+1:P RINTTAB(X%,Y%-1);CHR$130; 560 VDU31,X%,Y%,134 570 D(move)=X%:K(move)=Y% 580 adj=0 590 IFX%=18THENPROCnextlevel:RUN 600 FORK%=-1TO1 610 FORD%=-1TO1 620 IFM(X%+K%,Y%+D%)=999THENadj=adj+1 630 NEXT:NEXT 640 PRINTTAB(18,27);adj 650 ad=adj 660 IFadj>2THENad=ad+1 670 IFM(X%,Y%)=999THENPROCblam 680 VDU19,1,ad,0,0,0,0,0 690 ENDPROC 700 DEFPROCblam 710 VDU31,X%,Y%,132 720 FORK%=2TO18 730 FORD%=1TO27 740 IFM(K%,D%)=999THENVDU31,K%,D%,131 750 NEXT:NEXT 760 PROCreplay 770 PROClost 780 delay=INKEY(200) 790 RUN 800 ENDPROC 810 DEFPROCreplay 820 PRINT TAB(4,28);"REPLAY (Y/N)?"; 830 *FX 15 1 840 REPEAT K$=GET$ 850 UNTIL K$="Y" OR K$="N" 860 CLG 870 IF K$<>"Y" THENENDPROC 880 FORK%=2TO18 890 FORD%=1TO27 900 IFM(K%,D%)=999THENVDU31,K%,D%,131 910 NEXT:NEXT 920 FORX=1TOmove 930 FORC=1TO10 940 PRINT TAB(D(X),K(X));CHR$133; 950 PRINT TAB(D(X),K(X));CHR$134; 960 NEXT 970 PRINT TAB(D(X),K(X));" "; 980 NEXT 990 PRINT TAB(D(move),K(move));CHR$132 ; 1000 delay=INKEY(100) 1010 ENDPROC 1020 DEFPROCnextlevel 1030 L=L+1 1040 CLG 1050 VDU19,0,5,0,0,0,0,0 1060 PRINTTAB(0,3);" Congratulations!" 1070 PRINTTAB(0,8);"You may now proceed to level ";L 1080 S=S+150-move+S% 1090 PRINT:PRINT:PRINT:PRINT 1100 S%=S 1110 PRINT"[spc3]SCORE ";S 1120 PROCreplay 1130 ENDPROC 1140 DEFPROClost 1150 PRINT:PRINT:PRINT:PRINT 1160 S=S+90-move+S% 1170 S%=0 1180 PRINT"[spc3]You scored ";S 1190 ENDPROC
Saucer Encounter
In this challenging game, based on an idea by Garry Wilson, you are working in real time, trying to land your spacecraft on the flying saucer which moves across the bottom of the screen.
When the game is underway, the screen is dotted with randomly plotted stars, and there's even a right bracket for a moon. Fuel is being consumed all the time, and you must land on the saucer before all the fuel has been used up. Your 'pilot rating' depends, in part, on how little fuel you used up to land successfully. Crash landings do not acquire a rating.
10 REM SAUCER ENCOUNTER 20 30 REPEAT 40 MODE 5 50 PROC_initialise 60 PROC_play 70 UNTIL NOT FN_newgame 80 MODE 7 90 END 100 DEF PROC_play 110 REPEAT 120 IF fuel%<=0 THEN PROC_gravity:GO TO 170 130 IF fuel%<=40 THEN SOUND 1,-10,10 0,1 140 IF INKEY(-98) THEN PROC_right 150 IF INKEY(-67) THEN PROC_left 160 IF INKEY(-105) THEN PROC_up ELSE PROC_gravity 170 GCOL 0,0 180 MOVE 1150,1004 190 DRAW 350+4*fuel%,1004 200 MOVE craftx%,crafty%:PRINT"[fs0] [fs1]" 210 IF fuel%>0 THEN craftx%=craftx%+ velx% ELSE craftx%=craftx%+16*SGN(saucer x%-craftx%) 220 IF craftx%>=1103 THEN craftx%=0 230 IF craftx%<0 THEN craftx%=1103 240 crafty%=crafty%+vely% 250 IF crafty%<1 THEN crafty%=960 260 IF crafty%>960 THEN crafty%=32 270 MOVE saucerx%,96:PRINT"[fs2][fs3 ][fs4]" 280 saucerx%=saucerx%+16 290 IF saucerx%>=1087 THEN saucerx%= 0 300 GCOL 0,1 310 MOVE craftx%,crafty%:PRINT"[fs0] [fs1]" 320 GCOL 0,3 330 MOVE saucerx%,96:PRINT"[fs2][fs3 ][fs4]" 340 UNTIL POINT(craftx%+20,crafty%-3 2)=3 OR POINT(craftx%+72,crafty%-32)=3 O R POINT(craftx%+48,crafty%)=3 350 IF POINT(craftx%+48,crafty%)=3 OR craftx%<(saucerx%+16) OR craftx%>(saucer x%+48) OR vely%<-7 THEN PROC_crash ELSE PROC_dock 360 ENDPROC 370 DEF PROC_initialise 380 VDU 19,1,3,0,0,0 390 VDU 19,2,7,0,0,0 400 VDU 19,3,1,0,0,0 410 VDU 23,0,10,32,0;0;0; 420 VDU 23,128,0,1,1,7,1,3,7,12 430 VDU 23,129,128,192,192,240,192,224 ,240,24 440 VDU 23,130,0,0,0,0,0,3,15,63 450 VDU 23,131,0,0,0,0,0,255,170,255 460 VDU 23,132,0,0,0,0,0,192,240,252 470 FOR stars%=1 TO 100 480 GCOL 0,RND(2) 490 PLOT 69,RND(1279),RND(992) 500 NEXT stars% 510 COLOUR 2 520 PRINT TAB(18,3);")" 530 velx%=0:vely%=0 540 craftx%=RND(1103):crafty%=950 550 fuel%=200 560 COLOUR 3:PRINT TAB(0,0);"FUEL:" 570 GCOL 0,3 580 MOVE 350,1004 590 PLOT 1,(fuel%/5)*4,0 600 GCOL 0,2 610 DRAW 350+4*fuel%,1004 620 saucerx%=0 630 VDU 5 640 ENDPROC 650 DEF PROC_right 660 velx%=velx%+1 670 IF velx%>25 THEN velx%=25 680 fuel%=fuel%-1 690 ENDPROC 700 DEF PROC_left 710 velx%=velx%-1 720 IF velx%<-25 THEN velx%=-25 730 fuel%=fuel%-1 740 ENDPROC 750 ENDPROC 760 DEF PROC_up 770 vely%=vely%+1 780 IF vely%>25 THEN vely%=25 790 fuel%=fuel%-1 800 SOUND &10,-10,4,3 810 ENDPROC 820 DEF PROC_gravity 830 vely%=vely%-1 840 IF vely%<-25 THEN vely%=-25 850 ENDPROC 860 DEF PROC_dock 870 VDU 4,31,0,0 880 VDU 19,2,11,0,0,0 890 COLOUR 2 900 PRINT" Congratulations!"' 910 COLOUR 1 920 PRINT'"You have landed your"; 930 PRINT'"space craft safely "; 940 PRINT'"and are due for a[spc3]"; 950 PRINT'"bonus of `";1.80*fuel%;"m" 960 PRINT'"for saving fuel." 970 ENDPROC 980 DEF PROC_crash 990 PROC_explode 1000 VDU 4,31,0,0 1010 COLOUR 2 1020 PRINT"[spc6]OH DEAR![spc5]"' 1030 PRINT'"You have crashed and"; 1040 PRINT'"caused `10bn of lost"; 1050 PRINT'"revenue." 1060 PRINT'"That doesn't matter "; 1070 PRINT'"because you did not "; 1080 PRINT'"survive anyway!"' 1090 ENDPROC 1100 DEF PROC_explode 1110 FOR flame%=0 TO 20+fuel% 1120 GCOL 0,RND(4)-1 1130 MOVE craftx%+50,crafty%-16 1140 PLOT 1,RND(400)-200,RND(400)-200 1150 SOUND &10,-RND(15),4,2 1160 NEXT flame% 1170 ENDPROC 1180 DEF FN_newgame 1190 *FX 15 0 1200 REPEAT UNTIL INKEY$(0)="" 1210 PRINT''"Would you like to "; 1220 PRINT'"play again (Y/N) ?"; 1230 REPEAT key$=GET$ 1240 UNTIL key$="Y" OR key$="y" OR ke y$="N" OR key$="n" 1250 IF key$="Y" OR key$="y" THEN =TRUE ELSE =FALSE
Eliminate
Now that the maze has vanished, the ghost are on the run. In this great arcade game, your mission is to seek out and destroy. There are two enemies on the screen, and you can pick either one of them to eliminate. You do this by running over it.
10 REM ELIMINATE 20 30 MODE 4 40 PROC_INIT 50 REPEAT 60 PROC_NEWGAME 70 PROC_PLAY 80 UNTIL NOT FN_ANOTHER 90 END 100 110 DEF PROC_INIT 120 VDU 23,0,10,32,0;0;0; 130 VDU 23,128,0,66,231,191,-1,-1,126, 60 140 VDU 23,129,60,118,252,248,248,252, 126,60 150 VDU 23,130,60,126,-1,-1,253,231,66 ,0 160 VDU 23,131,60,110,63,31,31,63,126, 60 170 VDU 23,132,60,126,-1,-1,-1,-1,126, 60 180 VDU 23,133,60,126,219,-1,231,-1,-1 ,85 190 AL%=3 200 DIM X%(AL%),Y%(AL%) 210 HIGH=15000 220 ENDPROC 230 DEF PROC_NEWGAME 240 PA=6:PD=5:N%=AL% 250 PAE=6:PDE=5 260 S$="[fs1]" 270 PROC_BORDER 280 FOR A%=0 TO N% 290 X%(A%)=RND(37):Y%(A%)=2+RND(27):VD U31,X%(A%),Y%(A%),133 300 NEXT 310 ENDPROC 320 DEF PROC_BORDER 330 CLS 340 PRINT TAB(0,1);STRING$(40,"[fs1]") ; 350 FOR Y%=2 TO 29 360 PRINT TAB(0,Y%);"[fs0]";TAB(39,Y%) ;"[fs2]"; 370 NEXT 380 PRINT TAB(0,30);STRING$(40,"[fs3]" ); 390 PRINT TAB(0,0);"HIGH :";HIGH;TAB(2 0,0);"SCORE :0";TAB(35,0);"[fs5][fs5][fs 5][fs5]"; 400 ENDPROC 410 DEF PROC_PLAY 420 TIME=0 430 REPEAT 440 FORA%=1 TO N%-1 450 PROC_ALIEN(RND(1+N%)-1) 460 NEXT 470 IF FNHIT THEN PROC_DIE 480 PRINT TAB(PAE,PDE);" " 490 PDE=PD:PAE=PA 500 PRINT TAB(PA,PD); 510 IF TIME MOD 2=0 THEN PRINTS$;ELS E PRINT"[fs4]"; 520 IF PA<38 THEN IF INKEY(-67) THEN S$="[fs1]":PA=PA+1 530 IF PA>1 THEN IF INKEY(-98) THEN S$="[fs3]":PA=PA-1 540 IF PD>2 THEN IF INKEY(-73) THEN S$="[fs0]":PD=PD-1 550 IF PD<29 THEN IF INKEY(-105) THE N S$="[fs2]":PD=PD+1 560 PRINT TAB(27,0);TIME; 570 UNTIL N%<0 580 T%=TIME 590 IF T%<HIGH THEN HIGH=T%:PRINT TAB( 10,10);"A NEW BEST SCORE!"; 600 PRINT TAB(0,0);"HIGH :";HIGH;SPC(2 0-POS);"SCORE :";T%; 610 *FX 15 1 620 ENDPROC 630 DEF FNHIT 640 H%=FALSE 650 FOR A%=0 TO N% 660 IF ((X%(A%)=PA) AND (Y%(A%)=PD)) T HEN H%=TRUE 670 NEXT 680 =H% 690 DEF PROC_DIE 700 VDU 7 710 PRINT TAB(35+N%,0);" "; 720 PRINT TAB(PA,PD);S$; 730 FOR A%=0 TO N% 740 VDU31,X%(A%),Y%(A%),32 750 X%(A%)=RND(37):Y%(A%)=2+RND(27):VD U31,X%(A%),Y%(A%) 760 IF A%<>N% THEN VDU 133 770 NEXT 780 N%=N%-1 790 ENDPROC 800 DEF PROC_ALIEN(A%) 810 VDU 31,X%(A%),Y%(A%),32:X%(A%)=X%( A%)+SGN(X%(A%)-PA)+RND(3)-2:Y%(A%)=Y%(A% )+SGN(Y%(A%)-PD)+RND(3)-2 820 IF SGN(X%(A%)-PA)=0 THEN X%(A%)=X% (A%)+RND(3)-2 830 IF SGN(Y%(A%)-PA)=0 THEN Y%(A%)=Y% (A%)+RND(3)-2 840 IF X%(A%)<2 THEN X%(A%)=1 850 IF X%(A%)>37 THEN X%(A%)=38 860 IF Y%(A%)<5 THEN Y%(A%)=4 870 IF Y%(A%)>29 THEN Y%(A%)=29 880 VDU 31,X%(A%),Y%(A%),133 890 ENDPROC 900 DEF FN_ANOTHER 910 FOR A%=0 TO N% 920 PRINT TAB(X%(A%),Y%(A%));" "; 930 NEXT 940 PRINT TAB(5,15);"Do you want anoth er go ?"; 950 REPEAT KEY$=GET$ 960 UNTIL KEY$="Y" OR KEY$="N" 970 PRINT KEY$ 980 =(KEY$="Y")
Dropout
Full instructions for this dynamic game, based on an idea by Paul Toland, are included in the program. Aliens are stacked above you, ready to fall when their stack is full. You can shoot an alien at any time, but the lower they are when hit, the more points they are worth.
The difficulty level determines the speed with which the aliens appear above you. The program includes a high-score feature.
10 REM DROPOUT 20 30 MODE 1 40 PROC_INIT 50 REPEAT 60 PROC_INSTR 70 PROC_PLAY 80 PROC_SCORES 90 UNTIL NOT FN_ANOTHER 100 MODE 7 110 END 120 DEF PROC_INIT 130 VDU 19,2,4,0,0,0 131 VDU19,2,6;0; 140 VDU 19,3,2,0,0,0 150 DIM F%(9,2),S%(13),Z%(10),Z$(10) 160 FOR S%=1 TO 10 170 Z%(S%)=1000-(S%*100):Z$(S%)="ME" +STR$(S%) 180 NEXT 190 VDU 23,0,10,32,0;0;0; 200 VDU 23,128,24,24,24,60,60,255,255, 255 210 VDU 23,129,60,60,60,60,60,60,60,25 5 220 VDU 23,130,0,231,66,126,82,255,255 ,102 230 VDU 23,131,48,24,12,24,48,24,12,24 240 VDU 23,132,255,255,24,60,102,195,1 95,0 250 ENVELOPE 1,3,-4,-1,2,6,6,28,81,-3, -4,-2,126,50 260 DIM code 7 270 P%=code 280 [OPT 2 290 LDA #&87 300 JSR &FFF4 310 TXA 320 RTS:] 330 ENDPROC 340 DEF PROC_INSTR 350 PROC_SETUP 360 VDU 28,2,31,36,9 370 COLOUR 3 380 PRINT TAB(11);"INSTRUCTIONS" 390 PRINT TAB(10);"=============="' 400 COLOUR 2 410 PRINT" The aliens are gathering in their" 420 PRINT"launch chutes above.Every ti me one" 430 PRINT"of the chutes become full,an alien" 440 PRINT"descends and explodes on imp act" 450 PRINT"with the ground (or you!).Yo u can" 460 PRINT"destroy an alien at any time by" 470 PRINT"moving under the alien and f iring" 480 PRINT"a missile at it." 490 COLOUR 1 500 PRINT'TAB(10);"CONTROLS:-" 510 PRINT'"LEFT - CAPS LOCK" 520 PRINT'"RIGHT - CTRL" 530 PRINT'"FIRE - RETURN" 540 PRINT''"Speed level (1-5) 5-slow : "; 550 *FX 15 1 560 REPEAT KEY$=GET$ 570 UNTIL KEY$>="0" AND KEY$<"6" 580 SPD=VAL(KEY$) 590 VDU 12 600 PROC_HIGHSCORES 610 PRINT'"Press SPACE BAR to play"; 620 REPEAT UNTIL GET=32 630 VDU 12,26 640 ENDPROC 650 DEF PROC_PLAY 660 COLOUR 1:PRINT TAB(G%,30);"[fs0]"; 670 HIT=FALSE 680 REPEAT 690 FOR I%=1 TO SPD+2 700 FOR J%=1 TO 5 710 T%=G% 720 G%=G%+(INKEY(-65) AND G%>5)- (INKEY(-2) AND G%<33) 730 COLOUR 1 740 IF T%<>G% THEN PRINT TAB(T%, 30);" ";TAB(G%,30);"[fs0]"; 750 IF F%(J%,1)=0 THEN 860 760 COLOUR 1+(J% MOD 3) 770 PRINT TAB(F%(J%,2),F%(J%,1)) ;" "; 780 F%(J%,1)=F%(J%,1)+1 790 PRINT TAB(F%(J%,2),F%(J%,1)) ;"[fs2]"; 800 IF F%(J%,1)<>30 THEN 860 810 F%(J%,1)=0:NF%=NF%+1 820 PRINT TAB(F%(J%,2),30);" " 830 SOUND &13,-10,0,1 840 IF G%=F%(J%,2) THEN HIT=TRUE :J%=5:I%=SPD+2:SOUND 2,1,100,5 850 SC%=SC%-10:PROC_SCORE 860 IF BY%=0 THEN TIME=0:REPEAT UNTIL TIME>2:GOTO 990 870 C%=FN_CHAR(BX%,BY%) 880 PRINT TAB(BX%,BY%);" " 890 BY%=BY%-1:IF BY%<8 THEN BY%= 0:GOTO 1000 900 N%=FN_CHAR(BX%,BY%) 910 IF N%=32 AND (C%=32 OR C%=13 1) THEN COLOUR 2:PRINT TAB(BX%,BY%);"[fs 3]":SOUND &11,-(BY%-8)/1.4,255-BY%,2:GOT O 1000 920 SOUND &11,-10,100,1:SC%=SC%+ BY%:PROC_SCORE 930 PRINT TAB(BX%,BY%);" ";:NF%= NF%+1 940 a%=0 950 FOR A%=1 TO 5 960 IF F%(A%,1)=BY% AND F%(A%, 2)=BX% THEN a%=A% 970 NEXT 980 BY%=0:F%(a%,1)=0:GOTO 1000 990 IF INKEY(-74) THEN BY%=29:BX %=G% 1000 NEXT J% 1010 NEXT I% 1020 IF HIT THEN 1160 1030 COLOUR 3 1040 FOR H%=1 TO (6-SPD)/2 1050 pos=RND(14)-1 1060 IF S%(pos)<5 THEN S%(pos)=S%(p os)+1:PRINT TAB(pos*2+6,8-S%(pos));"[fs2 ]" 1070 IF S%(pos)<5 OR NF%=0 THEN 115 0 1080 I%=1 1090 REPEAT IF F%(I%,1)>0 THEN I%=I %+1 1100 UNTIL F%(I%,1)=0 OR I%=9 1110 IF I%=9 AND F%(I%,1)<>0 THEN 1 150 1120 F%(I%,1)=8:F%(I%,2)=pos*2+6:NF %=NF%-1 1130 PRINT TAB(pos*2+6,3);" "; 1140 S%(pos)=S%(pos)-1 1150 NEXT 1160 UNTIL HIT 1170 ENDPROC 1180 DEF PROC_SCORES 1190 *FX 202 32 1200 *FX 15 1 1210 VDU 28,2,31,36,9,12 1220 COLOUR 3:PRINT''TAB(12);"GAME OVER " 1230 FOR W%=1 TO 500 1240 REPEAT UNTIL INKEY(-147) 1250 NEXT 1260 PROC_HIGHSCORES 1270 PRINT "You have a score of ";SC% 1280 IF SC%<Z%(10) THEN PRINT"This is n ot enough to enter it in to the HALL OF FAME":ENDPROC 1290 PRINT'"Your name will go in the"'" HALL OF FAME"'"for all to see" 1300 *FX 15 1 1310 INPUT'"What is your name :"Z$(10) 1320 S%=10 1330 Z%(10)=SC% 1340 swap=TRUE 1350 REPEAT 1360 IF Z%(S%-1)<=Z%(S%) THEN T%=Z%(S %):Z%(S%)=Z%(S%-1):Z%(S%-1)=T%:T$=Z$(S%) :Z$(S%)=Z$(S%-1):Z$(S%-1)=T$:S%=S%-1 ELS E swap=FALSE 1370 UNTIL NOT swap OR S%=1 1380 PROC_HIGHSCORES 1390 ENDPROC 1400 DEF FN_ANOTHER 1410 COLOUR 1 1420 PRINT''"Do you wish to play again :"; 1430 REPEAT KEY$=GET$ 1440 UNTIL KEY$="Y" OR KEY$="y" OR KE Y$="N" OR KEY$="n" 1450 VDU 26 1460 IF KEY$="Y" OR KEY$="y" THEN =TRUE ELSE =FALSE 1470 DEF PROC_SETUP 1480 CLS 1490 FOR I%=0 TO 13 1500 COLOUR 1:PRINT TAB(5+2*I%,2);"[f s1]"; 1510 COLOUR 2:PRINT"[fs4]"; 1520 NEXT 1530 COLOUR 1:PRINT"[fs1]"; 1540 FOR I%=3 TO 7 1550 FOR J%=0 TO 14 1560 PRINT TAB(5+2*J%,I%);"[fs1]"; 1570 NEXT 1580 NEXT 1590 T$="DROPOUT" 1600 G%=0 1610 FOR L%=1 TO LEN(T$) 1620 COLOUR 1+(L% MOD 3) 1630 C$=MID$(T$,L%,1) 1640 PRINT TAB(10+2*L%,0);C$; 1650 G%=G%+L% 1660 PRINT TAB(0,1+G%);C$;TAB(38,1+G% );C$; 1670 NEXT 1680 COLOUR 1 1690 FOR A%=0 TO 13 1700 IF A%<10 THEN F%(A%,1)=0:F%(A%,2 )=0 1710 S%(A%)=0 1720 NEXT 1730 SC%=0:G%=16:BX%=0:BY%=0:NF%=5 1740 PRINT TAB(0,1);"Score : 0"; 1750 ENDPROC 1760 DEF FN_CHAR(X%,Y%) 1770 PRINT TAB(X%,Y%); 1780 =USR(code) AND &FF 1790 DEF PROC_SCORE 1800 COLOUR 1 1810 PRINT TAB(7,1);SC%;"[spc3]" 1820 ENDPROC 1830 DEF PROC_HIGHSCORES 1840 CLS 1850 PRINT'TAB(10);"HALL OF FAME"' 1860 FOR S%=1 TO 10 1870 IF S%=1 THEN COLOUR 1 ELSE COLOU R 3 1880 PRINT TAB(0);S%;TAB(3);Z%(S%) ;T AB(10);LEFT$(Z$(S%),20) 1890 NEXT 1900 PRINT' 1910 ENDPROC
Pursuit
In this game, you have to pilot your craft around the screen, trying to stay out of the clutches of the meanies. Go to it, your life is in your hands (or, at least, in your keyboard-pressing fingers).
10 REM PURSUIT 20 30 MODE 4 40 PROC_INIT 50 REPEAT 60 PROC_NEWGAME 70 PROC_PLAY 80 UNTIL NOT FN_ANOTHER 90 END 100 110 DEF PROC_INIT 120 VDU 23,0,10,32,0;0;0; 130 VDU 23,128,8,8,28,62,127,8,8,28 140 VDU 23,129,16,24,156,255,156,24,16 ,0 150 VDU 23,130,28,8,8,127,62,28,8,8 160 VDU 23,131,8,24,57,255,57,24,8,0 170 VDU 23,132,66,36,189,165,165,255,6 0,36,231 180 N%=3 190 DIM X%(N%),Y%(N%) 200 HIGH=0 210 ENDPROC 220 DEF PROC_NEWGAME 230 PA=6:PD=5 240 PAE=6:PDE=5 250 S$="[fs1]":L%=3 260 PROC_BORDER 270 FOR A%=0 TO N% 280 X%(A%)=RND(37):Y%(A%)=2+RND(27): VDU31,X%(A%),Y%(A%),132 290 NEXT 300 ENDPROC 310 DEF PROC_BORDER 320 CLS 330 PRINT TAB(0,1);STRING$(40,"[fs1]") ; 340 FOR Y%=2 TO 29 350 PRINT TAB(0,Y%);"[fs0]";TAB(39,Y %);"[fs2]"; 360 NEXT 370 PRINT TAB(0,30);STRING$(40,"[fs3]" ); 380 PRINT TAB(0,0);"HIGH :";HIGH;TAB(2 0,0);"SCORE :0" 390 ENDPROC 400 DEF PROC_PLAY 410 TIME=0 420 REPEAT 430 PRINT TAB(PAE,PDE);" " 440 PDE=PD:PAE=PA 450 PROC_ALIEN(RND(1+N%)-1) 460 IF FNHIT THEN PROC_DIE 470 PRINT TAB(PA,PD);S$; 480 IF PA<38 THEN IF INKEY(-67) THEN S$="[fs1]":PA=PA+1 490 IF PA>1 THEN IF INKEY(-98) THEN S$="[fs3]":PA=PA-1 500 IF PD>2 THEN IF INKEY(-73) THEN S$="[fs0]":PD=PD-1 510 IF PD<29 THEN IF INKEY(-105) THE N S$="[fs2]":PD=PD+1 520 PRINT TAB(27,0);TIME; 530 UNTIL L%=0 540 T%=TIME 550 IF T%>HIGH THEN HIGH=T%:PRINT TAB( 10,10);"A NEW HIGH SCORE!"; 560 PRINT TAB(0,0);"HIGH :";HIGH;TAB(2 0,0);"SCORE :";T%; 570 *FX 15 1 580 ENDPROC 590 DEF FNHIT 600 H%=FALSE 610 FOR A%=0 TO N% 620 IF ((X%(A%)=PA) AND (Y%(A%)=PD)) THEN H%=TRUE 630 NEXT 640 =H% 650 DEF PROC_DIE 660 L%=L%-1 670 VDU 7 680 PRINT TAB(35+L%,0);"[fs4]"; 690 PRINT TAB(PA,PD);S$; 700 FOR A%=0 TO N% 710 VDU31,X%(A%),Y%(A%),32 720 X%(A%)=RND(37):Y%(A%)=2+RND(27): VDU31,X%(A%),Y%(A%),132 730 NEXT 740 ENDPROC 750 DEF PROC_ALIEN(A%) 760 VDU 31,X%(A%),Y%(A%),32:X%(A%)=X%( A%)-SGN(X%(A%)-PA):Y%(A%)=Y%(A%)-SGN(Y%( A%)-PD):VDU 31,X%(A%),Y%(A%),132 770 ENDPROC 780 DEF FN_ANOTHER 790 FOR A%=1 TO N% 800 PRINT TAB(X%(A%),Y%(A%));" "; 810 NEXT 820 PRINT TAB(5,15);"Do you want anoth er go ?"; 830 REPEAT KEY$=GET$ 840 UNTIL KEY$="Y" OR KEY$="N" 850 PRINT KEY$ 860 =(KEY$="Y")
Sea Sub
You are the submarine at the bottom of the screen in the game, and your task is to destroy all the ships as they sail overhead. You are fighting against the clock all through the game, and have only one minute to accomplish your mission.
You move your sub left and right with the CAPS LOCK and CTRL keys, and fire using the RETURN key. The smaller the ship, the faster it travels, and the points you score are related to the size of the ship and how far away from you it is. You can only fire one torpedo at a time.
10 REM Sea Sub 20 30 MODE 5 40 PROC_init 50 REPEAT 60 PROC_new_game 70 PROC_play 80 UNTIL NOT FN_another 90 MODE 7 100 END 110 120 DEF PROC_init 130 VDU 23,0,10,32,0;0;0; 140 DIM R%(5),B$(5) 150 VDU 19,1,4,0,0,0 160 VDU 19,2,6,0,0,0 170 VDU 23,128,8,8,8,8,8,8,8,8 180 VDU 23,129,0,0,16,16,60,127,254,25 2 190 VDU 23,130,4,4,7,15,31,255,255,127 200 VDU 23,131,128,128,224,240,255,254 ,252,248 210 VDU 23,132,0,0,0,0,255,255,255,127 220 VDU 23,133,40,62,126,255,255,255,2 55,255 230 VDU 23,134,0,0,0,3,255,254,254,248 240 VDU 23,135,0,28,28,28,62,127,127,6 2 250 ENVELOPE 1,1,0,0,0,0,0,0,10,-10,10 ,1,126,50 260 FOR B%=0 TO 5 270 READ B$(B%) 280 NEXT 290 H%=0 300 ENDPROC 310 320 DEF PROC_new_game 330 GCOL 0,129 340 VDU 24,0;700;1279;1023;16 350 GCOL 0,130 360 VDU 24,0;0;1279;700;16,26 370 FOR P=1 TO 4 380 PROC_cloud 390 NEXT 400 COLOUR 3:COLOUR 129 410 PRINT TAB(0,0);"SCORE 0";TAB(11,0) ;"HIGH ";H% 420 PRINT TAB(0,1);"TIME" 430 FOR B%=0 TO 5 440 R%(B%)=0 450 NEXT 460 S%=0:TIME=-6000 470 X%=10:TY%=FALSE 480 ENDPROC 490 500 DEF PROC_play 510 REPEAT COLOUR 0:COLOUR 130 520 PRINT TAB(X%,30);" "; 530 X%=X%+(INKEY(-65)AND X%>0)-(INKE Y(-2)AND X%<19) 540 PRINT TAB(X%,30);"[fs7]"; 550 PROC_ships 560 IF TY%=0 AND INKEY(-74) THEN PRO C_shoot 570 IF TY%<>0 THEN PROC_torpedo 580 COLOUR 3:COLOUR 129 590 PRINT TAB(5,1);ABS(TIME DIV 100) ;" "; 600 UNTIL TIME>=0 610 *FX 15 1 620 *FX 202 32 630 ENDPROC 640 650 DEF FN_another 660 IF S%>H% THEN H%=S%:PRINT TAB(16,0 );H% 670 COLOUR 0:COLOUR 131 680 IF S%=H% THEN PRINT TAB(2,3);"A NE W HIGH SCORE" 690 PRINT TAB(3,5);"ANOTHER GAME ?"; 700 REPEAT KEY$=GET$ 710 UNTIL KEY$="Y" OR KEY$="N" 720 =(KEY$="Y") 730 740 DEF PROC_ships 750 FOR B%=0 TO 5 760 R%=9+(B%*3) 770 IF B%=0 THEN COLOUR 129 ELSE COL OUR 130 780 IF R%(B%)=0 THEN R%(B%)=RND(9)DI V9:GOTO 820 790 PRINT TAB(R%(B%),R%);" "; 800 IF RND(B%+2)<=2 THEN R%(B%)=R%(B %)+1 810 IF R%(B%)=21-LEN(B$(B%)) THEN R%(B%)=0:PRINT TAB(20-LEN(B$(B%)),R%);SP C(LEN(B$(B%))); ELSE PRINT TAB(R%(B%),R% );B$(B%); 820 NEXT 830 ENDPROC 840 850 DEF PROC_shoot 860 TX%=X%:TY%=29 870 PRINT TAB(TX%,TY%);"[fs0]"; 880 ENDPROC 890 900 DEF PROC_torpedo 910 PRINT TAB(TX%,TY%);" "; 920 TY%=TY%-1 930 IF TY% MOD 3=0 THEN S%=S%+FN_SC(TX %,TY%):COLOUR3:COLOUR 129:PRINT TAB(6,0) ;S%;" "; 940 IF TY%<10 THEN TY%=0:ENDPROC 950 SOUND &11,-(TY%-10)/1.4,255-TY%,6 960 COLOUR 0:COLOUR 130 970 PRINT TAB(TX%,TY%);"[fs0]"; 980 ENDPROC 990 1000 DEF FN_SC(X%,Y%) 1010 IF Y%>25 THEN =0 1020 B%=(Y%/3)-3 1030 IF X%<R%(B%) OR X%+1>R%(B%)+LEN(B$ (B%)) THEN =0 1040 SOUND &10,-10,6,10 1050 IF B%=0 THEN COLOUR 129 1060 IF B%=0 THEN COLOUR 129 ELSE COLOU R 130 1070 PRINT TAB(R%(B%),TY%);SPC(LEN(B$(B %))); 1080 TY%=0:R%(B%)=0 1090 =(4-LEN(B$(B%)))*(25-Y%) 1100 1110 DEF PROC_cloud 1120 GCOL 0,3 1130 MOVE RND(1279),750+RND(200) 1140 FOR C%=1 TO 6 1150 PLOT 1,RND(50)+C%*50,0 1160 PLOT 0,-(C%*60+RND(50)),4 1170 NEXT 1180 PLOT 0,RND(200),0 1190 PLOT 1,RND(300),0 1200 ENDPROC 1210 1220 DATA "[fs1]","[fs2][fs3]","[fs4][f s5][fs6]","[fs1]","[fs2][fs3]","[fs2][fs 3]"
V-Wing Attack
Guide your ship around the screen, running over the numbers which appear at random for a short time. If you're not quick, the number will disappear. You have a limited time, and you are constantly trying to beat your previous score.
You control your ship with the following keys:
X | to move right |
Z | to move left |
/ | to move down |
: | to move down |
10 REM V-WING ATTACK 20 30 MODE 4 40 PROC_INIT 50 REPEAT 60 PROC_NEWGAME 70 PROC_PLAY 80 UNTIL NOT FN_ANOTHER 90 END 100 110 DEF PROC_INIT 120 VDU 23,0,10,32,0;0;0; 130 VDU 23,128,24,24,36,36,66,90,165,1 95 140 VDU 23,129,192,176,76,35,35,75,176 ,192 150 VDU 23,130,195,165,90,66,36,36,24, 24 160 VDU 23,131,3,13,50,196,196,50,13,3 170 HIGH=0 180 ENDPROC 190 DEF PROC_NEWGAME 200 PA=6:PD=5:L%=0 210 PAE=6:PDE=5 220 S$="[fs1]":S%=0 230 PROC_BORDER 240 X%=RND(37):Y%=2+RND(27):VDU31,X%,Y %,65 250 ENDPROC 260 DEF PROC_BORDER 270 CLS 280 PRINT TAB(0,1);STRING$(40,"[fs1]") ; 290 FOR Y%=2 TO 29 300 PRINT TAB(0,Y%);"[fs0]";TAB(39,Y %);"[fs2]"; 310 NEXT 320 PRINT TAB(0,30);STRING$(40,"[fs3]" ); 330 PRINT TAB(0,0);"HIGH : ";HIGH;TAB( 20,0);"SCORE :0" 340 PRINT TAB(0,31);"TIME :500"; 350 ENDPROC 360 DEF PROC_PLAY 370 TIME=-6000 380 REPEAT 390 PRINT TAB(PAE,PDE);" " 400 PDE=PD:PAE=PA 410 IF RND(100)>98 THEN VDU31,X%,Y%, 32:X%=RND(37):Y%=2+RND(7):VDU 31,X%,Y%,6 5+(L% MOD 26) 420 IF FNHIT THEN PROCSCORE(L%) 430 PRINT TAB(PA,PD);S$; 440 IF PA<38 THEN IF INKEY(-67) THEN S$="[fs1]":PA=PA+1 450 IF PA>1 THEN IF INKEY(-98) THEN S$="[fs3]":PA=PA-1 460 IF PD>2 THEN IF INKEY(-73) THEN S$="[fs0]":PD=PD-1 470 IF PD<29 THEN IF INKEY(-105) THE N S$="[fs2]":PD=PD+1 480 PRINT TAB(6,31);ABS(TIME);" "; 490 UNTIL TIME>=0 500 PRINT TAB(6,31);"0[spc3]"; 510 IF S%>HIGH THEN HIGH=S%:PRINT TAB( 10,10);"A NEW HIGH SCORE!"; 520 *FX 15 1 530 ENDPROC 540 DEF FNHIT=((X%=PA) AND (Y%=PD)) 550 DEF PROCSCORE(V%) 560 S%=S%+(V%+1) 570 SOUND &11,-10,100,3 580 PRINT TAB(27,0);S%;" "; 590 PRINT TAB(X%,Y%);S$; 600 X%=RND(37):Y%=2+RND(27):L%=L%+1:VD U31,X%,Y%,65+(L% MOD 26) 610 ENDPROC 620 DEF FN_ANOTHER 630 PRINT TAB(X%,Y%);" " 640 PRINT TAB(5,15);"Do you want anoth er go ?"; 650 REPEAT KEY$=GET$ 660 UNTIL KEY$="Y" OR KEY$="N" 670 PRINT KEY$ 680 =(KEY$="Y")
Woodworm
Picture yourself as a woodworm. If you look like me, that is not hard to do. All you have to do is eat your way across the screen. For the purposes of this game, you must think of the screen as a large chunk of wood. The wood is made up of three types of timber: hard, medium strength and soft. The three types are shown by different colours on the screen: red for the hardest wood, yellow for the medium grade and green for the soft.
You must cross the screen in the shortest time possible. Bear in mind that eating through tough wood is more time-consuming and tiring than munching on the softer stuff. Woodworm is based on a program by J. Bull. Full instructions are within the program.
10 REM Woodworm 20 30 MODE 7 40 PROC_init 50 MODE 5 60 REPEAT 70 PROC_new_game 80 PROC_play 90 UNTIL NOT FN_another 100 MODE 7 110 END 120 130 DEF PROC_init 140 VDU 23,128,6,31,32,24,4,4,136,112 150 VDU 23,0,10,32,0;0;0; 160 PRINT TAB(13,1);CHR$(141);"[fs1]WO ODWORM" 170 PRINT TAB(13,2);CHR$(141);"[fs1]WO ODWORM" 180 PRINT'"[fs6]In this game you (a wo odworm), must eat"; 190 PRINT "[fs6]your way from the left to the right of"; 200 PRINT "[fs6]the screen (wood). The [fs1]red wood[fs6]is very"; 210 PRINT "[fs6]hard, the[fs3]yellow w ood[fs6]is medium and the"; 220 PRINT "[fs2]green wood[fs6]is soft . The harder the wood"; 230 PRINT "[fs6]the more tired you bec ome and therefore"; 240 PRINT "[fs6]the lower your score w ill be.The number"; 250 PRINT "[fs6]of moves you make will also change your"; 260 PRINT "[fs6]score.Obviously a smal l number of moves"; 270 PRINT "[fs6]will give a high score ." 280 PRINT'"[fs2]To move :" 290 PRINT'"[fs3][spc12]RETURN - right" 300 PRINT'"[fs3][spc9]A - up[spc5]Z - down" 310 PRINT'"[fs2]You can't move left or where you have" 320 PRINT "[fs2]already been." 330 PRINT "[fs1][spc6]PRESS[fs8]SPACE BAR[fs9]TO START"; 340 *FX 15 1 350 REPEAT UNTIL GET=32 360 ENDPROC 370 380 DEF PROC_new_game 390 VDU 23,0,10,32,0;0;0; 400 VDU 19,3,2,0,0,0 410 F%=0:T%=0 420 PRINT TAB(0,0);SPC(20); 430 FOR X%=0 TO 19 440 FOR Y%=0 TO 30 450 COLOUR 128+RND(3) 460 VDU 31,X%,Y%,32 470 NEXT 480 NEXT 490 X%=0:Y%=16:C%=X%:D%=Y% 500 ENDPROC 510 520 DEF PROC_play 530 REPEAT 540 COLOUR 1:COLOUR 128 550 PRINT TAB(X%,Y%);"[fs0]"; 560 PRINT TAB(0,0);"Fatigue ";F%;TAB (11,0);"Moves ";T%; 570 *FX 15 1 580 REPEAT K%=GET 590 IF K%>90 THEN K%=K%-32 600 UNTIL K%=65 OR K%=90 OR K%=13 610 IF K%=65 AND Y%<30 THEN Y%=Y%-1 620 IF K%=90 AND Y%>1 THEN Y%=Y%+1 630 IF K%=13 THEN X%=X%+1 640 COL%=POINT(64*X%,1023-(32*Y%)) 650 IF COL%=3 THEN F%=F%+1:SOUND &11 ,-10,53,5 660 IF COL%=2 THEN F%=F%+5:SOUND &11 ,-10,101,5 670 IF COL%=1 THEN F%=F%+10:SOUND &1 1,-10,149,5 680 IF COL%=0 THEN X%=C%:Y%=D% 690 PRINT TAB(C%,D%);" "; 700 C%=X%:D%=Y% 710 T%=T%+1 720 UNTIL X%=19 730 ENDPROC 740 750 DEF FN_another 760 PRINT TAB(19,Y%);"[fs0]"; 770 VDU 28,5,20,15,10,12 780 PRINT'" GAME OVER" 790 PRINT'"You scored" 800 PRINT'1500-T%-(3*F%) 810 PRINT'"Another go?"; 820 REPEAT K$=GET$ 830 UNTIL K$="Y" OR K$="N" 840 VDU 26 850 =(K%="Y")
Rat Catch
In this game, based on one written by Graham Curling, you have to guide your rats using the 'Z' and 'X' keys. The rats hold a bucket, and you have to catch falling bricks in this bucket to build up a wall.
The points you score increase as the wall gets higher and the bricks change colour. As you'll see when the game is in action, the user-defined graphics are particularly effective.
Six catches in a row will gain you a bonus which is added to your score at the end of the game. Six misses in a row costs you a life. You have five lives at the start of the game.
There are 300 bricks dropped during each run of the game. The game ends either when you lose your lives, or all 300 bricks have been dropped. The brick tally is clocked up continuously on the screen and there is a high-score facility, so you can try and beat your best score from earlier rounds.
10 REM RAT CATCH 20 30 PROC_INIT 40 REPEAT 50 MODE 7 60 PROC_INSTR 70 MODE 1 80 PROC_PLAY 90 PROC_UPDATE 100 UNTIL NOT FN_ANOTHER 110 MODE 7 120 PRINT''"[fs1]BYE[fs2]and thanks fo r playing RAT CATCH"' 130 END 140 150 DEF PROC_INIT 160 VDU 23,128,0,127,127,96,96,127,127 ,0 170 VDU 23,129,0,254,254,6,6,254,254,0 180 VDU 23,130,0,126,126,102,102,126,1 26,0 190 VDU 23,131,195,255,66,106,125,34,2 13,141 200 VDU 23,132,129,129,195,255,36,36,2 31,231 210 VDU 23,133,195,255,66,86,126,63,17 1,177 220 VDU 23,134,0,0,255,66,66,66,126,0 230 VDU 23,135,60,118,227,201,221,201, 201,201 240 ENVELOPE 1,2,-1,-1,-1,255,255,255, 120,0,0,-120,120,120 250 ENVELOPE 2,3,0,0,0,1,1,1,120,-5,-5 ,-10,120,90 260 ENVELOPE 3,2,0,0,0,1,1,1,80,-1,0,- 1,80,55 270 n$="":h=0 280 i=0 290 ENDPROC 300 DEF PROC_INSTR 310 VDU 23,0,10,32,0;0;0; 320 PRINT'TAB(10);CHR$(141);"[fs1]R[fs 2]A[fs3]T [fs4]C[fs2]A[fs3]T[fs4]C[fs6]H [fs7]" 330 PRINT TAB(10);CHR$(141);"[fs1]R[fs 2]A[fs3]T [fs4]C[fs2]A[fs3]T[fs4]C[fs6]H [fs7]" 340 PRINT TAB(10);"[fs1]============== ====[fs7]"'' 350 PRINT "[fs3] Guide your two rats l eft and right[fs7]" 360 PRINT "[fs3] using the Z and X or < and > keys.[fs7]" 370 PRINT'"[fs3] Catch the bricks in t he bucket and[fs7]" 380 PRINT "[fs3] build up the wall." 390 PRINT'"[fs3] The higher the wall t he higher the[fs7]" 400 PRINT "[fs3] points scored for eac h brick.[fs7]" 410 PRINT "[fs3] BONUS for 6 catches in a row but[fs7]" 420 PRINT "[fs3] BEWARE , 6 misses me ans that you[fs7]" 430 PRINT "[fs3] lose a life.You star t off with 5[fs7]" 440 PRINT'"[fs3] You get an EXTRA life if you reach[fs7]" 450 PRINT "[fs3] 2000 points, or if yo u catch 6[fs1]red[fs7]" 460 PRINT "[fs3] or 6[fs2]green[fs3]br icks in a row.[fs7]" 470 *FX 15 1 480 PROC_ditty1 490 PRINT'TAB(5);"[fs1][fs8]PRESS ANY KEY TO PLAY[fs9][fs7]"; 500 wait=GET 510 *FX 15 0 520 ENDPROC 530 DEF PROC_PLAY 540 PROC_BUILD 550 q=0:d=0:ca=0:m=0:ll=26:u=0:e=1:z=3 :s=0:y%=18:x%=3:a=19:b=3 560 FOR k=1 TO 300 570 c=INT(23*RND(1))+4 580 FOR p=3 TO y% 590 br=300-k 600 COLOUR z:PRINT TAB(c,p);"[fs2] " 610 X%=x%:Y%=y% 620 IF INKEY(-98) AND x%>3 THEN x% =x%-1 630 IF INKEY(-103) AND x%>3 THEN x %=x%-1 640 IF INKEY(-67) AND x%<26 THEN x %=x%+1 650 IF INKEY(-104) AND x%<26 THEN x%=x%+1 660 IF X%<>x% OR Y%<>y% THEN PRINT TAB(X%,Y%);"[spc3]";TAB(X%,Y%-1);"[spc3 ]" 670 COLOUR 3:PRINT TAB(x%,y%);"[fs 4][fs6][fs4]" 680 PRINT TAB(x%,y%-1);"[fs3] [fs5 ]" 690 PROC_delay(10) 700 PRINT TAB(c,p);" " 710 NEXT p 720 IF c=x% OR c=x%+2 THEN SOUND 1,1 ,200,6 730 IF b=29 THEN PROC_INCWALL 740 IF y%=15 THEN z=3:e=2 750 IF y%=13 THEn z=3:e=3 760 IF y%=11 THEN z=1:e=4 770 IF y%=10 THEN z=2:e=5 780 IF c=x%+1 THEN PROC_INCSC 790 IF c<>x%+1 THEN PROC_MISS 800 COLOUR 7:PRINT TAB(8,0);s;TAB(27 ,0);br;" " 810 PRINT TAB(10,20);ca;TAB(22,20);m 820 NEXT k 830 ENDPROC 840 DEF PROC_UPDATE 850 COLOUR 2 860 VDU 19,2,12,0,0,0 870 PRINT TAB(11,3);"GAME OVER" 880 s=s+u 890 COLOUR 1 900 IF s<=h THEN PRINTTAB(1,4);"UNLUCK Y YOU MISSED THE HI'SCORE":ENDPROC 910 h=s 920 PRINT TAB(1,4);"YOU OT THE HIGH SC ORE!" 930 COLOUR 1 940 *FX 15 1 950 INPUT TAB(0,23);"Input your name p lease :"n$ 960 ENDPROC 970 DEF FN_ANOTHER 980 VDU 28,0,31,39,23,12,26 990 PRINT TAB(0,26);"Do you wish to pl ay agin (Y/N : "; 1000 *FX 15 1 1010 REPEAT KEY$=GET$ 1020 UNTIL KEY$="Y" OR KEY$="y" OR KE Y$="N" OR key$="n" 1030 IF KEY$="Y" OR KEY$="y" THEN =TRUE ELSE =FALSE 1040 DEF PROC_ditty1 1050 RESTORE 1170 1060 LOCAL k,j,l 1070 FOR k=1 TO 3:FOR j=1 TO 4:READ l:S OUND 1,-10,l,2:NEXT j:PROC_delay(6):NEXT k:PROC_delay(20) 1080 REPEAT UNTIL ADVAL(-6)>14 1090 FOR k=1 TO 2:FOR j=1 TO 4:READ l:S OUND 1,-10,l,2:NEXT j:PROC_delay(6):NEXT k:PROC_delay(2) 1100 REPEAT UNTIL ADVAL(-6)>14 1110 SOUND 1,-10,69,3:PROC_delay(2) 1120 SOUND 1,-10,69,3:PROC_delay(2) 1130 SOUND 1,-10,61,3:PROC_delay(2) 1140 SOUND 1,-10,61,3:PROC_delay(6) 1150 SOUND 1,-10,53,4 1160 ENDPROC 1170 DATA 69,73,81,65,69,73,81,65,69,73 ,81,93,69,73,81,81,65,69,73,81 1180 DEF PROC_BUILD 1190 VDU 23,0,10,32,0;0;0; 1200 VDU 20,19,2,2,0,0,0,19,3,3,0,0,0 1210 GCOL 0,2 1220 MOVE 0,959:DRAW 1024,959:DRAW 1024 ,384:DRAW 0,384:DRAW 0,959 1230 PRINT TAB(0,0);"[fs3]";TAB(31,0);" [fs5]"; 1240 PRINT TAB(0,1);"[fs4]";TAB(31,1);" [fs4]"; 1250 COLOUR 1:FOR K=1 TO 29 STEP 2:PRIN T TAB(K,1);"[fs0][fs1]":NEXT 1260 COLOUR 131:COLOUR 0:PRINT TAB(2,0) ;"SCORE:";TAB(14,0);"BRICKS LEFT:";TAB(1 ,21);"BONUS:";TAB(14,21);"LIVES LOST:";T AB(1,20);"CATCHES:";TAB(14,20);"MISSES:" 1270 COLOUR 128:COLOUR 1 1280 VDU 28,0,31,39,22,12,26 1290 IF h<>0 THEN PRINT TAB(0,26);"High score ";h'"Set by ";n$ 1300 PRINT TAB(4,10);"PRESS ANY KEY TO CONTINUE"; 1310 *FX 15 1320 wait=GET 1330 *FX 15 1 1340 COLOUR 128:COLOUR 3 1350 PRINT TAB(4,10);SPC(25); 1360 ENDPROC 1370 DEF PROC_MISS 1380 ca=0:m=m+1 1390 IF m=6 THEN PROC_DIE 1400 REM SOUND 1410 ENDPROC 1420 DEF PROC_DIE 1430 SOUND 3,1,200,10 1440 m=0:PRINT TAB(11,21);"[fs7]":ll=ll +1 1450 IF ll-26=5 THEN k=300 1460 ENDPROC 1470 DEF PROC_INCSC 1480 m=0:ca=ca+1:s=s+(19-y%)*e:COLOUR z :PRINT TAB(b,a);"[fs0][fs1]":b=b+2 1490 IF ca=6 THEN PROC_BONUS 1500 IF s>=2000 AND d=0 THEN PROC_RESER ECT 1510 ENDPROC 1520 DEF PROC_BONUS 1530 bo=(19-y%)*50:u=u+bo:ca=0 1540 VDU 19,2,12,0,0,0 1550 COLOUR 2:PRINT TAB(1,3);"BONUS" 1560 COLOUR 3:PRINT TAB(8,21);u 1570 PROC_ditty2 1580 PRINT TAB(1,3);SPC(5) 1590 VDU 19,2,2,0,0,0 1600 IF (z=1 OR z=2) AND q=0 THEN PROC_ RESERECT 1610 ENDPROC 1620 DEF PROC_ditty2 1630 LOCAL note,p 1640 RESTORE 1710 1650 FOR note=1 TO 9 1660 READ p 1670 SOUND &102,3,p,3:SOUND &103,2,p, 3 1680 NEXT 1690 REPEAT UNTIL ADVAL(-7)>14 1700 ENDPROC 1710 DATA 77,85,93,85,77,85,93,85,77 1720 DEF PROC_INCWALL 1730 b=3:a=a-1:PRINT TAB(x%,y%);"[spc4] ":y%=y%-1:ENDPROC 1740 DEF PROC_RESERECT 1750 SOUND 2,2,200,10 1760 PRINT TAB(ll-1,21);" "; 1770 VDU 19,2,9,0,0,0 1780 COLOUR 2:PRINT TAB(11,3);"EXTRA LI FE":q=1 1790 PROC_ditty3 1800 PRINT TAB(11,3);SPC(10) 1810 VDU 19,2,2,0,0,0 1820 ll=ll-1:d=1:ENDPROC 1830 DEF PROC_ditty3 1840 RESTORE 1920 1850 LOCAL n,note,p,d 1860 READ n 1870 FOR note=1 TO n 1880 READ p,d 1890 SOUND 2,-10,p,d 1900 NEXT 1910 REPEAT UNTIL ADVAL(-7)=15 1920 DATA 7,81,5,109,8,101,2,97,2,89,3, 129,6,109,8 1930 DEF PROC_delay(t) 1940 TIME=0 1950 REPEAT UNTIL TIME>=t 1960 ENDPROC
Airshow
When you're tired of betting on the dogs or the horses, you can invest your hard-earned cash on the aeroplane of your choice, with this brief program.
Just follow the clear prompts, and very shortly a race will be underway between six aeroplanes.
10 REM Airshow 20 30 MODE 4 40 PROC_INIT 50 bet=FN_BET 60 IF bet=0 THEN 140 70 REPEAT 80 REPEAT 90 PROC_MOVE 100 UNTIL win 110 PROC_SHOW_WINNINGS 120 IF MONEY<>0 THEN bet=FN_BET 130 UNTIL bet=0 OR MONEY<=0 140 IF MONEY=0 THEN PRINT'"You are out of money!" ELSE PRINT'"You go home with `";MONEY 150 END 160 170 DEF PROC_INIT 180 DIM X(6) 190 VDU 23,0,10,32,0;0;0; 200 VDU 23,128,16,24,156,255,156,24,16 ,0 210 MONEY=100 220 PRINT TAB(16,1);"AIR SHOW" 230 VDU 28,0,31,39,2 240 ENDPROC 250 DEF FN_BET 260 PRINT''"Which plane to bet on 1,2, 3,4,5 or 6 ?"; 270 REPEAT P$=GET$ 280 UNTIL P$>"0" AND P$<"7" 290 P=VAL(P$):CLS 300 PRINT"Plane ";P'"You have `";MONEY 310 REPEAT 320 REPEAT 330 INPUT TAB(0,8);"How much to be t (0 to quit) ",BET$ 340 UNTIL BET$<>"" 350 BET=VAL(BET$) 360 UNTIL BET>=0 AND BET<=MONEY 370 IF BET=0 THEN =0 380 CLS:PRINT"Watch out for plane ";P; ".You bet `";BET;" on it" 390 FOR P%=1 TO 6:X(P%)=1 400 PRINT TAB(0,10+2*P%);P%;:NEXT 410 =BET 420 DEF PROC_MOVE 430 win=FALSE 440 FOR P%=1 TO 6 450 PRINT TAB(X(P%),10+2*P%);" "; 460 X(P%)=X(P%)+RND(1) 470 PRINT TAB(X(P%),10+2*P%);"[fs0]" ; 480 IF X(P%)>38 THEN win=TRUE 490 NEXT 500 ENDPROC 510 DEF PROC_SHOW_WINNINGS 520 W%=0 530 FOR P%=1 TO 6 540 IF X(P%)>=38 THEN W%=W%+1 550 NEXT 560 PRINT TAB(0,2);W%;" plane";:IF W%< >1 THE RINT"'s"; 570 PRINT" won and yours was "; 580 W%=FALSE 590 FOR P%=1 TO 6 600 IF X(P%)>=38 AND P=P% THEN W%=TR UE 610 NEXT 620 IF W% THEN PRINT"happily" ELSE PRI NT"not" 630 PRINT"one of them.You "; 640 IF W% THEN PRINT"win `";bet ELSE PR INT"loose `";bet:bet=-bet 650 MONEY=MONEY+bet 660 ENDPROC
Letter Chaser
The letters of the alphabet appear scattered at random across the screen. You have to run over them in order. You are a little ball, and you never stop moving, so a great deal of skill is required to make sure you don't hit the letters in the wrong order.
You control your ball with the following keys:
Z | to move left |
X | to move right |
: | to move up |
/ | to move down |
10 REM Letter Chaser 20 REM By Neal Cavalier-Smith 30 40 REM Type 'H%=0' before use. 50 60 MODE2 70 REPEAT 80 PROCsetup 90 PROCplayg 100 PROCwin 110 UNTIL FALSE 120 DEFPROCsetup 130 COLOUR 132:COLOUR 3 140 CLS 150 PRINT'''"LETTER CHASER" 160 PRINT''"LEVEL 1 - 9" 170 PRINT "(hard - easy) :"; 180 REPEAT K$=GET$ 190 UNTIL K$>"0" AND K$<="9" 200 L=2*VAL(K$) 210 PRINT K$ 220 COLOUR 128 230 VDU23,130,60,126,-1,-1,-1,-1,126,6 0 240 VDU23,0,10,32,0;0;0; 250 DIMX(20,30) 260 FORX%=0TO20 270 FORY%=0TO30 280 X(X%,Y%)=0 290 NEXT 300 NEXT 310 CLS 320 FOR T%=65 TO 90 330 X=RND(19) 340 Y=RND(30) 350 IFX(X,Y)<>0THEN 330 360 X(X,Y)=T% 370 COLOUR RND(7) 380 PRINTTAB(X,Y);CHR$T% 390 NEXT 400 X1%=0 410 Y1%=0 420 X%=0 430 Y%=0 440 S%=0 450 A$="Neal" 460 ENDPROC 470 DEFPROCplayg 480 X%=0:Y%=0 490 FORL%=65TO90 500 IFS%=26THENPROChit 510 IF INKEY(-98)THENX1%=-1:Y1%=0 520 IF INKEY(-67)THENX1%=01:Y1%=0 530 IF INKEY(-73)THENY1%=-1:X1%=0 540 IF INKEY(-105)THENY1%=1:X1%=0 550 PRINTTAB(X%,Y%);" " 560 X%=X%+X1% 570 Y%=Y%+Y1% 580 IFX%<00THENX1%=1:GOTO560 590 IFY%>30THENY1%=-1:GOTO560 600 IFX%>19THENX1%=-1:GOTO560 610 IFY%<00THENY1%=1:GOTO560 620 PRINTTAB(X%,Y%);CHR$130 630 T=TIME 640 REPEAT 650 UNTILTIME-T>L 660 IF X(X%,Y%)=L% THEN S%=S%+1:X(X% ,Y%)=0:VDU7:NEXT 670 IF X(X%,Y%)=0THEN510ELSEPROChit 680 GOTO500 690 ENDPROC 700 DEFPROChit 710 CLS 720 *FX 15 1 730 PRINTTAB(0,10);"YOU GOT ";S%;" LET TERS"'"IN THE RIGHT ORDER." 740 IF S%>H% THEN H%=S%:PRINT "INPUT Y OUR NAME ";:INPUT A$ 750 PRINTTAB(0,15);"BEST SO FAR ";H%'" BY ";A$ 760 PRINTTAB(0,19);"SPACE FOR ANOTHER GO" 770 REPEAT 780 UNTIL INKEY(-99) 790 RUN 800 ENDPROC