Metropoli BBS
VIEWER: hunter.bas MODE: TEXT (CP437)
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

[ RETURN TO DIRECTORY ]