pvjc22/final/README.md
2022-06-05 16:02:35 +02:00

4.7 KiB

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 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 je 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)