Vytvoření hry Tic-Tac-Toe v C++

Vytvoreni Hry Tic Tac Toe V C



Tic-tac-toe je zajímavá, stará a klasická hra, která baví celé generace. V tic-tac-toe soutěží dva hráči na 9-čtvercové mřížce, která je označena hash vzorem. Každý hráč přijde na řadu a umístí symbol (O nebo X) na jedno z prázdných polí. V tomto článku prozkoumáme, jak vytvořit tic-tac-toe hru v programovacím jazyce C++. Následující příklad vás provede vytvořením jednoduché, ale poutavé hry tic-tac-toe, pokryje základní koncepty, rozdělení kódu a úvahy pro vytvoření interaktivního herního zážitku.

Vytvořte hru Tic-Tac-Toe v C++

Následující příklad poskytuje základy tvorby této interaktivní hry piškvorky pro dva hráče. Představuje jednoduchý a snadný přístup k programování pomocí C++ a poskytuje dobře zdokumentovaný zdrojový kód, který vám umožní znovu prožít dětské výzvy s přáteli v novém digitálním formátu. Podívejme se na následující kód.

Příklad: Tic-Tac-Toe založené na základní konzoli bez použití 2D pole

V tomto příkladu použijeme 2D pole, funkce a podmínky if-else k vytvoření hry tic-tac-toe v C++. V této hře se dva hráči mohou střídat v zadávání svých tahů a určuje stav hry kontrolou vítěze nebo nerozhodného výsledku. Viz následující daný kód:







#include

pomocí jmenného prostoru std ;

prázdnota stahovací deska ( char deska [ 3 ] [ 3 ] ) ;

bool isMoveValid ( char deska [ 3 ] [ 3 ] , int řádek , int kol ) ;

bool isBoardFull ( char deska [ 3 ] [ 3 ] ) ;

char zkontrolovat vítěze ( char deska [ 3 ] [ 3 ] ) ;

int hlavní ( ) {

char deska [ 3 ] [ 3 ] = { { ' ' , ' ' , ' ' } , { ' ' , ' ' , ' ' } , { ' ' , ' ' , ' ' } } ;

int řádek , kol ;

char aktuální přehrávač = 'X' ;

zatímco ( skutečný ) {

stahovací deska ( deska ) ;

cout << 'hráč' << aktuální přehrávač << Na řadě je '. Zadejte řádek (1-3) a sloupec (1-3): ' ;

jíst >> řádek >> kol ;

řádek --;

kol --;

-li ( isMoveValid ( deska , řádek , kol ) ) {

deska [ řádek ] [ kol ] = aktuální přehrávač ;

char vítěz = zkontrolovat vítěze ( deska ) ;

-li ( vítěz != ' ' ) {

stahovací deska ( deska ) ;

cout << 'hráč' << vítěz << 'je vítěz! \n ' ;

přestávka ;

}

-li ( isBoardFull ( deska ) ) {

stahovací deska ( deska ) ;

cout << 'To je kravata! \n ' ;

přestávka ;

}

aktuální přehrávač = ( aktuální přehrávač == 'X' ) ? 'Ó' : 'X' ;

} jiný {

cout << 'Neplatný tah. Vyberte jinou buňku.' \n ' ;

} }

vrátit se 0 ;

}

prázdnota stahovací deska ( char deska [ 3 ] [ 3 ] ) {

cout << 'b| \t 1 \t | \t 2 \t | \t 3 \t | \n ' ;

cout << ' _______________________ \n ' ;

pro ( int m = 0 ; m < 3 ; m ++ ) {

cout << m + 1 << '| ' ;

pro ( int t = 0 ; t < 3 ; t ++ ) {

cout << '' << deska [ m ] [ t ] ;

-li ( t < 2 ) cout << ' \t | \t ' ;

}

cout << ' \t | \n ' ;

-li ( m < 2 ) cout << ' _______________________ \n ' ;

}

cout << ' \n ' ; }

bool isMoveValid ( char deska [ 3 ] [ 3 ] , int řádek , int kol ) {

vrátit se ( řádek >= 0 && řádek < 3 && kol >= 0 && kol < 3 && deska [ řádek ] [ kol ] == ' ' ) ;

}

