REM $INCLUDE: 'SVGABC.BI'
DEFINT A-Z
SCREEN 13
' Ylhäältä päin kuvattu alienammuskelu, vaatii SVGAQB-alikirjaston ja
' QuickBasic4.5:n. Alikirjaston saat MB-Netistä.
' Kääntyy nuolinäppäimistä ja ampuu enteristä
' Tarkoitus tehdä valmis peli tämän pohjalta
' (siis koodia ei saisi käyttää suoraan omiin ohjelmiin)
' QuickBasic:in hitauden vuoksi näyttö alkaa vilkkumaan jos alieneja tulee
' liikaa
DIM ukko(300)
DIM ukko2(300)
DIM ukko3(300)
DIM ukko4(300)
DIM alien1(300)
DIM alien2(300)
DIM alien3(300)
DIM alien4(300)
DIM alien5(300)
DIM ground1(300)
DIM ground2(300)
DIM ground3(300)
DIM ground4(300)
DIM ammus(4, 10)
DIM liekki(300)
DIM veri(300)
DIM PCXPAL AS STRING * 768
IF WHICHVGA = 0 THEN END
pcxfilename$ = "UKOT2562.PCX"
IF RES320 = 0 THEN END
OK = PCXGETINFO(pcxfilename$, XSIZE, YSIZE, NUMCOL, PCXPAL)
FIXIT = 0
FOR a = 1 TO NUMCOL * 3 STEP 3
R = ASC(MID$(PCXPAL, a, 1))
g = ASC(MID$(PCXPAL, a + 1, 1))
b = ASC(MID$(PCXPAL, a + 2, 1))
IF R > 63 THEN
FIXIT = 1
EXIT FOR
END IF
IF g > 63 THEN
FIXIT = 1
EXIT FOR
END IF
IF b > 63 THEN
FIXIT = 1
EXIT FOR
END IF
NEXT a
IF FIXIT = 1 THEN
FOR a = 1 TO NUMCOL * 3
C = ASC(MID$(PCXPAL, a, 1))
MID$(PCXPAL, a, 1) = CHR$(C \ 4)
NEXT a
END IF
PALSET PCXPAL, 0, 255
OK = PCXPUT(1, 0, 0, pcxfilename$)
BLKGET 1, 1, 15, 15, ukko(0)
BLKGET 1, 17, 15, 31, ukko2(0)
BLKGET 1, 33, 15, 47, ukko3(0)
BLKGET 1, 49, 15, 63, ukko4(0)
BLKGET 17, 1, 31, 15, alien1(0)
BLKGET 33, 1, 47, 15, alien2(0)
BLKGET 49, 1, 63, 15, alien3(0)
BLKGET 65, 1, 79, 15, alien4(0)
BLKGET 81, 1, 95, 15, alien5(0)
BLKGET 17, 17, 26, 26, liekki(0)
BLKGET 17, 28, 26, 37, veri(0)
FILLVIEW 1
alienit = 500
DIM aliens(alienit)
RANDOMIZE TIMER
i = 0
aliens(i) = 1
aliens(i + 1) = INT(RND * 320)
aliens(i + 2) = INT(RND * 168)
aliens(i + 3) = INT(RND * 5 + 1)
aliens(i + 4) = 1
DRWFILLBOX 1, 2, 0, 185, 319, 199
QQQ = 1: WWW = 0
vihx = 0: vihy = 0
WW = 2: kk = 1
X = 160: Y = 100
energiat = 100
oma = 1
BLKGET X, Y, X + 14, Y + 14, ground2(0)
GOSUB showenergy
DO
SELECT CASE INP(&H60)
CASE 28 ' Enter
IF hit = 0 THEN
zulma = kulma
'hit = 1
cmx = 1
ampu = 1
END IF
IF zk = 0 THEN
FOR i = 0 TO 10
ammus(0, i) = 1
ammus(1, i) = X
ammus(2, i) = Y
ammus(3, i) = kulma
ammus(4, i) = 0
NEXT i
zk = 1
END IF
CASE 72 'ylös
oma = 1
oma2 = 1
CASE 80 'alas
oma = 1
oma2 = 2
CASE 75 'vasen
oma2 = 4
oma = 1
CASE 77 'oikea
oma2 = 3
oma = 1
CASE 57 ' välilyönti
X = INT(RND * GETMAXX)
Y = INT(RND * GETMAXY)
CASE 1: END
CASE ELSE
END SELECT
alienhomma = alienhomma + 1
IF alienhomma = 3000 THEN
SWAP QQQ, WWW
OK = PAGEACTIVE%(QQQ)
OK = PAGEDISPLAY%(0, 0, QQQ)
FILLPAGE 0
GOSUB showenergy
alienhomma = 0
FOR i = 0 TO 10
IF ammus(0, i) = 1 THEN
Xkohta = ammus(1, i)
ykohta = ammus(2, i)
angle = ammus(3, i)
Pituus = ammus(4, i)
PSET (Xkohta + 7, ykohta + 7), POINT(Xkohta + 7, ykohta + 7)
rand = INT(RND * 3)
IF rand = 2 THEN rand = 1
IF rand = 1 THEN rand = -1
angle = angle + i - 4 + rand * 6
IF angle > 360 THEN angle = angle - 360
IF angle < -360 THEN angle = angle + 360
DRAW "ta" + STR$(-angle) + "bu" + STR$(Pituus + 2)
Pituus = Pituus + 8
Xkohta = POINT(2)
ykohta = POINT(3)
SPRITEPUT 1, 0, Xkohta - 5, ykohta - 5, liekki(0)
IF Pituus > 50 THEN zk = 0: ammus(0, i) = 0: SPRITEPUT 1, 0, Xkohta - 5, ykohta - 5, liekki(0)
ammus(3, i) = angle
ammus(4, i) = Pituus
END IF
NEXT i
FOR i = 0 TO alienit - 5 STEP 5
IF aliens(i) = 1 THEN
vihx = aliens(i + 1)
vihy = aliens(i + 2)
ff = aliens(i + 3)
hh = aliens(i + 4)
arvo = 1
IF vihx < X AND vihy < Y THEN xkulma = 135 + INT(RND * 5 - 2): vihx = vihx + arvo: vihy = vihy + arvo
IF vihx < X AND vihy = Y THEN xkulma = 90 + INT(RND * 5 - 2): vihx = vihx + arvo
IF vihx < X AND vihy > Y THEN xkulma = 45 + INT(RND * 5 - 2): vihx = vihx + arvo: vihy = vihy - arvo
IF vihx > X AND vihy < Y THEN xkulma = -135 + INT(RND * 5 - 2): vihx = vihx - arvo: vihy = vihy + arvo
IF vihx > X AND vihy = Y THEN xkulma = -90 + INT(RND * 5 - 2): vihx = vihx - arvo
IF vihx > X AND vihy > Y THEN xkulma = -45 + INT(RND * 5 - 2): vihx = vihx - arvo: vihy = vihy - arvo
IF vihx = X AND vihy > Y THEN xkulma = 0 + INT(RND * 5 - 2): vihy = vihy - arvo
IF vihx = X AND vihy < Y THEN xkulma = 180 + INT(RND * 5 - 2): vihy = vihy + arvo
IF vihx - X > -12 AND vihy - Y > -12 AND vihx - X < 12 AND vihy - Y < 12 THEN
Xkohta = X + INT(RND * 40) - 15
ykohta = Y + INT(RND * 40) - 15
SPRITEPUT 1, 0, Xkohta - 5, ykohta - 5, veri(0)
energiat = energiat - 1
END IF
ff = ff + hh
IF ff = 6 THEN hh = -1: ff = 4
IF ff = 0 THEN hh = 1: ff = 2
IF ff = 1 THEN DUMMY = BLKROTATE(xkulma, 0, alien1(0), ground3(0))
IF ff = 2 THEN DUMMY = BLKROTATE(xkulma, 0, alien2(0), ground3(0))
IF ff = 3 THEN DUMMY = BLKROTATE(xkulma, 0, alien3(0), ground3(0))
IF ff = 4 THEN DUMMY = BLKROTATE(xkulma, 0, alien4(0), ground3(0))
IF ff = 5 THEN DUMMY = BLKROTATE(xkulma, 0, alien5(0), ground3(0))
SPRITEGAP 0, vihx, vihy, ground3(0), ground4(0)
xx$ = INKEY$
aliens(i + 1) = vihx
aliens(i + 2) = vihy
aliens(i + 3) = ff
aliens(i + 4) = hh
FOR zi = 0 TO 10
IF ammus(0, zi) = 1 THEN
xkoh = ammus(1, zi)
ykoh = ammus(2, zi)
angle = ammus(3, zi)
Pituus = ammus(4, zi)
PSET (xkoh + 7, ykoh + 7), POINT(xkoh + 7, ykoh + 7)
DRAW "ta" + STR$(-angle) + "bu" + STR$(Pituus + 2)
xkoh = POINT(2)
ykoh = POINT(3)
IF xkoh - vihx < 10 AND xkoh - vihx > -10 AND ykoh - vihy < 10 AND ykoh - vihy > -10 THEN GOTO alienkuolee
END IF
NEXT zi
GOTO koo
alienkuolee:
aliens(i) = 0
FOR k = 1 TO 10
Xkohta = vihx + INT(RND * 40) - 15
ykohta = vihy + INT(RND * 40) - 15
SPRITEPUT 1, 0, Xkohta - 5, ykohta - 5, liekki(0)
NEXT k
tapot = tapot + 1
joo = 0
FOR io = 0 TO alienit - 5 STEP 5
IF joo = 2 THEN GOTO koo
IF aliens(io) = 0 THEN
aliens(io) = 1
dg = INT(RND * 4)
IF dg = 0 THEN aliens(io + 1) = INT(RND * GETMAXX): aliens(io + 2) = -10
IF dg = 1 THEN aliens(io + 1) = INT(RND * GETMAXX): aliens(io + 2) = GETMAXY + 10
IF dg = 2 THEN aliens(io + 1) = -10: aliens(io + 2) = INT(RND * GETMAXY)
IF dg = 3 THEN aliens(io + 1) = GETMAXX + 10: aliens(io + 2) = INT(RND * GETMAXY)
aliens(io + 3) = dg + 1
aliens(io + 4) = 1
joo = joo + 1
END IF
NEXT io
END IF
koo:
NEXT i
'*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+
'+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
IF QQ = 4 THEN
WW = WW + kk
IF WW = 5 THEN WW = 3: kk = -1
IF WW = 0 THEN WW = 2: kk = 1
QQ = 0
END IF
QQ = QQ + 1
IF oma2 = 3 THEN
kulma = kulma + 10
IF kulma > 359 THEN kulma = 0
WW = 1
END IF
IF oma2 = 4 THEN
kulma = kulma - 10
IF kulma < -359 THEN kulma = 0
WW = 4
END IF
IF oma2 = 1 THEN
PSET (X + 7, Y + 7), POINT(X + 7, Y + 7)
DRAW "ta" + STR$(-kulma) + "bu3"
X = POINT(2) - 7
Y = POINT(3) - 7
END IF
IF oma2 = 2 THEN
PSET (X + 7, Y + 7), POINT(X + 7, Y + 7)
DRAW "ta" + STR$(-kulma) + "bd3"
X = POINT(2) - 7
Y = POINT(3) - 7
END IF
IF X < -5 THEN X = -5
IF X > GETMAXX + 5 THEN X = GETMAXX + 5
IF Y < -5 THEN Y = -5
IF Y > GETMAXY + 5 THEN Y = GETMAXY + 5
IF hit = 1 THEN
IF WW = 1 THEN DUMMY = BLKROTATE(kulma, 0, ukko(0), ground1(0))
IF WW = 2 THEN DUMMY = BLKROTATE(kulma, 0, ukko2(0), ground1(0))
IF WW = 3 THEN DUMMY = BLKROTATE(kulma, 0, ukko3(0), ground1(0))
IF WW = 4 THEN DUMMY = BLKROTATE(kulma, 0, ukko4(0), ground1(0))
kulma = kulma - 30
IF kulma < -360 THEN kulma = 0
cmx = cmx + 1
IF cmx = 8 THEN hit = 0: kulma = zulma
END IF
IF hit = 0 THEN
IF WW = 1 THEN DUMMY = BLKROTATE(kulma, 0, ukko(0), ground1(0))
IF WW = 2 THEN DUMMY = BLKROTATE(kulma, 0, ukko2(0), ground1(0))
IF WW = 3 THEN DUMMY = BLKROTATE(kulma, 0, ukko3(0), ground1(0))
IF WW = 4 THEN DUMMY = BLKROTATE(kulma, 0, ukko4(0), ground1(0))
END IF
SPRITEGAP 0, X, Y, ground1(0), ground2(0)
oma = 0
oma2 = 0
END IF
LOOP
showenergy:
DRWFILLBOX 1, 200, 0, 191, energiat * 2, 194
DRWSTRING 1, 200, 0, STR$(tapot), 260, 187
IF energiat < 1 THEN
SLEEP
END
END IF
RETURN