Näitä matopelejä täällä riittää jo vaikka kuinka paljon, mutta tein nyt kuitenkin omani harjoitusmielessä. Ja kaippa tästä voi olla jollekkin jotain hyötyä.
Pitäisi kääntyä QBasic 4.5:lla ainakin.
DECLARE FUNCTION CheckFood (direction AS INTEGER, x AS INTEGER, y AS INTEGER)
DECLARE FUNCTION CheckWall (direction AS INTEGER, x AS INTEGER, y AS INTEGER)
DECLARE SUB EndGame (score AS INTEGER)
DECLARE SUB PauseGame ()
TYPE xy
x AS INTEGER
y AS INTEGER
END TYPE
DIM worm(1 TO 10000) AS xy
DIM food AS xy
DIM speed AS INTEGER
DIM direction AS INTEGER
DIM length AS INTEGER
DIM score AS INTEGER
DIM growing AS INTEGER
DIM ok AS INTEGER
speed = 50
direction = 1
length = 15
score = 0
growing = 30
FOR i = 1 TO length
worm(i).x = 100
worm(i).y = 100 + i
NEXT i
RANDOMIZE TIMER
CLS
SCREEN 13
PRINT "Peli alkaa kun painat nappia"
DO
LOOP UNTIL INKEY$ <> ""
LOCATE 2, 1
PRINT "Peli alkaa... 2"
SLEEP (1)
LOCATE 2, 1
PRINT "Peli alkaa... 1"
SLEEP (1)
LOCATE 2, 1
PRINT "Peli alkaa... 0"
FOR i = 0 TO 1000
WAIT &H3DA, 8
NEXT i
CLS
LINE (1, 1)-(200, 140), 4, B
LINE (50, 35)-(50, 105), 4
LINE (150, 35)-(150, 105), 4
GOSUB DrawWorm
GOSUB MakeFood
DO
LINE (1, 1)-(200, 140), 4, B
LINE (50, 35)-(50, 105), 4
LINE (150, 35)-(150, 105), 4
SELECT CASE INKEY$
CASE CHR$(0) + CHR$(75)
IF direction <> 2 THEN direction = 0
CASE CHR$(0) + CHR$(72)
IF direction <> 3 THEN direction = 1
CASE CHR$(0) + CHR$(77)
IF direction <> 0 THEN direction = 2
CASE CHR$(0) + CHR$(80)
IF direction <> 1 THEN direction = 3
CASE CHR$(27)
EndGame (score)
CASE CHR$(80)
PauseGame
CASE CHR$(112)
PauseGame
END SELECT
IF CheckFood(direction, worm(1).x, worm(1).y) = 1 THEN
GOSUB MakeFood
SOUND 1000, 1
LOCATE 2, 27
score = score + 100
PRINT "Pisteet:"; score
length = length + growing
END IF
IF CheckWall(direction, worm(1).x, worm(1).y) = 1 THEN
EndGame (score)
END IF
GOSUB MoveWorm
GOSUB DrawWorm
FOR i = 0 TO speed
WAIT &H3DA, 8
NEXT i
LOOP
DrawWorm:
PSET (worm(length).x, worm(length).y), 0
FOR i = 1 TO 4
PSET (worm(i).x, worm(i).y), 5
NEXT i
FOR i = 5 TO length - 1
PSET (worm(i).x, worm(i).y)
NEXT i
RETURN
MakeFood:
tfoodx = food.x
tfoody = food.y
DO
ok = 1
food.x = INT(RND * 160) + 20
food.y = INT(RND * 100) + 20
FOR i = (food.x - 5) TO (food.x + 5)
IF POINT(i, food.y) <> 0 THEN ok = 0
NEXT i
FOR i = (food.y - 5) TO (food.y + 5)
IF POINT(food.x, i) <> 0 THEN ok = 0
NEXT i
LOOP UNTIL ok = 1
DRAW "BM=" + VARPTR$(tfoodx) + ",=" + VARPTR$(tfoody)
DRAW "P0,0"
CIRCLE (food.x, food.y), 4, 8
DRAW "P8,8"
RETURN
MoveWorm:
FOR i = length - 1 TO 1 STEP -1
worm(i + 1).x = worm(i).x
worm(i + 1).y = worm(i).y
NEXT i
SELECT CASE direction
CASE 0
worm(1).x = worm(2).x - 1
CASE 1
worm(1).y = worm(2).y - 1
CASE 2
worm(1).x = worm(2).x + 1
CASE 3
worm(1).y = worm(2).y + 1
END SELECT
RETURN
FUNCTION CheckFood (direction AS INTEGER, x AS INTEGER, y AS INTEGER)
SELECT CASE direction
CASE 0
IF POINT(x - 1, y) = 8 THEN CheckFood = 1
CASE 1
IF POINT(x, y - 1) = 8 THEN CheckFood = 1
CASE 2
IF POINT(x + 1, y) = 8 THEN CheckFood = 1
CASE 3
IF POINT(x, y + 1) = 8 THEN CheckFood = 1
END SELECT
END FUNCTION
FUNCTION CheckWall (direction AS INTEGER, x AS INTEGER, y AS INTEGER)
SELECT CASE direction
CASE 0
check = POINT(x - 1, y)
IF check = 4 OR check = 15 OR check = 5 THEN CheckWall = 1
CASE 1
check = POINT(x, y - 1)
IF check = 4 OR check = 15 OR check = 5 THEN CheckWall = 1
CASE 2
check = POINT(x + 1, y)
IF check = 4 OR check = 15 OR check = 5 THEN CheckWall = 1
CASE 3
check = POINT(x, y + 1)
IF check = 4 OR check = 15 OR check = 5 THEN CheckWall = 1
END SELECT
END FUNCTION
SUB EndGame (score AS INTEGER)
SOUND 150, 7
SLEEP (1)
CLS
PRINT "Peli loppui!"
PRINT "Sait"; score; "pistettä"
END
END SUB
SUB PauseGame
LOCATE 1, 34
PRINT "PAUSED"
SLEEP (1)
DO
LOOP UNTIL INKEY$ <> ""
LOCATE 1, 34
PRINT " "
END SUBOlis ihan kiva kuulla teidän mielipide ja kommentti tästä pelistä :)
En ole ennen pelejä tehnyt ja tämä on ensimmäinen kunnon koodinpätkäni QBasicillä.
Tosi hyvä, erinomainen, suorastaan loistava! Täydellinen paitsi että madon pää sais olla saman värinen ku ruumis, pelikenttä sais olla pienempi tai mato isompi. Jos nämä muuttaa vielä niin jaksaisin pelata ehkäs 6000 pisteeseen! ;) no ei vaiskaan... on tämä ainakin parempi kuin muut Qbasicin matopelit!!!!
kai se ihan hyvä sit oli, mut mun koneel en pystyny testaa ku se mato kuoli samantien ku se peli alko :S
T.M. Vaihda speediä.
laita vaikka: speed = 200
Eiks ois parempi tehä semmonen koodi mil saa speedin tasattuu kaikil koneil jollain ajastimel?
No kuten sanoin niin tämä on eka kunnon koodini ja ehkä jonain päivänä vielä osaisinkin semmosen väsätä. Sitten varmasti päivitän tätä vinkkiä.
Olihan se yksi parhaista matopeleistä (QBasicilla tehdyistä), joita olen koskaan pelannut.
Joo, olipahan nätti peli. Hidastuu vaan aika paljon kun mato kasvaa, mutta oli paras jota olen pelannut!
Huomasin kaverin koneella saman hidastumis jutun.. omalla koneellani (P3 800MHz) ei hidastu vaikka mato kasvaa 3000 pikselin kokoiseksi.
Outoa kyllä. Taitaa olla AMD:n prossuilla tämä hidastumis bugi.
Niin ja tuossa pelissä on vielä pause ;)) Napii "p"
High Scores tohon viel ni sit se on hyvä
ja matoa paksummaks
ihmekkään kun ei hidastunu kun vaihoin nopeutta pienempään, vaikka sitä olis pitäny suurentaa :D
aika outo systeemi... :P
Joo. On se loistava matopeli. Ja oli mullekin hyötyy! :)
joo. pistä sit seuraavaan versioon paxumpi mato ja sit 3d moottori ja highscore lista
Jos toista versiota koskaan edes tulee ;)
Olihan toi ihan ok. Mato todellakin ois voinu olla paksumpi. ;)
todella hyvä peli
joo kiva oli ja hyvä ekaksi peliksi...siitä propsit
mutta ite lisäsin tohon alkuun pätkän että kun peli alkaa niin voi valita nopeuden numeroissa jne...
eli $ käyttöö :D
Hyvä! Mutta jäin kaipaamaan kommentteja.
Itse toteuttaisin hidastumisen seuraavalla koodilla:
hidastuksenalku = TIMER hidastus = .01 DO hidastettu = TIMER LOOP UNTIL hidastettu > hidastuksenalku + hidastus
Tollasen kun heität sopivaan paikkaan jotain lenkkiä niin se pysäyttää lenkin sadasosasekunniksi.. Ja näin se siis vaikuttaa aika suoraan pelin nopeuteen.. (ja pelin pitäisi pyöriä joka koneella suunnilleen samalla nopeudella..).
Mutta siis hyvä peli on!
aika hauska
siis... ERITTÄIN hyvä esimerkki siitä, että QBasicillakin saa aikaan jotakin... "jatkojalostin" tota ihan huvikseen..
nyt siinä on 3 erinlaista sokkeloa... pitäisköhan laittaa nettiin exe-filua.... :P
Miten ton saa niin, että sitä matoo voi ohjata?
mulla toi mato menee sopivalla nopeudella kaks pykälää eteenpäin ja peli sulkeutuu. Käytän QB 4.5:tä.
ihan hyvä mutta liian nopiasti liikkuva mato.
Ihan hyvä mutta annatteko mun sähköpostiin jonkun osotteen mistä saa kääntöohjleman
sähköpostini:
matias.pigg@luukku.com
Dude kirjoitti:
ihan hyvä mutta liian nopiasti liikkuva mato.
no hidasta sitä? :D
Aihe on jo aika vanha, joten et voi enää vastata siihen.