A2: Dokonči hru

8th Apr 2024

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á).

Previous Post Next Post

A2: Dokonči hru