Just for Fun



Minefield


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:

0black
1red
2green
3blue
4magenta

   You'll be penalized if you take too long to make a decision. After each level (or after you've been blown to bits) you'll be offered a replay. If you reply 'Y' to this offer, the BBC Micro will then retrace your moves from start to finish, showing where all the mines were placed.

   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:

Xto move right
Zto 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:

Zto move left
Xto move right
:to move up
/to move down

   Letter Chaser was written by Neal Cavalier-Smith. As the program has a running high-score feature, you need to enter H%=0 then RETURN before running the program.

   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