Olen tekemässä matopeliä ja pitäisi jotenkin kummallisesti saada se häntä uudeksi pääksi, ettei mato vain kasvaisi kokoajan... Ja se ei ole ihan tavallinen matopeli vaan sellainen jossa mato kakki pökylöitä ja niitä pitäisi väistellä. Että Vinkkejä kiitos!
Mikä kieli
Yksi keino on tallentaa madon palikat sopivan kokoiseen taulukkoon, ja siirtää kaikkia palikoita yhdellä eteenpäin taulukossa, kun mato liikkuu. Helppo toteuttaa, ja näytöltä täytyy joka kerralla ainoastaan poistaa häntä ja piirtää madon uusi pää.
Ymmärrettävästi esimerkkiohjelman kirjoittaminen tarkoittaa samalla melkein kokonaista matopeliä, mutta tässä mahdollisimman pieni ja puutteellinen koodinpätkä, jotta itsellesikin jää jotain tehtävää. :) (toivottavasti kielesi on QBasic, kun et sitä muistanut mainita...)
'taulukon koko on kentän pinta-ala (madon suurin mahdollinen pituus)
DIM mato(10 * 10, 1) AS INTEGER
DIM pituus AS INTEGER, suunta AS INTEGER
DIM i AS INTEGER, n AS STRING
'pituus palikkoina
pituus = 5
'suunta:
' 1 = vasemmalle
' 2 = ylös
' 3 = oikealle
' 4 = alas
suunta = 1
'aloituskoordinaatit (5, 5)
mato(1, 0) = 5
mato(1, 1) = 5
CLS
DO
'pyyhitään madon viimeinen palikka (häntä) näytöltä
LOCATE mato(pituus, 1) + 1, mato(pituus, 0) + 1: PRINT " "
'siirretään kaikkia palikkoja yhden pykälän edemmäs
FOR i = pituus TO 2 STEP -1
mato(i, 0) = mato(i - 1, 0)
mato(i, 1) = mato(i - 1, 1)
NEXT
'lasketaan uusi palikka (pää) madon suunnan mukaan
mato(1, 0) = mato(2, 0)
mato(1, 1) = mato(2, 1)
IF suunta = 1 THEN mato(1, 0) = mato(1, 0) - 1
IF suunta = 2 THEN mato(1, 1) = mato(1, 1) - 1
IF suunta = 3 THEN mato(1, 0) = mato(1, 0) + 1
IF suunta = 4 THEN mato(1, 1) = mato(1, 1) + 1
'piirretään uusi palikka
LOCATE mato(1, 1) + 1, mato(1, 0) + 1: PRINT CHR$(219)
'tässä kohdassa käyttäjä voi päättää madon uuden suunnan nuolinäppäimillä
DO
n = INKEY$
IF n = CHR$(0) + "K" THEN suunta = 1
IF n = CHR$(0) + "H" THEN suunta = 2
IF n = CHR$(0) + "M" THEN suunta = 3
IF n = CHR$(0) + "P" THEN suunta = 4
LOOP WHILE n = ""
LOOPAihe on jo aika vanha, joten et voi enää vastata siihen.