REM Invaders
MODE 6
OFF
VDU 23,250,24,24,24,24,60,60,60,60
Delay=1
xleft =20
REM xright= 0
Yfire = 21
Slow = Delay : REM Used to slow down cannon movement. Increase Delay to slow cannon further
PRINT TAB(xleft,22) CHR$(250)
REPEAT
WAIT 1
Slow=Slow-1
IF Slow=0 THEN
IF INKEY(-26) AND xleft>0 PROC_moveleft
IF INKEY(-122) AND xleft<39 PROC_moveright
Slow=Delay
ENDIF
REM You would have got some odd artefacts at the edges of the
REM screen adjusting xleft outside of the movement PROCs
PROC_fire(xleft)
UNTIL FALSE
DEF PROC_moveleft
VDU 7
PRINT TAB(xleft, 22) CHR$(250)
PRINT TAB(xleft+ 1, 22) " "
xleft=xleft - 1
ENDPROC
DEF PROC_moveright
VDU 7
PRINT TAB(xleft, 22) CHR$(250)
PRINT TAB(xleft - 1, 22) " "
xleft=xleft + 1
ENDPROC
DEF PROC_fire(xleft)
IF INKEY(-99) AND Yfire=-1 THEN
Yfire=20
Xfire=xleft
ENDIF
IF Yfire=0 THEN
PRINT TAB(Xfire,Yfire) " " : REM Clear off last shot
Yfire=-1
ENDIF
IF Yfire>0 THEN
VDU 7
PRINT TAB(Xfire,Yfire) "|"
PRINT TAB(Xfire,Yfire + 1) " "
Yfire = Yfire - 1
ENDIF
ENDPROC
REM Invaders
MODE 6
OFF
VDU 23,250,24,24,24,24,60,60,60,60
xleft% =20
REM xright%= 0
Xfire = -1
Yfire = 20
Firing = FALSE
PRINT TAB(xleft%,22) CHR$(250)
REPEAT
WAIT 2
IF INKEY(-99) AND Xfire = -1 THEN Xfire = xleft%
IF INKEY(-26) PROC_moveleft
IF INKEY(-122) PROC_moveright
PROC_fire
UNTIL FALSE
DEF PROC_moveleft
VDU 7
PRINT TAB(xleft%, 22) " ";
IF xleft% > 0 xleft%=xleft% - 1
PRINT TAB(xleft%, 22) CHR$(250);
ENDPROC
DEF PROC_moveright
VDU 7
PRINT TAB(xleft%, 22) " ";
IF xleft% < 39 xleft%=xleft% + 1
PRINT TAB(xleft%, 22) CHR$(250);
ENDPROC
DEF PROC_fire
IF Xfire <> -1 THEN
VDU 7
PRINT TAB(Xfire,Yfire) " ";
Yfire = Yfire - 1
PRINT TAB(Xfire,Yfire) "|";
IF Yfire = 0 THEN
Xfire = -1
Yfire = 20
ENDIF
ENDIF
ENDPROC
REM Invaders
MODE 6
REM VDU 23,22,448;520;40,25,16,0
OFF
REM player
VDU 23,250,24,24,60,255,255,255,255,255
VDU 23,241,0,0,0,127,255,255,255,255
VDU 23,242,0,0,0,254,255,255,255,255
REM
REM asteroid
VDU 23,240,24,36,82,169,149,74,36,24
REM alien 2
VDU 23,230,60,66,129,66,60,66,129,129
VDU 23,253,24,36,66,129,129,66,36,24
VDU 23,230,24,126,153,255,90,66,129,0
REM intialize Globel variables
xleft% =20
Xfire = -1
Yfire = 22
xalien=0
yalien =0
timer = 0
speed = 16
flag = TRUE
bullet$="|"
offset = 0
coloffset=0
DIM aliens$(20,10)
CHR = 230
FOR aliensx=0 TO 20
FOR aliensy = 0 TO 10
aliens$(aliensx,aliensy) = CHR$(CHR)
NEXT aliensy
NEXT aliensx
cannon$ = CHR$(241)+CHR$(250)+CHR$(242)
COLOUR 2
REM initial player print
PRINT TAB(xleft%,23) cannon$
REPEAT
COLOUR 2
WAIT 2
LINE 39,39 ,1230,39
IF INKEY(-99) AND Xfire = -1 THEN Xfire = xleft%
IF INKEY(-26) PROC_moveleft
IF INKEY(-122) PROC_moveright
PROC_fire
timer = timer + 1
IF timer = speed AND coloffset < 23 PROCAliens_move
IF timer = speed timer= 0
CASE coloffset OF
WHEN 5 speed = 6
WHEN 10 speed = 4
WHEN 15 speed = 2
ENDCASE
UNTIL coloffset = 19
CLS
PRINT TAB(14,7) "GAME OVER!"
PRINT TAB(6,9) "The invasion was successful"
PRINT TAB(8,11) "Plant earth is doomed!"
PRINT TAB(10,12) "press any key to reset"
REPEAT UNTIL INKEY(0)=-1
Key=GET
RUN
END
DEF PROCRedraw_cannon
COLOUR 2
PRINT TAB(xleft%, 23) cannon$;
ENDPROC
DEF PROC_moveleft
PRINT TAB(xleft%, 23) " ";
IF xleft% > 0 xleft%=xleft% - 1
PRINT TAB(xleft%, 23) cannon$;
ENDPROC
DEF PROC_moveright
PRINT TAB(xleft%, 23) " ";
IF xleft% < 37 xleft%=xleft% + 1
PRINT TAB(xleft%, 23) cannon$;
ENDPROC
DEF PROC_fire
COLOUR 15
IF Xfire <> -1 THEN
PRINT TAB(Xfire+1,Yfire) " ";
Yfire = Yfire - 1
PRINT TAB(Xfire+1,Yfire) bullet$;
IF Yfire = 0 THEN
Xfire = -1
Yfire = 22
ENDIF
ENDIF
ENDPROC
DEF PROCAliens_move
IF flag = TRUE THEN
REM Print block to screen
VDU 7
offset= offset + 1
COLOUR 15
FOR row=0 TO 20 STEP 2
FOR col= 0 TO 4
PRINT TAB(row+offset,col+coloffset) " " aliens$(row,col)
NEXT col
NEXT row
ENDIF
IF offset= 18 coloffset = coloffset +1 CLS PROCRedraw_cannon flag = FALSE
IF flag = FALSE THEN
REM Print block to screen
VDU 7
offset= offset - 1
COLOUR 15
FOR row=0 TO 20 STEP 2
FOR col= 0 TO 4
PRINT TAB(row+offset,col+coloffset) aliens$(row,col) " "
NEXT col
NEXT row
ENDIF
IF offset= 0 coloffset = coloffset +1 CLS PROCRedraw_cannon flag = TRUE
ENDPROC