Ustvarjanje igre Tic-Tac-Toe v C++

Ustvarjanje Igre Tic Tac Toe V C



Tic-tac-toe je zanimiva, stara in klasična igra, ki je zabavala generacije. V igri tic-tac-toe dva igralca tekmujeta na 9-kvadratni mreži, ki je označena z razpršenim vzorcem. Vsak igralec pride na vrsto in postavi simbol (O ali X) v eno od praznih polj. V tem članku bomo raziskali, kako ustvariti igro tic-tac-toe v programskem jeziku C++. Naslednji primer vas bo vodil skozi izdelavo preproste, a privlačne igre tik-tak-prsti, ki zajema bistvene koncepte, razčlenitve kode in premisleke za ustvarjanje interaktivne igralne izkušnje.

Ustvarite igro Tic-Tac-Toe v C++

Naslednji primer prikazuje osnove izdelave te interaktivne igre tic-tac-toe za dva igralca. Predstavlja preprost in enostaven pristop k programiranju s C++ in zagotavlja dobro dokumentirano izvorno kodo za podoživljanje teh izzivov iz otroštva s prijatelji v novi, digitalni obliki. Poglejmo naslednjo kodo.

Primer: osnovni tik-tak-toe na podlagi konzole brez uporabe 2D polja

V tem primeru bomo uporabili 2D matriko, funkcije in pogoje if-else za izdelavo igre tic-tac-toe v C++. V tej igri lahko dva igralca izmenično vnašata svoje poteze, stanje igre pa se določi s preverjanjem zmagovalca ali izenačenega izida. Oglejte si naslednjo podano kodo:







#include

uporaba imenskega prostora std ;

praznina risalna deska ( char tabla [ 3 ] [ 3 ] ) ;

bool isMoveValid ( char tabla [ 3 ] [ 3 ] , int vrstica , int col ) ;

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

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

int glavni ( ) {

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

int vrstica , col ;

char trenutni igralec = 'X' ;

medtem ( prav ) {

risalna deska ( tabla ) ;

cout << 'Igralec' << trenutni igralec << ' je na vrsti. Vnesite vrstico (1-3) in stolpec (1-3): ' ;

prehranjevanje >> vrstica >> col ;

vrstica --;

col --;

če ( isMoveValid ( tabla , vrstica , col ) ) {

tabla [ vrstica ] [ col ] = trenutni igralec ;

char zmagovalec = checkWinner ( tabla ) ;

če ( zmagovalec != ' ' ) {

risalna deska ( tabla ) ;

cout << 'Igralec' << zmagovalec << 'je zmagovalec! \n ' ;

odmor ;

}

če ( isBoardFull ( tabla ) ) {

risalna deska ( tabla ) ;

cout << »Kravata je! \n ' ;

odmor ;

}

trenutni igralec = ( trenutni igralec == 'X' ) ? 'O' : 'X' ;

} drugače {

cout << »Neveljavna poteza. Izberite drugo celico. \n ' ;

} }

vrnitev 0 ;

}

praznina risalna deska ( char tabla [ 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 << '' << tabla [ m ] [ t ] ;

če ( t < 2 ) cout << ' \t | \t ' ;

}

cout << ' \t | \n ' ;

če ( m < 2 ) cout << ' ______________________ \n ' ;

}

cout << ' \n ' ; }

bool isMoveValid ( char tabla [ 3 ] [ 3 ] , int vrstica , int col ) {

vrnitev ( vrstica >= 0 && vrstica < 3 && col >= 0 && col < 3 && tabla [ vrstica ] [ col ] == ' ' ) ;

}

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

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

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

če ( tabla [ m ] [ t ] == ' ' ) {

vrnitev lažno ;

} } }

vrnitev prav ; }

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

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

če ( tabla [ m ] [ 0 ] == tabla [ m ] [ 1 ] && tabla [ m ] [ 1 ] == tabla [ m ] [ 2 ] && tabla [ m ] [ 0 ] != ' ' ) {

vrnitev tabla [ m ] [ 0 ] ;

}

če ( tabla [ 0 ] [ m ] == tabla [ 1 ] [ m ] && tabla [ 1 ] [ m ] == tabla [ 2 ] [ m ] && tabla [ 0 ] [ m ] != ' ' ) {

vrnitev tabla [ 0 ] [ m ] ;

} }

če ( tabla [ 0 ] [ 0 ] == tabla [ 1 ] [ 1 ] && tabla [ 1 ] [ 1 ] == tabla [ 2 ] [ 2 ] && tabla [ 0 ] [ 0 ] != ' ' ) {

vrnitev tabla [ 0 ] [ 0 ] ;

}

če ( tabla [ 0 ] [ 2 ] == tabla [ 1 ] [ 1 ] && tabla [ 1 ] [ 1 ] == tabla [ 2 ] [ 0 ] && tabla [ 0 ] [ 2 ] != ' ' ) {

vrnitev tabla [ 0 ] [ 2 ] ;

}

vrnitev ' ' ;

}

Tukaj je razčlenitev njegove funkcionalnosti:



“#include ” je direktiva predprocesorja, ki vključuje knjižnico V/I toka za vhodno/izhodne operacije. Uporaba »namespace std« omogoča neposredno uporabo funkcij cout, cin itd. v programu C++, ne da bi zahtevali »std:: prefix«.



V tem programu so štirje prototipi funkcij – to so drawBoard(), isMoveValid(), isBoardFull() in checkWinner(). Deklaracija funkcije je znana kot prototip funkcije. Čeprav pride za glavno funkcijo v programu, bo uporabljen. Glavna funkcija vsebuje igralno zanko in logiko za upravljanje potez in potez igralcev. Znotraj glavne funkcije je igralna plošča inicializirana s presledki.





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

