diff --git a/final/game.c b/final/game.c index 01b5ce4..469494e 100644 --- a/final/game.c +++ b/final/game.c @@ -1,18 +1,18 @@ -#include //pripojím potrebné knižnice +#include //pripojĂ­m potrebnĂ© kniĹľnice #include #include #include "world.h" #include "game.h" -#define DLZKA_HLASENIA 500 //zadefinujem maximálnu dĺžku hlásenia +#define DLZKA_HLASENIA 500 //zadefinujem maximálnu dĺžku hlásenia -void* inicializaciaHry() { //vytvorím funkciu pre prvotnú inicializáciu hry - struct hra* hra = (struct hra*) malloc(sizeof(struct hra)); //nainicializujem riadiacu štruktúru pre celú hru - hra->vyskaPolicka = (LINES / 10); //nainicializujem jednotlivé prvky štruktúry +void* inicializaciaHry() { //vytvorĂ­m funkciu pre prvotnĂş inicializáciu hry + struct hra* hra = (struct hra*) malloc(sizeof(struct hra)); //nainicializujem riadiacu štruktĂşru pre celĂş hru + hra->vyskaPolicka = (LINES / 10); //nainicializujem jednotlivĂ© prvky štruktĂşry hra->sirkaPolicka = (COLS / 10); hra->pocetPolicokX = 4; hra->pocetPolicokY = 6; - hra->poslednePolickoX = (COLS / 10) * hra->pocetPolicokX; //vypočítam koncové súradnice hracieho poľa v osi X a Y + hra->poslednePolickoX = (COLS / 10) * hra->pocetPolicokX; //vypoÄŤĂ­tam koncovĂ© sĂşradnice hracieho poÄľa v osi X a Y hra->poslednePolickoY = (LINES / 10) * hra->pocetPolicokY; hra->celkovyPocetPolicok = hra->pocetPolicokX * hra->pocetPolicokY; hra->hraciePole = dvojrozmernePole(hra->pocetPolicokY, hra->pocetPolicokX); @@ -24,7 +24,7 @@ void* inicializaciaHry() { //vytvor int cisloPolicka = 1, i, j; for (i = 0; i < hra->pocetPolicokY; i++) { for (j = 0; j < hra->pocetPolicokX; j++) { - hra->hraciePole[i][j] = cisloPolicka; //nainicializujem hracie poli pozičnými číslami + hra->hraciePole[i][j] = cisloPolicka; //nainicializujem hracie poli poziÄŤnĂ˝mi ÄŤĂ­slami cisloPolicka++; } } @@ -32,44 +32,44 @@ void* inicializaciaHry() { //vytvor return hra; } -void vykreslenieHry(struct hra* hra) { //funkcia vykreslí aktuálny stav hry +void vykreslenieHry(struct hra* hra) { //funkcia vykreslĂ­ aktuálny stav hry int i, j; - clear(); //vyčistím predchádzajúci plán hry + clear(); //vyÄŤistĂ­m predchádzajĂşci plán hry for (i = 0; i < hra->poslednePolickoY + hra->vyskaPolicka; i += hra->vyskaPolicka) { - for (j = 0; j < hra->poslednePolickoX; j++) set_cell('-', j, i); //nakreslím hranice plánu na osi X + for (j = 0; j < hra->poslednePolickoX; j++) set_cell('-', j, i); //nakreslĂ­m hranice plánu na osi X } for (i = 0; i < hra->poslednePolickoX + hra->sirkaPolicka; i += hra->sirkaPolicka) { - for (j = 0; j < hra->poslednePolickoY; j++) set_cell('|', i, j); //nakreslím hranice plánu na osi Y + for (j = 0; j < hra->poslednePolickoY; j++) set_cell('|', i, j); //nakreslĂ­m hranice plánu na osi Y } - int k, l; //zadeklarujem premenné pre riadenie výpisu z herného poľa - for (j = 0, l = 0; j < hra->poslednePolickoY; j += hra->vyskaPolicka, l++) { //v rámci herného plánu je potrebné posúvať sa aj v rámci osi Y, začiatok je v prvej polovici políčka a posúva sa o jedno políčko - for (i = 0, k = 0; i < hra->poslednePolickoX; i += hra->sirkaPolicka, k++) { // počiatok vykresľovania je v polovici prvého políčka herného plánu v osi X, plán sa posúva o jedno políčko - /*index prvého hráča: -5 - index druhého hráča: -6*/ - if (hra->hraciePole[l][k] == -5) mvprintw(j + hra->vyskaPolicka / 2, i + hra->sirkaPolicka / 2, "%c", hra->hrac1); //ak sa namiesto písla políčka nachádza na príslušnej pozícii index prvého hráča, tak na jeho miesto vykreslím znak prvého hráča - else if (hra->hraciePole[l][k] == -6) mvprintw(j + hra->vyskaPolicka / 2, i + hra->sirkaPolicka / 2, "%c", hra->hrac2); //ak sa namiesto písla políčka nachádza na príslušnej pozícii index druhého hráča, tak na jeho miesto vykreslím znak druhého hráča + int k, l; //zadeklarujem premennĂ© pre riadenie vĂ˝pisu z hernĂ©ho poÄľa + for (j = 0, l = 0; j < hra->poslednePolickoY; j += hra->vyskaPolicka, l++) { //v rámci hernĂ©ho plánu je potrebnĂ© posĂşvaĹĄ sa aj v rámci osi Y, zaÄŤiatok je v prvej polovici polĂ­ÄŤka a posĂşva sa o jedno polĂ­ÄŤko + for (i = 0, k = 0; i < hra->poslednePolickoX; i += hra->sirkaPolicka, k++) { // poÄŤiatok vykresÄľovania je v polovici prvĂ©ho polĂ­ÄŤka hernĂ©ho plánu v osi X, plán sa posĂşva o jedno polĂ­ÄŤko + /*index prvĂ©ho hráča: -5 + index druhĂ©ho hráča: -6*/ + if (hra->hraciePole[l][k] == -5) mvprintw(j + hra->vyskaPolicka / 2, i + hra->sirkaPolicka / 2, "%c", hra->hrac1); //ak sa namiesto pĂ­sla polĂ­ÄŤka nachádza na prĂ­slušnej pozĂ­cii index prvĂ©ho hráča, tak na jeho miesto vykreslĂ­m znak prvĂ©ho hráča + else if (hra->hraciePole[l][k] == -6) mvprintw(j + hra->vyskaPolicka / 2, i + hra->sirkaPolicka / 2, "%c", hra->hrac2); //ak sa namiesto pĂ­sla polĂ­ÄŤka nachádza na prĂ­slušnej pozĂ­cii index druhĂ©ho hráča, tak na jeho miesto vykreslĂ­m znak druhĂ©ho hráča else mvprintw(j + hra->vyskaPolicka / 2, i + hra->sirkaPolicka / 2, "%d", hra->hraciePole[l][k]); } } - mvprintw(LINES - (2 * (LINES / 10)), 10, "Aktualny hrac: %c", hra->aktualnyHrac); //zobrazím aktuálneho hráča - mvprintw(LINES - (2 * (LINES / 10)) + 1, 10, "Zadajte cislo neobsadeneho policka: "); //hláškou vyzvem hráča na zadanie čísla políčka + mvprintw(LINES - (2 * (LINES / 10)), 10, "Aktualny hrac: %c", hra->aktualnyHrac); //zobrazĂ­m aktuálneho hráča + mvprintw(LINES - (2 * (LINES / 10)) + 1, 10, "Zadajte cislo neobsadeneho policka: "); //hláškou vyzvem hráča na zadanie ÄŤĂ­sla polĂ­ÄŤka - refresh(); //vyobrazím novovygenerovaný plán hry + refresh(); //vyobrazĂ­m novovygenerovanĂ˝ plán hry } -int hernaSlucka(struct event* udalost, void* hra) { //funkcia je riadiaca štruktúra pre knižnicu world - struct hra* vstupneData = (struct hra*) hra; //vstupnú štruktúru pre hru prevediem na príslušný dátový typ +int hernaSlucka(struct event* udalost, void* hra) { //funkcia je riadiaca štruktĂşra pre kniĹľnicu world + struct hra* vstupneData = (struct hra*) hra; //vstupnĂş štruktĂşru pre hru prevediem na prĂ­slušnĂ˝ dátovĂ˝ typ - stavPolicka(vstupneData, udalost->key); //zmením stav herného plánu + stavPolicka(vstupneData, udalost->key); //zmenĂ­m stav hernĂ©ho plánu - zmenaHraca(vstupneData); //zmením hráča - vykreslenieHry(vstupneData); //a nakoniec vykreslím aktuálny stav hry + zmenaHraca(vstupneData); //zmenĂ­m hráča + vykreslenieHry(vstupneData); //a nakoniec vykreslĂ­m aktuálny stav hry - vertikalneVytvoreniePiskvorky(hra); //skontrolujem, či je piškvorka vytvorená + vertikalneVytvoreniePiskvorky(hra); //skontrolujem, ÄŤi je piškvorka vytvorená horizontalneVytvoreniePiskvorky(hra); krizoveVytvoreniePiskvorkyZlava(hra); krizoveVytvoreniePiskvorkySprava(hra); @@ -77,30 +77,30 @@ int hernaSlucka(struct event* udalost, void* hra) { //funkcia je riadiaca return 0; } -int** dvojrozmernePole(int prvyRozmer, int druhyRozmer) { //funkcia vytvorí dvojrozmerné pole typu int +int** dvojrozmernePole(int prvyRozmer, int druhyRozmer) { //funkcia vytvorĂ­ dvojrozmernĂ© pole typu int int i; - int **pole = (int**) malloc(prvyRozmer * sizeof(int*)); //nainicializujem prvý rozmer poľa - for (i = 0; i < prvyRozmer; i++) pole[i] = (int*) malloc(druhyRozmer * sizeof(int)); //nainicializujem druhý rozmer poľa + int **pole = (int**) malloc(prvyRozmer * sizeof(int*)); //nainicializujem prvĂ˝ rozmer poÄľa + for (i = 0; i < prvyRozmer; i++) pole[i] = (int*) malloc(druhyRozmer * sizeof(int)); //nainicializujem druhĂ˝ rozmer poÄľa return pole; } -void stavPolicka(struct hra* hra, int vstup) { //funkcia skontroluje, či bolo zadané platné číslo políčka, priradí ho príslušnému hráčovi a príslušne zmení herný plán +void stavPolicka(struct hra* hra, int vstup) { //funkcia skontroluje, ÄŤi bolo zadanĂ© platnĂ© ÄŤĂ­slo polĂ­ÄŤka, priradĂ­ ho prĂ­slušnĂ©mu hráčovi a prĂ­slušne zmenĂ­ hernĂ˝ plán int i, j; - for (i = 0; i < hra->pocetPolicokY; i++) { //postupne prejdem celé pole + for (i = 0; i < hra->pocetPolicokY; i++) { //postupne prejdem celĂ© pole for (j = 0; j < hra->pocetPolicokX; j++) { - if (hra->hraciePole[i][j] <= 0 && hra->hraciePole[i][j] > hra->celkovyPocetPolicok) break; //ak hráč zadal neplatné číslo políčka, tak sa v hernom pláne nevykoná žiadna zmena - if (hra->hraciePole[i][j] == vstup) { //ak sa zadané číslo zhoduje s kontrolovaným číslom, tak zmením herný plán - if (hra->aktualnyHrac == hra->hrac1) hra->hraciePole[i][j] = -5; //zmením číslo políčka na príslušný index + if (hra->hraciePole[i][j] <= 0 && hra->hraciePole[i][j] > hra->celkovyPocetPolicok) break; //ak hráč zadal neplatnĂ© ÄŤĂ­slo polĂ­ÄŤka, tak sa v hernom pláne nevykoná Ĺľiadna zmena + if (hra->hraciePole[i][j] == vstup) { //ak sa zadanĂ© ÄŤĂ­slo zhoduje s kontrolovanĂ˝m ÄŤĂ­slom, tak zmenĂ­m hernĂ˝ plán + if (hra->aktualnyHrac == hra->hrac1) hra->hraciePole[i][j] = -5; //zmenĂ­m ÄŤĂ­slo polĂ­ÄŤka na prĂ­slušnĂ˝ index else hra->hraciePole[i][j] = -6; } } } } -void zmenaHraca(struct hra* hra) { //funkcia zmení hráča po vykonaní jednej hernej slučky - if (hra->aktualnyHrac == hra->hrac1) { //zmena z 1. hráča na druhého +void zmenaHraca(struct hra* hra) { //funkcia zmenĂ­ hráča po vykonanĂ­ jednej hernej sluÄŤky + if (hra->aktualnyHrac == hra->hrac1) { //zmena z 1. hráča na druhĂ©ho hra->aktualnyHrac = hra->nasledujuciHrac; hra->nasledujuciHrac = hra->hrac1; } else { //a naopak @@ -109,27 +109,27 @@ void zmenaHraca(struct hra* hra) { //funkcia zmen } } -/*nasledujúce funkcie kontrolujú vytvorenie piškvorky (jednotlivé funkcie sa líšia matematickými výpočtami pre určenie, -či sa piškvorka vytvorila), komentáre budú uvedené len pri prvej funkcii a na začiatku každej funkcie*/ -void vertikalneVytvoreniePiskvorky(struct hra* hra) { //funkcia kontroluje vytvorenie piškvorky vo vertikálnom smere +/*nasledujĂşce funkcie kontrolujĂş vytvorenie piškvorky (jednotlivĂ© funkcie sa líšia matematickĂ˝mi vĂ˝poÄŤtami pre urÄŤenie, +ÄŤi sa piškvorka vytvorila), komentáre budĂş uvedenĂ© len pri prvej funkcii a na zaÄŤiatku kaĹľdej funkcie*/ +void vertikalneVytvoreniePiskvorky(struct hra* hra) { //funkcia kontroluje vytvorenie piškvorky vo vertikálnom smere int i, j; - char sprava[DLZKA_HLASENIA]; //v správe oznámim hráča, ktorý vyhral + char sprava[DLZKA_HLASENIA]; //v správe oznámim hráča, ktorĂ˝ vyhral for (i = 0; i < hra->pocetPolicokX; i++) { for (j = 0; j + 2 < hra->pocetPolicokY; j++) { - if ((hra->hraciePole[j][i] == -5 && hra->hraciePole[j + 1][i] == -5 && hra->hraciePole[j + 2][i] == -5)) { //kontrolujem, či vyhral hráč č. 1 + if ((hra->hraciePole[j][i] == -5 && hra->hraciePole[j + 1][i] == -5 && hra->hraciePole[j + 2][i] == -5)) { //kontrolujem, ÄŤi vyhral hráč ÄŤ. 1 sprintf(sprava, "Hru vyhral hrac %c.\n", hra->hrac1); - koniecHry(sprava); //hru ukončím + koniecHry(sprava); //hru ukonÄŤĂ­m } - else if (hra->hraciePole[j][i] == -6 && hra->hraciePole[j + 1][i] == -6 && hra->hraciePole[j + 2][i] == -6) { //kontrolujem, či vyhral hráč č. 1 + else if (hra->hraciePole[j][i] == -6 && hra->hraciePole[j + 1][i] == -6 && hra->hraciePole[j + 2][i] == -6) { //kontrolujem, ÄŤi vyhral hráč ÄŤ. 1 sprintf(sprava, "Hru vyhral hrac %c.\n", hra->hrac2); - koniecHry(sprava); //hru ukončím + koniecHry(sprava); //hru ukonÄŤĂ­m } } } } -void horizontalneVytvoreniePiskvorky(struct hra* hra) { //funkcia kontroluje vytvorenie piškvorky vo horizontálnom smere +void horizontalneVytvoreniePiskvorky(struct hra* hra) { //funkcia kontroluje vytvorenie piškvorky vo horizontálnom smere int i, j; char sprava[DLZKA_HLASENIA]; @@ -147,7 +147,7 @@ void horizontalneVytvoreniePiskvorky(struct hra* hra) { //funkcia kontroluje vy } } -void krizoveVytvoreniePiskvorkyZlava(struct hra* hra) { //funkcia kontroluje vytvorenie piškvorky krížom z ľavej strany +void krizoveVytvoreniePiskvorkyZlava(struct hra* hra) { //funkcia kontroluje vytvorenie piškvorky krĂ­Ĺľom z Äľavej strany int i, j; char sprava[DLZKA_HLASENIA]; @@ -165,7 +165,7 @@ void krizoveVytvoreniePiskvorkyZlava(struct hra* hra) { //funkcia kontroluje vy } } -void krizoveVytvoreniePiskvorkySprava(struct hra* hra) { //funkcia kontroluje vytvorenie piškvorky krížom spravej strany +void krizoveVytvoreniePiskvorkySprava(struct hra* hra) { //funkcia kontroluje vytvorenie piškvorky krĂ­Ĺľom spravej strany int i, j; char sprava[DLZKA_HLASENIA]; @@ -182,18 +182,18 @@ void krizoveVytvoreniePiskvorkySprava(struct hra* hra) { //funkcia kontroluje vy } } } -//tu končia funkcie kontrolujúce vytvorenie piškvorky +//tu konÄŤia funkcie kontrolujĂşce vytvorenie piškvorky -void koniecHry(char* sprava) { //funkcia vykoná príkazy potrebné pre ukončenie hry - //zmažem riadiace hlášky - move(LINES - (2 * (LINES / 10)), 0); //nastavím kurzor na príslušný riadok - clrtoeol(); //a zmažem ho +void koniecHry(char* sprava) { //funkcia vykoná prĂ­kazy potrebnĂ© pre ukonÄŤenie hry + //zmaĹľem riadiace hlášky + move(LINES - (2 * (LINES / 10)), 0); //nastavĂ­m kurzor na prĂ­slušnĂ˝ riadok + clrtoeol(); //a zmaĹľem ho move(LINES - (2 * (LINES / 10)) + 1, 0); //rovnako aj tu clrtoeol(); - mvprintw(LINES - (2 * (LINES / 10)), 10, "Koniec hry."); //hráčom oznámim koniec hry - refresh(); //vyobrazím hru - napms(2000); //zobrazím koncový stav hry - abort_game(sprava); //a hru ukončím + mvprintw(LINES - (2 * (LINES / 10)), 10, "Koniec hry."); //hráčom oznámim koniec hry + refresh(); //vyobrazĂ­m hru + napms(2000); //zobrazĂ­m koncovĂ˝ stav hry + abort_game(sprava); //a hru ukonÄŤĂ­m } diff --git a/final/game.h b/final/game.h index a7679db..b841619 100644 --- a/final/game.h +++ b/final/game.h @@ -1,6 +1,6 @@ #include "world.h" -struct hra { //vytvorím štruktúru riadiacu celú hru +struct hra { //vytvorĂ­m štruktĂşru riadiacu celĂş hru int vyskaPolicka; int sirkaPolicka; @@ -19,7 +19,7 @@ struct hra { //vytvor char nasledujuciHrac; }; -//funkcia pre inicializáciu hry +//funkcia pre inicializáciu hry void* inicializaciaHry(); int hra(struct event* udalost, void* hra);