Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: QB64: Matopeli

terrist [08.04.2019 21:53:14]

#

Simppeli matopeli 70-luvun tyyliin.
Seuraavaan versioon voisi lisätä kaksinpelin ja piipperiäänet.

'
'  MATO 1.0 by Tertsi
'  Enter aloittaa pelin, Esc lopettaa.
'  Matoa ohjataan nuoli- tai wasd-nappaimilla.
'  Mato kasvaa 3 pikselia per syoty omena.
'  Peli nopeutuu 10 pisteen valein.
'
RANDOMIZE TIMER ' Random-generaattori kayntiin.
_MOUSEHIDE ' Hiiren kursori pois hairitsemasta.
SCREEN _NEWIMAGE(32, 32, 256) ' 32 x 32 resoluutio!
_FULLSCREEN _SQUAREPIXELS ' Venytetaan kuva koko ruudulle.
DIM matox(1000), matoy(1000) ' Varataan muistista tilaa madon koordinaateille.
DIM taulu(100)
DIM Numero$(9)
Numero$(0) = "r3d4l3u4 br5" ' Numerot DRAW-formaatissa
Numero$(1) = "r1d4u4 br2"
Numero$(2) = "r3d2l3d2r3 bu4br2"
Numero$(3) = "r3d2l3r3d2l3 bu4br5"
Numero$(4) = "d2r3d2u4 br2"
Numero$(5) = "bd4 r3u2l3u2r3 br2"
Numero$(6) = "r3l3d4r3u2l2b e2br2"
Numero$(7) = "r3d4 bu4br2"
Numero$(8) = "r3d4l3u4d2r3u2 br2"
Numero$(9) = "d2r3u2l3r3d4l3"
pojot = -1
IF _FILEEXISTS("mato.top") THEN
    OPEN "mato.top" FOR INPUT AS #1 'luetaan highscore tiedostosta
    INPUT #1, highscore
    CLOSE #1
ELSE
    highscore = 0
    OPEN "mato.top" FOR OUTPUT AS #1 'luodaan uusi tiedosto jos eka pelikerta
    PRINT #1, highscore
    CLOSE #1
END IF
CLS , 7

Alku:
LINE (0, 0)-(31, 25), 7, B ' reunat
LINE (1, 1)-(30, 24), 0, BF ' Piirretaan pelialue
C$(1) = "5": C$(2) = "3": GOSUB Alkuruutu
IF pojot = highscore OR pojot = -1 THEN GOSUB Animaatio
pois$ = "EI"
DO
    C$(1) = "3": C$(2) = "5": GOSUB Alkuruutu
    GOSUB Tuumaustauko
    IF pois$ = "TOTTA" THEN EXIT DO
    C$(1) = "5": C$(2) = "3": GOSUB Alkuruutu
    GOSUB Tuumaustauko
    IF pois$ = "TOTTA" THEN EXIT DO
LOOP
LINE (1, 1)-(30, 24), 0, BF ' Piirretaan pelialue
matox(4) = 4: matoy(3) = 5
matox(3) = 5: matoy(3) = 5 ' Maaritellaan
matox(2) = 6: matoy(2) = 5 ' madon
matox(1) = 7: matoy(1) = 5 ' koordinaatit.
pituus = 4: suunta = 6 ' Madon pituus ja suunta
pistevari = 7: GOSUB Pistetaulu
nopeus = .12: Kasvu = 3: pojot = 0 'nopeus, kasvuvauhti ja pisteet
pistevari = 0: GOSUB Pistetaulu
GOSUB PiirraMato
GOSUB ArvoOmena
_DISPLAY
laskuri = 0
DO
    t = TIMER
    DO
        k$ = INKEY$
        IF k$ <> "" THEN
            SELECT CASE k$
                CASE CHR$(13): GOSUB PauseMenu
                CASE CHR$(27): GOTO Loppu
                CASE "6", "d", "D", CHR$(0) + "M": IF suunta <> 4 AND suunta <> 6 THEN suunta = 6
                CASE "4", "a", "A", CHR$(0) + "K": IF suunta <> 4 AND suunta <> 6 THEN suunta = 4
                CASE "2", "s", "S", CHR$(0) + "P": IF suunta <> 2 AND suunta <> 8 THEN suunta = 2
                CASE "8", "w", "W", CHR$(0) + "H": IF suunta <> 2 AND suunta <> 8 THEN suunta = 8
            END SELECT
        END IF
    LOOP UNTIL TIMER - t > nopeus
    SELECT CASE suunta
        CASE 6
            GOSUB LaskeMato
            matox(1) = matox(1) + 1
        CASE 4
            GOSUB LaskeMato
            matox(1) = matox(1) - 1
        CASE 2
            GOSUB LaskeMato
            matoy(1) = matoy(1) + 1
        CASE 8
            GOSUB LaskeMato
            matoy(1) = matoy(1) - 1
    END SELECT
    IF POINT(matox(1), matoy(1)) = 5 THEN ' jos osuu omenaan
        FOR z = 1 TO Kasvu
            pituus = pituus + 1
            matox(pituus) = matox(pituus - 1)
            matoy(pituus) = matoy(pituus - 1)
        NEXT z
        pistevari = 7: GOSUB Pistetaulu
        pojot = pojot + 1
        laskuri = laskuri + 1
        IF laskuri = 10 THEN nopeus = nopeus - .01: laskuri = 0
        IF nopeus < .005 THEN nopeus = .005
        pistevari = 0: GOSUB Pistetaulu
        GOSUB ArvoOmena
        _DISPLAY
    END IF
    IF POINT(matox(1), matoy(1)) = 3 OR POINT(matox(1), matoy(1)) = 7 THEN ' jos osuu seinaan tai matoon
        PSET (matox(1), matoy(1)), 4
        _DISPLAY
        IF pojot > highscore THEN
            OPEN "mato.top" FOR OUTPUT AS #1
            highscore = pojot
            PRINT #1, highscore
            CLOSE #1
        END IF
        GOSUB PauseMenu
        GOTO Alku
    END IF
    GOSUB PiirraMato
    PSET (matox(pituus), matoy(pituus)), 0
    _DISPLAY
