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:
SYSTEMAihe on jo aika vanha, joten et voi enää vastata siihen.