Dokončite hru snake tak, aby sa dala hrať. Výsledok prezentujte Vášmu cvičiacemu.
Príprava
Skopírujte si adresár s úlohou snake (du7) do adresára a2.
Keď budete mať spojový zoznam v súbore snake.c
, bude jednoduché implementovať
celú hru vo funkcii step_state
.
Vo funkcii zistíte aktuálnu udalosť a podľa nej zmeníte stav hry.
Tvorba hry
Svet je viditeľná oblasť obrazovky. Po svete je náhodne rozhádzaných 20
odmien, vykreslených ako *
. Svet nemá žiadne prekážky a je ohraničený okrajom obrazovky.
Telo hada je tvorené značkou x
. Na začiatku je telo
hada dlhé 5 x
a je umiestnený v strede obrazovky.
[0,0] [width,0]
+------> x
|
| * *
|
v ^
x
y x
x
x
[0,height] [width,height]
Pohyb hada
Had sa pohne každé kolo podľa vektora rýchlosti uloženého v
premenných sx, sy
.
Vektor rýchlosti hada sa zmení podľa stlačených šípiek.
Ak nebola stlačená žiadna klávesa, vektor rýchlosti sa nemení.
KEY_UP [0,-1]
^
|
KEY_LEFT [-1,0] <---+---> KEY_RIGHT [1,0]
|
v
KEY_DOWN [0,1]
(y
pre
vertikálny smer je negatívny, lebo bod [0,0]
je v ľavom hornom
rohu obrazovky).
Nová pozícia sa vypočíta z aktuálnej pozície plus vektor rýchlosti. Ďalšia hra je ovplyvnená budúcou polohou hada:
- Ak je nová pozícia na tele hada, hra sa končí.
- Ak je nová pozícia na odmene, had sa zväčší o jedna. Odmenu označte ako zjedenú tým, že jej nastavíte negatívne súradnice. Ak sú všetky odmeny zjedené, hra sa končí.
- Ak je nová pozícia hlavy mimo rozmerov sveta, hra sa končí.
- Ak sa na novej pozícii hlavy nenachádza odmena, vymaže sa posledný článok hada a pridá sa nový článok na novej pozícii.
Reprezentácia odmeny
Pre reprezentáciu viacerých odmien sa používajú dva polia celých
čísel (foodx,foody
) (jedno pre x-ové súradnice, druhé pre y-ové
súradnice).
Ak je odmena zjedená, bude sa nachádzať na mieste mimo hracej plochy
(i
-ta hodnota v poliach foodx
a foody
bude záporná).