bool isBoardFull ( char deska [ 3 ] [ 3 ] ) {

pro ( int m = 0 ; m < 3 ; m ++ ) {

pro ( int t = 0 ; t < 3 ; t ++ ) {

-li ( deska [ m ] [ t ] == ' ' ) {

vrátit se Nepravdivé ;

} } }

vrátit se skutečný ; }

char zkontrolovat vítěze ( char deska [ 3 ] [ 3 ] ) {

pro ( int m = 0 ; m < 3 ; m ++ ) {

-li ( deska [ m ] [ 0 ] == deska [ m ] [ 1 ] && deska [ m ] [ 1 ] == deska [ m ] [ 2 ] && deska [ m ] [ 0 ] != ' ' ) {

vrátit se deska [ m ] [ 0 ] ;

}

-li ( deska [ 0 ] [ m ] == deska [ 1 ] [ m ] && deska [ 1 ] [ m ] == deska [ 2 ] [ m ] && deska [ 0 ] [ m ] != ' ' ) {

vrátit se deska [ 0 ] [ m ] ;

} }

-li ( deska [ 0 ] [ 0 ] == deska [ 1 ] [ 1 ] && deska [ 1 ] [ 1 ] == deska [ 2 ] [ 2 ] && deska [ 0 ] [ 0 ] != ' ' ) {

vrátit se deska [ 0 ] [ 0 ] ;

}

-li ( deska [ 0 ] [ 2 ] == deska [ 1 ] [ 1 ] && deska [ 1 ] [ 1 ] == deska [ 2 ] [ 0 ] && deska [ 0 ] [ 2 ] != ' ' ) {

vrátit se deska [ 0 ] [ 2 ] ;

}

vrátit se ' ' ;

}

Zde je rozpis jeho funkcí:



„#include “ je direktiva preprocesoru, která zahrnuje knihovnu I/O streamu pro vstupní/výstupní operace. Použití „namespace std“ umožňuje přímé použití funkcí cout, cin atd. v programu C++, aniž by bylo vyžadováno „std:: prefix“.



V tomto programu jsou čtyři prototypy funkcí – jsou to drawBoard(), isMoveValid(), isBoardFull() a checkWinner(). Deklarace funkce je známá jako prototyp funkce. I když přichází za hlavní funkcí v programu, bude použita. Hlavní funkce obsahuje herní smyčku a logiku pro řízení tahů a tahů hráčů. V rámci hlavní funkce se herní plán inicializuje mezerami.





char deska [ 3 ] [ 3 ] = { { ' ' , ' ' , ' ' } , { ' ' , ' ' , ' ' } , { ' ' , ' ' , ' ' } } ;

Poté jsou definovány dvě proměnné řádek a sloupec pro uložení vstupu hráče. „char currentPlayer = ‚X‘;“ definuje, že hráč „X“ jde jako první.

Nyní začíná (skutečná) herní smyčka, která běží, dokud není vítěz nebo nerozhodný výsledek. Tato smyčka „while“ volá „drawBoard();“ k zobrazení desky. Po zobrazení desky na konzole je uživatel požádán, aby vybral buňku k označení v následujícím kódu:



cout << 'hráč' << aktuální přehrávač << 'je na řadě. Zadejte řádek a sloupec (1-3): ' ;

Hráč zadá svůj tah do „cin >> řádek >> col;“.

Po výběru buňky pro označení program nejprve ověří platnost vstupu a voláním funkce isMoveValid() zajistí, že buňka již není vyplněna.

deska [ řádek ] [ kol ] = aktuální přehrávač ;

Toto prohlášení umístí značku hráče na plán.

char vítěz = zkontrolovat vítěze ( deska ) ;

