Stvaranje Tic-Tac-Toe igre u C++

Stvaranje Tic Tac Toe Igre U C



Tic-tac-toe je zanimljiva, stara i klasična igra koja je zabavljala generacije. U igri tic-tac-toe, dva se igrača natječu na mreži od 9 kvadrata koja je označena crtom. Svaki igrač dolazi na red i stavlja simbol (O ili X) u jedno od praznih polja. U ovom ćemo članku istražiti kako stvoriti igru ​​tic-tac-toe u programskom jeziku C++. Sljedeći primjer vodit će vas kroz izradu jednostavne, ali zanimljive igre tic-tac-toe, pokrivajući bitne koncepte, raščlambe koda i razmatranja za stvaranje interaktivnog iskustva igranja.

Napravite Tic-Tac-Toe igru ​​u C++

Sljedeći primjer pruža osnove izrade ove interaktivne igre tic-tac-toe za dva igrača. Prikazuje jednostavan i lak pristup programiranju pomoću C++ i pruža dobro dokumentiran izvorni kod za ponovno proživljavanje izazova iz djetinjstva s prijateljima u novom, digitalnom formatu. Pogledajmo sljedeći kod.

Primjer: osnovni Tic-Tac-Toe na konzoli bez korištenja 2D polja

U ovom primjeru koristit ćemo 2D polje, funkcije i if-else uvjete kako bismo napravili igru ​​tic-tac-toe u C++. U ovoj igri dva igrača smiju naizmjenično unositi svoje poteze, a stanje igre se određuje provjerom pobjednika ili neriješenog rezultata. Pogledajte sljedeći kod:







#include

koristeći prostor imena std ;

poništiti izvlačna ploča ( char odbor [ 3 ] [ 3 ] ) ;

bool isMoveValid ( char odbor [ 3 ] [ 3 ] , int red , int kol ) ;

bool jeBoardFull ( char odbor [ 3 ] [ 3 ] ) ;

char checkWinner ( char odbor [ 3 ] [ 3 ] ) ;

int glavni ( ) {

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

int red , kol ;

char trenutni igrač = 'X' ;

dok ( pravi ) {

izvlačna ploča ( odbor ) ;

cout << 'Igrač' << trenutni igrač << ' je na redu. Unesite red (1-3) i stupac (1-3): ' ;

jelo >> red >> kol ;

red --;

kol --;

ako ( isMoveValid ( odbor , red , kol ) ) {

odbor [ red ] [ kol ] = trenutni igrač ;

char pobjednik = checkWinner ( odbor ) ;

ako ( pobjednik != ' ' ) {

izvlačna ploča ( odbor ) ;

cout << 'Igrač' << pobjednik << 'je pobjednik! \n ' ;

pauza ;

}

ako ( jeBoardFull ( odbor ) ) {

izvlačna ploča ( odbor ) ;

cout << „Kravata je! \n ' ;

pauza ;

}

trenutni igrač = ( trenutni igrač == 'X' ) ? 'O' : 'X' ;

} drugo {

cout << 'Nevažeći potez. Odaberite drugu ćeliju. \n ' ;

} }

povratak 0 ;

}

poništiti izvlačna ploča ( char odbor [ 3 ] [ 3 ] ) {

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

cout << ' ______________________ \n ' ;

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

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

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

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

ako ( t < 2 ) cout << ' \t | \t ' ;

}

cout << ' \t | \n ' ;

ako ( m < 2 ) cout << ' ______________________ \n ' ;

}

cout << ' \n ' ; }

bool isMoveValid ( char odbor [ 3 ] [ 3 ] , int red , int kol ) {

povratak ( red >= 0 && red < 3 && kol >= 0 && kol < 3 && odbor [ red ] [ kol ] == ' ' ) ;

}

bool jeBoardFull ( char odbor [ 3 ] [ 3 ] ) {

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

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

ako ( odbor [ m ] [ t ] == ' ' ) {

povratak lažno ;

} } }

povratak pravi ; }

char checkWinner ( char odbor [ 3 ] [ 3 ] ) {

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

ako ( odbor [ m ] [ 0 ] == odbor [ m ] [ 1 ] && odbor [ m ] [ 1 ] == odbor [ m ] [ 2 ] && odbor [ m ] [ 0 ] != ' ' ) {

povratak odbor [ m ] [ 0 ] ;

}

ako ( odbor [ 0 ] [ m ] == odbor [ 1 ] [ m ] && odbor [ 1 ] [ m ] == odbor [ 2 ] [ m ] && odbor [ 0 ] [ m ] != ' ' ) {

povratak odbor [ 0 ] [ m ] ;

} }

ako ( odbor [ 0 ] [ 0 ] == odbor [ 1 ] [ 1 ] && odbor [ 1 ] [ 1 ] == odbor [ 2 ] [ 2 ] && odbor [ 0 ] [ 0 ] != ' ' ) {

povratak odbor [ 0 ] [ 0 ] ;

}

ako ( odbor [ 0 ] [ 2 ] == odbor [ 1 ] [ 1 ] && odbor [ 1 ] [ 1 ] == odbor [ 2 ] [ 0 ] && odbor [ 0 ] [ 2 ] != ' ' ) {

povratak odbor [ 0 ] [ 2 ] ;

}

povratak ' ' ;

}

Evo raščlambe njegove funkcionalnosti:



“#include ” je direktiva pretprocesora koja uključuje I/O biblioteku toka za ulazno/izlazne operacije. Korištenje “namespace std” omogućuje izravnu upotrebu funkcija cout, cin, itd. u C++ programu, bez potrebe za “std:: prefiksom”.



U ovom programu postoje četiri prototipa funkcija – to su drawBoard(), isMoveValid(), isBoardFull() i checkWinner(). Deklaracija funkcije je poznata kao prototip funkcije. Iako dolazi nakon glavne funkcije u programu, koristit će se. Glavna funkcija sadrži petlju igre i logiku za upravljanje potezima i potezima igrača. Unutar glavne funkcije, ploča za igru ​​je inicijalizirana razmacima.





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

Nakon toga, definirane su dvije varijable reda i stupca za pohranu igračevog unosa poteza. 'char currentPlayer = 'X';' definira da igrač “X” ide prvi.

Sada počinje (istinska) petlja igre i traje sve dok ne dođe do pobjednika ili neriješenog rezultata. Ova 'while' petlja poziva 'drawBoard();' za prikaz ploče. Nakon prikazivanja ploče na konzoli, od korisnika se traži da odabere ćeliju koju će označiti u sljedećoj izjavi koda:



cout << 'Igrač' << trenutni igrač << ' je na redu. Unesite redak i stupac (1-3): ' ;

Igrač unosi svoj potez u 'cin >> row >> col;'.

Nakon odabira ćelije za označavanje, program će najprije provjeriti valjanost unosa, provjeravajući da ćelija nije već popunjena pozivom funkcije isMoveValid().

odbor [ red ] [ kol ] = trenutni igrač ;

Ova izjava stavlja oznaku igrača na ploču.

char pobjednik = checkWinner ( odbor ) ;

ako ( pobjednik != ' ' ) {

izvlačna ploča ( odbor ) ;

cout << 'Igrač' << pobjednik << 'pobjeđuje! \n ' ;

Ove izjave provjeravaju pobjednika svaki put kada igrač označi unos na ploči. Ime pobjednika bit će objavljeno ako postoji pobjednik, a program će izaći iz petlje igre.

ako ( jeBoardFull ( odbor ) ) {

Ova izjava provjerava neriješeno. Uvjet izjednačenosti javlja se u slučaju kada je ploča puna i nema pobjednika. U ovom slučaju, 'Kravata je!' ispisuje se na ekranu.

trenutni igrač = ( trenutni igrač == 'X' ) ? 'O' : 'X' ;

Ova izjava mijenja igrače kako bi svakom igraču dala priliku odigrati svoj red.

cout << 'Nevažeći potez. Odaberite drugu ćeliju. \n ' ;

Ako premještanje nije valjano, od korisnika se traži da ponovno unese i odabere bilo koju drugu ćeliju.

Nakon 'glavne' funkcije, počet će definicije funkcija za prototipove funkcija koji su prethodno deklarirani. Prva funkcija koja je ovdje definirana je drawBoard() koja se koristi za crtanje tic-tac-toe ploče na konzoli. Funkcija drawBoard() ispisuje trenutno stanje ploče, uključujući linije mreže.

Sljedeća funkcija koja je ovdje definirana je isMoveValid(). Ova se funkcija koristi za određivanje je li potez dopušten i unutar ploče i na praznoj ćeliji. Funkcija isBoardFull() koristi se za provjeru je li ploča još puna. Ovo je uvjet za izjednačenu situaciju kada nema pobjednika. IsBoardFull() provjerava jesu li sve pozicije na ploči popunjene što ukazuje na izjednačenost ako nema pobjednika. Postoji li pobjednik, to se može utvrditi pomoću funkcije checkWinner(). CheckWinner() provjerava sve potencijalne dobitne linije za istu oznaku igrača ('X' ili 'O') i vraća oznaku pobjedničkog igrača ako je pronađena ili znak razmaka ' ' ako još nema pobjednika. Sljedeći je rezultat programa. Prikazuje svaki potez svakog igrača.

Prvo, ploča je jasna; od igrača “X” se traži da odabere ćeliju koju treba označiti. Ovdje igrač “X” unosi 2 i 2. Označene su ćelije retka 2 i stupca 2. Pogledajte označenu ploču u sljedećem:

Sada je red na igrača O. Od igrača se traži da odabere ćeliju koju će označiti. Igrač 'O' bira 1 za red i 1 za stupac. Odabrana ćelija je označena za igrača 'O' kao što je prikazano u sljedećem izlaznom isječku:

Svi potezi za svakog igrača slijedit će isti obrazac. Na redu je igrač X, a igrač bira 1 za red i 2 za stupac. Pogledajte sljedeće izlazne snimke:

Sada je red na igrača 'O'. Igrač bira 1 za red i 3 za stupac.

Sljedeći potez je opet na igraču 'X'. Igrač bira 3 za red i 1 za stupac.

Igrač 'O' bira 3 za red i 2 za stupac.

Igrač “X” odabire drugi red i treći stupac.

Igrač “O” sada odabire drugi red i prvi stupac.

Igrač “X” ovoga puta bira treći red i treći stupac.

Nijedan igrač ne može napraviti bilo koju liniju vodoravno, okomito ili dijagonalno, tako da je neriješeno. Nema pobjednika za odabrani niz unosa.

Sve u svemu, kod sadrži glavnu petlju igre koja je odgovorna za rukovanje stanjem igre i korisničkim unosom, zajedno s nekoliko uslužnih funkcija koje se koriste za crtanje ploče, provjeru valjanosti poteza, provjeru pune ploče i određivanje ima li pobjednika .

Zaključak

Razvijanje tic-tac-toe igrice pomoću C++ izvrsna je praktična vježba za učvršćivanje vaših programerskih vještina. Članak točno objašnjava kako stvoriti tic-tac-toe u C++. Smjernice korak po korak navedene u ovom članku obuhvatile su 2D niz, funkcije i if-else uvjete kako bi čitatelji razumjeli mehaniku igre, korisničke interakcije i učinkovito strukturiranje koda. Detaljan pregled koda i objašnjenje funkcija koje su ključne za jezgru igranja čitatelje opskrbljuju neprocjenjivim uvidom u C++ programerske prakse i zamršenosti jednostavnog razvoja igre.