Creació d'un joc Tic-Tac-Toe en C++

Creacio D Un Joc Tic Tac Toe En C



Tic-tac-toe és un joc interessant, antic i clàssic que ha entretingut les generacions. En tic-tac-toe, dos jugadors competeixen en una graella de 9 quadrats que està marcada amb un patró hash. Cada jugador fa el seu torn i col·loca el símbol (O o X) en una de les caselles buides. En aquest article, explorarem com crear un joc de tic-tac-toe en el llenguatge de programació C++. L'exemple següent us guiarà a través de la creació d'un joc de tic-tac-toe senzill però atractiu, que cobreix els conceptes essencials, els desglossament del codi i les consideracions per crear una experiència de joc interactiu.

Creeu un joc Tic-Tac-Toe en C++

L'exemple següent proporciona els fonaments bàsics per fer aquest joc interactiu de tic-tac-toe per a dos jugadors. Mostra un enfocament senzill i senzill per programar-lo amb C++ i proporciona un codi font ben documentat per reviure els reptes de la infància amb els amics en un nou format digital. Vegem el següent codi.

Exemple: Tic-Tac-Toe bàsic basat en consola sense utilitzar la matriu 2D

En aquest exemple, utilitzarem una matriu 2D, funcions i condicions si no per fer el joc tic-tac-toe en C++. En aquest joc, dos jugadors poden fer torns per introduir els seus moviments, i determina l'estat del joc comprovant si hi ha un guanyador o un empat. Vegeu el següent codi donat:







#inclou

utilitzant l'espai de noms std ;

buit tauler de dibuix ( char pissarra [ 3 ] [ 3 ] ) ;

bool isMoveValid ( char pissarra [ 3 ] [ 3 ] , int fila , int col ) ;

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

char checkGuanyador ( char pissarra [ 3 ] [ 3 ] ) ;

int principal ( ) {

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

int fila , col ;

char jugador actual = 'X' ;

mentre ( veritat ) {

tauler de dibuix ( pissarra ) ;

cout << 'Jugador' << jugador actual << 'El torn de '. Introduïu la fila (1-3) i la columna (1-3): ' ;

menjant >> fila >> col ;

fila --;

col --;

si ( isMoveValid ( pissarra , fila , col ) ) {

pissarra [ fila ] [ col ] = jugador actual ;

char guanyador = checkGuanyador ( pissarra ) ;

si ( guanyador != ' ' ) {

tauler de dibuix ( pissarra ) ;

cout << 'Jugador' << guanyador << 'és un guanyador! \n ' ;

trencar ;

}

si ( isBoardFull ( pissarra ) ) {

tauler de dibuix ( pissarra ) ;

cout << 'És una corbata! \n ' ;

trencar ;

}

jugador actual = ( jugador actual == 'X' ) ? 'O' : 'X' ;

} altra cosa {

cout << 'El moviment no és vàlid. Tria una altra cel·la. \n ' ;

} }

tornar 0 ;

}

buit tauler de dibuix ( char pissarra [ 3 ] [ 3 ] ) {

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

cout << ' ______________________ \n ' ;

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

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

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

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

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

}

cout << ' \t | \n ' ;

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

}

cout << ' \n ' ; }

bool isMoveValid ( char pissarra [ 3 ] [ 3 ] , int fila , int col ) {

tornar ( fila >= 0 && fila < 3 && col >= 0 && col < 3 && pissarra [ fila ] [ col ] == ' ' ) ;

}

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

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

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

si ( pissarra [ m ] [ t ] == ' ' ) {

tornar fals ;

} } }

tornar veritat ; }

char checkGuanyador ( char pissarra [ 3 ] [ 3 ] ) {

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

si ( pissarra [ m ] [ 0 ] == pissarra [ m ] [ 1 ] && pissarra [ m ] [ 1 ] == pissarra [ m ] [ 2 ] && pissarra [ m ] [ 0 ] != ' ' ) {

tornar pissarra [ m ] [ 0 ] ;

}

si ( pissarra [ 0 ] [ m ] == pissarra [ 1 ] [ m ] && pissarra [ 1 ] [ m ] == pissarra [ 2 ] [ m ] && pissarra [ 0 ] [ m ] != ' ' ) {

tornar pissarra [ 0 ] [ m ] ;

} }

si ( pissarra [ 0 ] [ 0 ] == pissarra [ 1 ] [ 1 ] && pissarra [ 1 ] [ 1 ] == pissarra [ 2 ] [ 2 ] && pissarra [ 0 ] [ 0 ] != ' ' ) {

tornar pissarra [ 0 ] [ 0 ] ;

}

si ( pissarra [ 0 ] [ 2 ] == pissarra [ 1 ] [ 1 ] && pissarra [ 1 ] [ 1 ] == pissarra [ 2 ] [ 0 ] && pissarra [ 0 ] [ 2 ] != ' ' ) {

tornar pissarra [ 0 ] [ 2 ] ;

}

tornar ' ' ;

}

Aquí teniu un desglossament de la seva funcionalitat:



El '#include ' és una directiva de preprocessador que inclou la biblioteca de flux d'E/S per a operacions d'entrada/sortida. L'ús del 'namespace std' permet l'ús directe de funcions cout, cin, etc. en un programa C++, sense requerir el prefix 'std::'.



Hi ha quatre prototips de funcions en aquest programa: drawBoard(), isMoveValid(), isBoardFull() i checkWinner(). La declaració de funció es coneix com a prototip de funció. Tot i que ve després de la funció principal del programa, s'utilitzarà. La funció principal conté el bucle de joc i la lògica per gestionar els girs i els moviments dels jugadors. Dins de la funció principal, el tauler de joc s'inicialitza amb espais.





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

Després d'això, es defineixen dues variables de fila i coll per emmagatzemar l'entrada de moviment del jugador. El 'char currentPlayer = 'X';' defineix que el jugador 'X' va primer.

Ara, comença el bucle de joc while (veritable) i s'executa fins que hi ha un guanyador o un empat. Aquest bucle 'while' crida el 'drawBoard();' per mostrar el tauler. Després de mostrar el tauler a la consola, se li demana a l'usuari que escolliu una cel·la per marcar a la següent instrucció de codi:



cout << 'Jugador' << jugador actual << El torn de '. Introduïu la fila i la columna (1-3): ' ;

El jugador introdueix el seu moviment a 'cin >> fila >> col;'.

En seleccionar una cel·la per marcar, el programa primer verificarà la validesa de l'entrada, assegurant-se que la cel·la encara no s'ha omplert cridant a la funció isMoveValid().

pissarra [ fila ] [ col ] = jugador actual ;

Aquesta afirmació posa la marca del jugador al tauler.

char guanyador = checkGuanyador ( pissarra ) ;

si ( guanyador != ' ' ) {

tauler de dibuix ( pissarra ) ;

cout << 'Jugador' << guanyador << 'guanya! \n ' ;

Aquestes declaracions cerquen un guanyador cada vegada que un jugador marca una entrada al tauler. El nom del guanyador s'anunciarà si hi ha un guanyador i el programa sortirà del bucle de joc.

si ( isBoardFull ( pissarra ) ) {

Aquesta declaració verifica si hi ha empat. La condició d'empat es produeix quan el tauler està ple i no hi ha guanyador. En aquest cas, 'És un empat!' s'imprimeix a la pantalla.

jugador actual = ( jugador actual == 'X' ) ? 'O' : 'X' ;

Aquesta declaració canvia els jugadors per donar a cada jugador l'oportunitat de jugar el seu torn.

cout << 'El moviment no és vàlid. Tria una altra cel·la. \n ' ;

Si el moviment no és vàlid, se li demana a l'usuari que torni a introduir i que triï qualsevol altra cel·la.

Després de la funció 'principal', s'iniciaran les definicions de funcions per als prototips de funcions que s'han declarat prèviament. La primera funció que es defineix aquí és drawBoard() que s'utilitza per dibuixar el tauler de tic-tac-toe a la consola. La funció drawBoard() imprimeix l'estat actual del tauler, incloses les línies de quadrícula.

La següent funció que es defineix aquí és isMoveValid(). Aquesta funció s'utilitza per determinar si es permet un moviment tant dins del tauler com en una cel·la buida. La funció isBoardFull() s'utilitza per comprovar si el tauler encara està ple. Aquesta és una condició per a una situació d'empat quan no hi ha guanyador. IsBoardFull() comprova si totes les posicions del tauler estan ocupades, cosa que indica un empat si no hi ha cap guanyador. Si hi ha un guanyador, es pot comprovar mitjançant la funció checkWinner(). El checkWinner() comprova totes les línies guanyadores potencials per a la marca del mateix jugador ('X' o 'O') i retorna la marca del jugador guanyador si es troba o un espai ' ' si encara no hi ha guanyador. El següent és el resultat del programa. Mostra cada torn de cada jugador.

Primer, el tauler és clar; se li demana al jugador 'X' que escolliu la cel·la a marcar. Aquí, el jugador 'X' introdueix 2 i 2. Les cel·les de la fila 2 i la columna 2 estan marcades. Consulteu el tauler marcat a continuació:

Ara és el torn del jugador O. Es demana al jugador que triï una cel·la per marcar. El jugador 'O' tria 1 per a la fila i 1 per a la columna. La cel·la escollida està marcada per al jugador 'O', tal com es mostra al fragment de sortida següent:

Tots els torns de cada jugador seguiran el mateix patró. És el torn del jugador X, i el jugador tria 1 per a la fila i 2 per a la columna. Consulteu les instantànies de sortida següents:

Ara, el torn és per al jugador 'O'. El jugador tria 1 per a la fila i 3 per a la columna.

El següent torn és de nou al jugador 'X'. El jugador tria 3 per a la fila i 1 per a la columna.

El jugador 'O' tria 3 per a la fila i 2 per a la columna.

El jugador 'X' selecciona la segona fila i la tercera columna.

El jugador 'O' ara selecciona la segona fila i la primera columna.

El jugador 'X' tria aquesta vegada la tercera fila i la tercera columna.

Cap jugador pot fer cap línia horitzontal, vertical o diagonal, per tant és un empat. No hi ha cap guanyador per a la matriu d'entrades escollida.

En general, el codi inclou un bucle de joc principal que s'encarrega de gestionar l'estat del joc i l'entrada de l'usuari, juntament amb diverses funcions d'utilitat que s'utilitzen per dibuixar el tauler, validar els moviments, comprovar si hi ha un tauler complet i determinar si hi ha un guanyador. .

Conclusió

Desenvolupar un joc de tic-tac-toe amb C++ és un excel·lent exercici pràctic per reforçar les teves habilitats de programació. L'article explica amb precisió com crear tic-tac-toe en C++. La guia pas a pas que s'ofereix en aquest article incloïa una matriu 2D, funcions i condicions si més no perquè els lectors entenguessin la mecànica del joc, les interaccions dels usuaris i l'estructuració eficient del codi. La descripció detallada del codi i l'explicació de les funcions que són crucials per a la jugabilitat bàsica ofereixen als lectors coneixements inestimables tant sobre les pràctiques de programació C++ com sobre les complexitats d'un desenvolupament de jocs senzill.