-li ( vítěz != ' ' ) {

stahovací deska ( deska ) ;

cout << 'hráč' << vítěz << 'vyhrává! \n ' ;

Tyto výroky kontrolují vítěze pokaždé, když hráč označí záznam na hrací ploše. Jméno vítěze bude oznámeno, pokud bude vítěz, a program opustí herní smyčku.

-li ( isBoardFull ( deska ) ) {

Toto prohlášení kontroluje remízu. Stav nerozhodnosti nastává v případě, kdy je hrací deska plná a není vítěz. V tomto případě: 'Je to remíza!' je vytištěno na obrazovce.

aktuální přehrávač = ( aktuální přehrávač == 'X' ) ? 'Ó' : 'X' ;

Toto prohlášení přepne hráče tak, aby dali každému hráči šanci zahrát svůj tah.

cout << 'Neplatný tah. Vyberte jinou buňku.' \n ' ;

Pokud přesun není platný, uživatel je vyzván, aby znovu zadal a vybral jakoukoli jinou buňku.

Po funkci „hlavní“ začnou definice funkcí pro prototypy funkcí, které byly dříve deklarovány. První funkce, která je zde definována, je drawBoard(), která se používá k přikreslení desky tic-tac-toe ke konzole. Funkce drawBoard() vytiskne aktuální stav desky včetně čar mřížky.

Další funkcí, která je zde definována, je isMoveValid(). Tato funkce se používá k určení, zda je tah povolen jak uvnitř herního plánu, tak na prázdném poli. Funkce isBoardFull() se používá ke kontrole, zda je deska ještě plná. To je podmínka pro nerozhodný stav, kdy není vítěz. Funkce isBoardFull() zkontroluje, zda jsou všechny pozice na desce obsazeny, což znamená nerozhodný výsledek, pokud není vítěz. Pokud existuje vítěz, lze jej zjistit pomocí funkce checkWinner(). Funkce checkWinner() zkontroluje všechny potenciální výherní řady pro značku stejného hráče („X“ nebo „O“) a vrátí značku vítězného hráče, pokud je nalezena, nebo mezeru „ “, pokud ještě není vítěz. Následuje výstup programu. Ukazuje každý tah každého hráče.

Za prvé, deska je jasná; hráč „X“ je vyzván k výběru buňky, kterou má označit. Zde hráč „X“ zadá 2 a 2. Buňky řádku 2 a sloupce 2 jsou označeny. Podívejte se na označenou desku v následujícím:

Nyní je na řadě hráč O. Hráč je vyzván k výběru buňky, kterou má označit. Hráč „O“ vybere 1 pro řádek a 1 pro sloupec. Vybraná buňka je označena pro hráče „O“, jak je znázorněno v následujícím úryvku výstupu:

Všechny tahy každého hráče budou probíhat podle stejného vzoru. Je na tahu hráč X a hráč si vybere 1 pro řádek a 2 pro sloupec. Podívejte se na následující uvedené výstupní snímky:

Nyní je na řadě hráč „O“. Hráč si vybere 1 pro řádek a 3 pro sloupec.

Další tah je opět na hráči „X“. Hráč si vybere 3 pro řádek a 1 pro sloupec.

Hráč „O“ vybere 3 pro řádek a 2 pro sloupec.

Hráč „X“ vybere druhý řádek a třetí sloupec.

Hráč „O“ nyní vybere druhý řádek a první sloupec.

Hráč „X“ si tentokrát vybere třetí řádek a třetí sloupec.

Žádný hráč nemohl udělat žádnou čáru vodorovně, svisle nebo diagonálně, takže je to nerozhodné. Pro zvolené pole vstupů není vítěz.

Celkově kód obsahuje hlavní herní smyčku, která je zodpovědná za manipulaci se stavem hry a vstupem uživatele, spolu s několika užitečnými funkcemi, které se používají k tažení hrací desky, ověřování tahů, kontrole plné hrací desky a určení, zda existuje vítěz. .

Závěr

Vývoj hry tic-tac-toe pomocí C++ je vynikající praktické cvičení k posílení vašich programovacích dovedností. Článek přesně vysvětluje, jak vytvořit tic-tac-toe v C++. Pokyny krok za krokem uvedené v tomto článku zahrnovaly 2D pole, funkce a podmínky, aby čtenáři porozuměli herním mechanismům, uživatelským interakcím a efektivnímu strukturování kódu. Podrobný návod k použití kódu a vysvětlení funkcí, které jsou klíčové pro základní hru, vybaví čtenáře neocenitelnými poznatky jak o programovacích postupech C++, tak o složitosti vývoje jednoduché hry.