LOOP


ArvoOmena:
DO
    x = INT(RND * 30) + 1: y = INT(RND * 24) + 1 ' Arvotaan omenan koordinaatti.
    IF POINT(x, y) = 0 THEN PSET (x, y), 5: EXIT DO ' Jos ruutu vapaana niin piirretaan omena ja poistutaan luupista.
LOOP
RETURN


LaskeMato:
FOR z = pituus TO 2 STEP -1
    matox(z) = matox(z - 1): matoy(z) = matoy(z - 1)
NEXT z
RETURN


PiirraMato:
FOR z = 1 TO pituus - 1
    PSET (matox(z), matoy(z)), 3 ' Piirretaan mato.
NEXT z
RETURN


Pistetaulu:
pisteet$ = LTRIM$(STR$(pojot)): jono$ = "" ' piirretaan pisteet
FOR x = 1 TO LEN(pisteet$)
    num = VAL(MID$(pisteet$, x, 1))
    jono$ = jono$ + Numero$(num)
NEXT x
IF pistevari = 0 THEN DRAW "bm1,26c0" + jono$ ELSE DRAW "bm1,26c7" + jono$
RETURN


PauseMenu:
DO
    P$ = INKEY$
    IF P$ = CHR$(27) THEN GOTO Loppu
LOOP UNTIL P$ = CHR$(13)
RETURN


Animaatio: 'hilataan pisteet vasemmalta oikealle
pojot = highscore
pistevari = 0: GOSUB Pistetaulu
_DISPLAY
leftie = 0
FOR x = 16 TO 1 STEP -1
    IF POINT(x, 26) = 0 THEN leftie = x: EXIT FOR
NEXT x
IF leftie > 0 THEN
    GET (0, 26)-(leftie, 30), taulu()
    FOR x = 1 TO 30 - leftie
        PUT (x, 26), taulu(), PSET
        _DISPLAY
        _DELAY .01
    NEXT x
END IF
RETURN


Alkuruutu:
DRAW "bm6,7c" + C$(1) + "u4r2d2u2r2d4 br1c" + C$(2) + "u4r4d2l3r3d2 br3c" + C$(1) + "u4l2r4 br1c" + C$(2) + "r4d4l4u4" ' piirretaan MATO-logo
DRAW "bm13,10c" + C$(1) + "d3r2u2l2 br3c" + C$(2) + "d2r2u2d3" 'by
DRAW "bm8,17c" + C$(1) + " r1d4u4r1 br1c" + C$(2) + "r2l2d2r2l2d2r2 br1c" + C$(1) + " u4r2d1g1f1d1 br2c" + C$(2) + "u4l1r2 br3c" + C$(1) + " l2d2r2d2l2 br3c" + C$(2) + "u4" 'TERTSI
_DISPLAY
RETURN


Tuumaustauko:
t = TIMER
DO
    a$ = INKEY$
    IF a$ = CHR$(27) THEN GOTO Loppu
    IF a$ = CHR$(13) THEN pois$ = "TOTTA": EXIT DO
LOOP UNTIL TIMER - t > 1
RETURN


Loppu:
SYSTEM

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta