DIM SHARED lmargin%
, rmargin%
, topmargin%
, screenwidth%
, level
, ibk
, ileadingrow
DIM SHARED irow
, icol
, inextrnd
, imaxalienmissiles
, alienforce%
, ileadingmax
, imaxalienforce
, ihits
imaxalienforce = 6
imaxalienmissiles = 3
lmargin% = 2
rmargin% = 79
topmargin% = 3
ialiencolstat = 6
iwin = 3
screenwidth% = rmargin% - lmargin% + 1
ibk = 1
a1$
= "-<" + CHR$(237) + ">- " a$ = a1$ + a1$ + a1$ + a1$ + a1$ + a1$ + a1$ + a1$ + a1$ + a1$
REDIM SHARED bullet%
(5), bulletcol%
(5), bulletdelay%
(5), iltalien
(imaxalienforce
) REDIM SHARED ia
(imaxalienmissiles
), iy
(imaxalienmissiles
), ix
(imaxalienmissiles
) alienforce% = imaxalienforce
level = .65
iround = iround + 1
level = level - iround / 15
inextrnd = -1
ialiencol = ialiencolstat
FOR i
= 1 TO imaxalienforce
IF i
= imaxalienforce
THEN ileadingrow
= CSRLIN: ileadingmax
= ileadingrow
a(i) = a$
ex%
= 1:
CALL mdriver
(ex%
, KEY$
, tankx%
) IF topmargin%
+ ileadingmax
- (imaxalienforce
* 2) >= topmargin%
+ 2 THEN CALL movealiens
(ialiencol
, ialiencolstat
, iresults
)
icolor = 7: reload = 0
CASE -1: bullet%
(i
) = tanky%
- 1: bulletcol%
(i
) = tankx%
IF bulletdelay%
(i
) = -1 OR bullet%
(i
) = tanky%
- 1 THEN CALL checkcollision
(ihitaliens
, ialiencol
, i4
, i
) z2bullet
= TIMER: bulletdelay%
(i
) = 0 LOCATE bullet%
(i
), bulletcol%
(i
) IF bullet%
(i
) = topmargin%
AND imothership
<> 0 THEN imothership = 0
IF ihitaliens
<> 0 THEN CALL reprintaliens
(ialiencol
, ihitaliens
, iresults
, i4
, i
, imothership
) IF bullet%
(i
) > topmargin%
THEN bullet%(i) = bullet%(i) - 1
IF z1
< z2bullet
THEN z2bullet
= z2bullet
- 86400 IF bullet%
(i2
) <> 0 THEN bulletdelay%
(i2
) = -1 IF alienforce%
= 0 OR iresults
= iwin
THEN FOR i
= 1 TO imaxalienmissiles
IF i
> imaxalienmissiles
THEN iwait
= -1 iwait = 1
ex%
= -1:
CALL mdriver
(ex%
, KEY$
, tankx%
) inextrnd = -1
erasebullet:
bullet%(i) = 0: bulletcol%(i) = 0: bulletdelay%(i) = 0
redraw:
DATA "Well, I better get busy and finish the compiler..." DATA "Or... I'll just do some more work on this IDE, instead..." DATA "Game Over. Thanks for playing..." DATA "Now finish the compiler!"
SUB alienattack
(ialiencolstat
, ialiencol
)
FOR i
= 1 TO imaxalienmissiles
i4
= INSTR(i3
* 7 + 1, a
(i2
), CHR$(237)) + ialiencol
ia(i) = (ileadingmax - (imaxalienforce - i2) * 2) * 80 + i4
SUB alienmissile
(iresults
) FOR i
= 1 TO imaxalienmissiles
iy
(i
) = ia
(i
) \
80: ix
(i
) = ia
(i
) MOD 80 IF ix
(i
) = 0 THEN ix
(i
) = screenwidth%
ia(i) = 0
ia(i) = 0
iy(i) = iy(i) + 1
SUB checkcollision
(ihitaliens
, ialiencol
, i4
, i
) ihitaliens = 0
i4 = imaxalienforce - (ileadingmax - bullet%(i)) \ 2
IF bullet%
(i
) <= ileadingrow
AND i4
> 0 AND i4
<= imaxalienforce
THEN ihitaliens = bulletcol%(i) - ialiencol + 1
i3
= ihitaliens
- 7 + 1:
IF i3
< 1 THEN i3
= 1:
REM count from the
"<" symbol.
i2
= INSTR(i3
+ 1, a
(i4
), "<") - 1 MID$(matrix
(i4
), (i2
+ 1) \
7 + 1, 1) = "0"
FOR i2
= 1 TO imaxalienmissiles
IF iy
(i2
) >= bullet%
(i
) AND ix
(i2
) = bulletcol%
(i
) THEN ihitaliens = -i2
'in$ = "EOF"
SUB marchdown
(ialiencol
, ialiencolstat
, imotion
, iresults
) ileadingrow = ileadingrow + 1
ileadingmax = ileadingmax + 1
FOR i
= 1 TO imaxalienforce
ialiencol = ialiencolstat + imotion
LOCATE ileadingmax
- (imaxalienforce
* 2) + i
* 2 - 1, lmargin%
level = level - .025
IF ileadingrow
= 22 THEN iresults
= -2
SUB mdriver
(ex%
, KEY$
, tankx%
)
Registers.AX
= 0:
GOSUB CALLI
MOUSEACT% = 1
Registers.AX = 4: Registers.DX = 184: Registers.CX = 304
Registers.AX = 8: Registers.DX = 184: Registers.CX = 184
Registers.AX
= 3:
GOSUB CALLI
DX = Registers.DX
CX = Registers.CX
y% = DX \ 8 + 1: x% = CX \ 8 + 1
RB%
= (Registers.BX
AND 2) \
2 MB%
= (Registers.BX
AND 4) \
4
CALLI:
SUB movealiens
(ialiencol
, ialiencolstat
, iresults
) STATIC imotion
, imarch
, imotiondir
IF inextrnd
= -1 THEN inextrnd
= 0: imotion
= 0: imarch
= 0: imotiondir
= 0 IF imotiondir
= 0 THEN imotion
= imotion
- 1 ELSE imotion
= imotion
+ 1
i2 = i2 + 2
ialiencol = ialiencolstat + imotion
LOCATE ileadingmax
- (imaxalienforce
- i
) * 2, ialiencol
+ INSTR(a
(i
), "-")
IF imarch
= 1 THEN imotiondir
= 1:
CALL marchdown
(ialiencol
, ialiencolstat
, imotion
, iresults
) IF imarch
= -1 THEN imotiondir
= 0:
CALL marchdown
(ialiencol
, ialiencolstat
, imotion
, iresults
) firerate
= (INT(RND * 10) + 1) / 20 IF iwait
= 0 THEN CALL alienattack
(ialiencolstat
, ialiencol
) imarch = 0
STATIC x%
, mov%
, z4
, mothership$
imothership = 1
x% = lmargin%
mov% = 1
''IF ABS(TIMER - z2) > .2 THEN GOSUB bullets: z2 = TIMER
mothership:
IF x%
+ LEN(mothership$
) = screenwidth%
+ lmargin%
THEN mov%
= -1 ELSE IF x%
= lmargin%
THEN mov%
= 1 x% = x% + mov%
LOCATE 1, 1:
PRINT " File Edit View Search Run Debug Calls Options Help"
COLOR 0, 3:
LOCATE 25, 1:
PRINT " <Shift+F1=Help> <F6=Window> <F2=Subs> <F5=Run> <F8=Step> ";
SUB reprintaliens
(ialiencol
, ihitaliens
, iresults
, i4
, i
, imothership
) ihits = ihits + 1
IF (ihits
+ 15) MOD 20 = 0 AND imothership
= 0 THEN imothership
= -1
alienforce% = alienforce% - 1
IF alienforce%
= 0 THEN iresults
= iresults
+ 1 IF bullet%
(i
) = ileadingrow
THEN ileadingrow
= ileadingrow
- 2 ia(i2) = 0
ihitaliens = 0
bullet%(i) = -bullet%(i)