# Piškvorky - hra ## Obsah - Predstavenie hry - Kompilácia a spustenie hry - Priebeh hry a jej koniec - Štruktúry a funkcie hry - Zdroje ## Predstavenie hry Počítačová verzia hry piškvorky je určená pre dvoch hráčov. Títo hráči sa počas hrania hry pri počítači striedajú. Cieľom hry je vytvoriť piškvorku. Hráč, ktorý vytvorí piškvorku, vyhráva. Po vytvorení piškvorky sa hra ukončí a oznámi výherného hráča. Hra je naprogramovaná v jazyku C. ## Kompilácia a spustenie hry Pre kompiláciu hry je potrebné použiť pripravený Makefile, ktorý sa nachádza v rovnakom priečinku, ako zdrojové kódy programu. Pre kompiláciu programu je potrebné mať nainštalovanú knižnicu ncurses. Hru skompilujeme pomocou nasledujúceho príkazu: make all A následne ju spustíme pomocou príkazu: ./hra ## Priebeh hry Po spustení hry sa na obrazovku vykreslí herný plán a pod ním sa zobrazia oznamy o aktuálnom stave hry. Herný plán tvorí sieť, ktorej veľkosť sa mení v závislosti od veľkosti výstupnej obrazovky. Každé políčko v tejto sieti je má svoje číslo, ktoré hráč zadáva ako vstup do programu počas hrania hry. Ako už bolo vyššie spomenuté, tak táto verzia hry je určená pre dvoch hráčov. Hráči sa počas hrania striedajú pri počítači. Hráč zadá do programu číslo políčka, ktoré chce obsadiť. Následne sa na danom políčku namiesto čísla vyobrazí znak hráča. Ak hráč zadá číslo políčka, ktoré je obsadené, príp. číslo mimo rozsah, alebo iný znak, tak prichádza o pokus a nasleduje další hráč. Hru vyhráva hráč, ktorý ako prvý úspešne zostaví piškvorku. Na hernej obrazovke sa následne objaví oznam o skončení hry a potom v termináli OS aj oznam oznamujúci, ktorý hráč vyhral. ## Štruktúry a funkcie hry Hra je naprogramovaná pre použitie knižnicou world.h. Obsahuje základnú riadiacu štruktúru celej hry. Teraz si podrobnejšie popíšeme jej jednotlivé premenné. Pri premenných, pri ktroých je z popisu jasné, na čo sú určené, nebudeme popis uvádzať: int vyskaPolicka int sirkaPolicka int poslednePolickoX //premenná uchováva súradnicu X posledného políčka int poslednePolickoY //rovnako ako predchádzajúca premenná, ale súradnicu Y int pocetPolicokX //počet políčok v 1 riadku int pocetPolicokY //počet políčok v 1 stĺpci int celkovyPocetPolicok int** hernePole //v dvojrozmernom poli je uložený aktuálny herný plán char hrac1 char hrac2 char aktualnyHrac char nasledujuciHrac Teraz si stručne popíšeme jednotlivé funkcie hry: - **void*** inicializaciaHry(): každá hra, ktorá využíva knižnicu world, musí obsahovať funkciu, ktorá na začiatku nainicializuje hru; v tomto prípade táto funkcia nainicializuje riadiacu štruktúru hry, jednotlivé položky štruktúry a herný plán - **void** vykreslenieHry(struct hra* hra): funkcia vykreslí aktuálny stav hry na základe herného plánu a vypíše informačné hlásenia - **int** hernaSlucka(struct event* udalost, void* hra): okrem inicializačnej funkcie musí každá hra naprogramovaná v knižnici world obsahovať aj riadiacu funkciu, táto funkcia riadi stav celej hry, štruktúra event obsahuje vstup z knižnice world - **int**** dvojrozmernePole(int prvyRozmer, int druhyRozmer): funkcia nainicializuje dvojrizmerné pole typu int - **void** stavPolicka(struct hra* hra, int vstup): funkcia skontroluje, či zadaný vstup je platný a či je políčko v hernom poli obsadené - **void** zmenaHraca(struct hra* hra): funkcia zmení aktuálneho hráča po vykonaní jednej hernej slučky - **void** vertikalneVytvoreniePiskvorky(struct hra* hra): hra skontroluje vytvorenie piškvorky vo vertikálnom smere - **void** horizontalneVytvoreniePiskvorky(struct hra* hra): skontroluje vytvorenie piškvorky vo horizontálnom smere - **void** krizoveVytvoreniePiskvorkyZlava(struct hra* hra): skontroluje vytvorenie šikmej piškvorky z ľavej strany - **void** krizoveVytvoreniePiskvorkySprava(struct hra* hra): skontroluje vytvorenie šikmej piškvorky spravej strany - **void** koniecHry(char* sprava): funkcia obsahuje príkazy potrebné pre ukončenie hry, funkcia musí po ukončení hry vypísať informáciu (ľubovoľnú) Kvôli výskytu dvojciferných čísel sme museli upraviť aj spôsob načítavania čísel do pamäte, keďže pôvodná verzia dokázala načítať iba jeden znak. Po úprave dokáže knižnica world načítať trojciferné číslo a pred potvrdením ho je možné aj editovať. ## Zdroje [How to clear a specific line with NCurses?] (https://stackoverflow.com/questions/5072881/how-to-clear-a-specific-line-with-ncurses)