Po tem sta definirani dve spremenljivki vrstica in stolpec za shranjevanje igralčevega vnosa poteze. 'char currentPlayer = 'X';' določa, da igralec 'X' igra prvi.

Zdaj se začne (prava) igralna zanka in traja, dokler ne pride do zmagovalca ali izenačenja. Ta zanka »while« pokliče »drawBoard();« za prikaz table. Po prikazu table na konzoli mora uporabnik izbrati celico, ki jo bo označil v naslednjem stavku kode:



cout << 'Igralec' << trenutni igralec << ' je na vrsti. Vnesite vrstico in stolpec (1-3): ' ;

Igralec svojo potezo vnese v »cin >> row >> col;«.

Po izbiri celice za označevanje bo program najprej preveril veljavnost vnosa in se s klicem funkcije isMoveValid() prepričal, da celica ni že zapolnjena.

tabla [ vrstica ] [ col ] = trenutni igralec ;

Ta izjava postavi igralčevo oznako na tablo.

char zmagovalec = checkWinner ( tabla ) ;

če ( zmagovalec != ' ' ) {

risalna deska ( tabla ) ;

cout << 'Igralec' << zmagovalec << 'zmaga! \n ' ;

Te izjave preverjajo zmagovalca vsakič, ko igralec označi vnos na tabli. Ime zmagovalca bo objavljeno, če bo zmagovalec, in program bo zapustil igralno zanko.

če ( isBoardFull ( tabla ) ) {

Ta izjava preverja izenačenje. Pogoj za izenačenje nastopi v primeru, ko je tabla polna in ni zmagovalca. V tem primeru 'Kravata je!' se natisne na zaslonu.

trenutni igralec = ( trenutni igralec == 'X' ) ? 'O' : 'X' ;

Ta izjava preklopi med igralce, tako da ima vsak igralec možnost, da igra na vrsti.

cout << »Neveljavna poteza. Izberite drugo celico. \n ' ;

Če premik ni veljaven, je uporabnik pozvan, da znova vnese in izbere katero koli drugo celico.

Po 'glavni' funkciji se bodo začele definicije funkcij za prototipe funkcij, ki so bili predhodno deklarirani. Prva funkcija, ki je tukaj definirana, je drawBoard(), ki se uporablja za risanje tik-tak-toe table na konzolo. Funkcija drawBoard() natisne trenutno stanje table, vključno z mrežnimi črtami.

Naslednja funkcija, ki je tukaj definirana, je isMoveValid(). Ta funkcija se uporablja za ugotavljanje, ali je dovoljena poteza tako znotraj plošče kot na prazni celici. Funkcija isBoardFull() se uporablja za preverjanje, ali je tabla še polna. To je pogoj za izenačeno situacijo, ko ni zmagovalca. IsBoardFull() preveri, ali so vse pozicije na plošči zapolnjene, kar pomeni izenačenje, če ni zmagovalca. Če obstaja zmagovalec, ga je mogoče ugotoviti s funkcijo checkWinner(). CheckWinner() preveri vse potencialne zmagovalne linije za isto igralčevo oznako (»X« ali »O«) in vrne zmagovalno oznako, če je najdena, ali presledek » «, če še ni zmagovalca. Sledi rezultat programa. Prikazuje vsak obrat vsakega igralca.

Prvič, tabla je jasna; igralec 'X' je pozvan, da izbere celico, ki jo želite označiti. Tukaj igralec 'X' vnese 2 in 2. Celice vrstice 2 in stolpca 2 so označene. Oglejte si označeno tablo v naslednjem:

Zdaj je na vrsti igralec O. Igralec mora izbrati celico, ki jo želite označiti. Igralec 'O' izbere 1 za vrstico in 1 za stolpec. Izbrana celica je označena za igralca »O«, kot je prikazano v naslednjem izhodnem izrezku:

Vsi obrati za vsakega igralca bodo sledili istemu vzorcu. Na vrsti je igralec X, ki izbere 1 za vrstico in 2 za stolpec. Oglejte si naslednje dane izhodne posnetke:

Zdaj je na vrsti igralec 'O'. Igralec izbere 1 za vrstico in 3 za stolpec.

Naslednja poteza je spet na igralcu 'X'. Igralec izbere 3 za vrstico in 1 za stolpec.

Igralec 'O' izbere 3 za vrstico in 2 za stolpec.

Igralec 'X' izbere drugo vrstico in tretji stolpec.

Igralec »O« zdaj izbere drugo vrstico in prvi stolpec.

Igralec 'X' tokrat izbere tretjo vrstico in tretji stolpec.

Noben igralec ne more narediti nobene črte vodoravno, navpično ali diagonalno, tako da je izenačeno. Za izbrani niz vnosov ni zmagovalca.

Na splošno koda obsega glavno igralno zanko, ki je odgovorna za obravnavanje stanja igre in uporabniškega vnosa, skupaj z več uporabnimi funkcijami, ki se uporabljajo za risanje plošče, potrjevanje potez, preverjanje polne plošče in ugotavljanje, ali je zmagovalec. .

Zaključek

Razvijanje igre tic-tac-toe z uporabo C++ je odlična praktična vaja za krepitev vaših veščin programiranja. Članek natančno razloži, kako ustvariti tic-tac-toe v C++. Navodila po korakih v tem članku so vključevala 2D polje, funkcije in pogoje if-else, da bi bralci razumeli mehaniko igre, uporabniške interakcije in učinkovito strukturiranje kode. Podroben potek kode in razlaga funkcij, ki so ključne za jedro igranja, bralce opremijo z neprecenljivimi vpogledi tako v prakse programiranja C++ kot v zapletenosti preprostega razvoja igre.