La fonction de vérification des espaces vides ne fonctionne pas. Ceci est un jeu de tic tac toe. Donc, cette fonction vérifie après chaque coup si quelqu'un a gagné la partie ou si c'est une égalité. Après que quelqu'un gagne ou qu'il y ait une égalité, le plateau doit être réinitialisé et le jeu doit être redémarré. Je n'arrive pas à faire fonctionner la fonction de check-in vide. S'il vous plaît, aidez-moi à résoudre ce problème.Problèmes liés à la vérification de la fonction Entrée de tableau avec les instructions IF
checkboard devrait vérifier chaque entrée des utilisateurs pour voir si ce jeu a gagné. Le checkboard doit donc vérifier si playerOne a Xs dans une ligne ou en diagonale ou si playerTwo a Os de cette manière ou s'il y a égalité. Si le joueur gagne ou s'il y a un match nul, il indique qui a gagné ou s'il y a égalité, puis demande à l'utilisateur s'il veut rejouer ou quitter le programme. De leur réponse, le tableau est réinitialisé ou le jeu se termine. Le problème que je pense est que bGameOver continue à sortir vrai, peu importe quoi. J'ai mis après le code avant le gameover bGameOver = false et le proggram a fonctionné comme il était supposé le faire. Donc, où dans les instructions if, il continue à faire bGameOver = true après 1 mouvement.
Après il est résolu, je voudrais des suggestions sur la façon de l'améliorer seulement après que le problème est résolu.
#include <iostream>
#include <string>
void checkboard(char** CurrentPlayer, char (&squares)[3][3], char &playerMarker, bool bGameOver,char playerOne[]);
using namespace std;
void main()
{
char board[3][3];
board[0][0] = ' ';
board[0][1] = ' ';
board[0][2] = ' ';
board[1][0] = ' ';
board[1][1] = ' ';
board[1][2] = ' ';
board[2][0] = ' ';
board[2][1] = ' ';
board[2][2] = ' ';
bool bGameOver(true);
char playerMarker;
// Main game loop
do
{
showboard(board);
boardMarker(playerTurn, playerOne, playerTwo, playerMarker, ¤tPlayer);
playerMove(currentPlayer, board, playerMarker);
checkboard(¤tPlayer, board, playerMarker, bGameOver, playerOne);
alternatePlayers(playerTurn);
}
while (!bGameOver);
}
void showboard(char (&board)[3][3])
{
for(int i = 0; i < 3; ++i)
{
for(int j = 0; j < 3; ++j)
{
cout << board[i][j];
if(j < 2) cout << "|";
}
cout << "\n";
if(i < 2) cout << "-+-+-" << endl;;
}
}
void playerMove(char* CurrentPlayer, char (&board)[3][3], char &playerMarker)
{
bool bValidMove;
int x,y;
// Prompt the player for a move
cout << "Player " << CurrentPlayer << "'s move:" << endl;
// Loop until we get a valid move
do
{
cout << "Please enter the row number for the place you wish to mark: " << endl;
cin >> x;
cout << "Please enter the column number for the place you wish to mark" << endl;
cin >> y;
bValidMove = true;
// Check for a valid move
if (x == 1 && y == 1)
{
board[0][0] = playerMarker;
}
else if (x == 1 && y == 2)
{
board[0][1] = playerMarker;
}
else if (x == 1 && y == 3)
{
board[0][2] = playerMarker;
}
else if (x == 2 && y == 1)
{
board[1][0] = playerMarker;
}
else if (x == 2 && y == 2)
{
board[1][1] = playerMarker;
}
else if (x == 2 && y == 3)
{
board[1][2] = playerMarker;
}
else if (x == 3 && y == 1)
{
board[2][0] = playerMarker;
}
else if (x == 3 && y == 2)
{
board[2][1] = playerMarker;
}
else if (x == 3 && y == 3)
{
board[2][2] = playerMarker;
}
else
{
cout << "Invalid Move. Try again." << endl;
bValidMove = false;
}
}
while (!bValidMove);
}
void checkboard(char** CurrentPlayer, char (&board)[3][3], char &playerMarker, bool bGameOver, char playerOne[100])
{
bGameOver = false;
bool bWinGame = true;
// Check for end of game conditions
do
{
if (board[0][0] = playerMarker)
{
if (board[0][1] == board[0][0] && board[0][2] == board[0][0]) {
bGameOver = true;
}
if (board[1][0] == board[0][0] && board[2][0] == board[0][0]) {
bGameOver = true;
}
}
if (board[1][1] != playerMarker)
{
if (board[0][0] == board[1][1] && board[2][2] == board[1][1])
{
bGameOver = true;
}
if (board[0][1] == board[1][1] && board[2][1] == board[1][1])
{
bGameOver = true;
}
if (board[1][0] == board[1][1] && board[1][2] == board[1][1])
{
bGameOver = true;
}
if (board[0][2] == board[1][1] && board[2][0] == board[1][1])
{
bGameOver = true;
}
}
if (board[2][2] != playerMarker)
{
if (board[0][2] == board[2][2] && board[1][2] == board[2][2])
{
bGameOver = true;
}
if (board[2][0] == board[2][2] && board[2][1] == board[2][2])
{
bGameOver = true;
}
}
// Need to check the board full (no-win condition)
if (board[0][0] != playerMarker && board[0][1] != playerMarker && board[0][2] != playerMarker &&
board[1][0] != playerMarker && board[1][1] != playerMarker && board[1][2] != playerMarker &&
board[2][0] != playerMarker && board[2][1] != playerMarker && board[2][2] != playerMarker && !bGameOver)
{
bGameOver = true;
bWinGame = false;
}
system("cls");
if (bGameOver)
{
if (bWinGame)
{
cout << "Player " << CurrentPlayer << " wins!" << endl;
}
// Print ending board
for(int i = 0; i < 3; ++i)
{
for(int j = 0; j < 3; ++j)
{
cout << board[i][j];
if(j < 2) cout << "|";
}
cout << "\n";
if(i < 2) cout << "-+-+-" << endl;;
}
cout << "Game Over!" << endl;
cout << "Play again (y/n)?" << endl;
char cPlayAgain;
cin >> cPlayAgain;
if (cPlayAgain == 'y')
{
bGameOver = false;
// Clear the board
board[0][0] = ' ';
board[0][1] = ' ';
board[0][2] = ' ';
board[1][0] = ' ';
board[1][1] = ' ';
board[1][2] = ' ';
board[2][0] = ' ';
board[2][1] = ' ';
board[2][2] = ' ';
}
*CurrentPlayer = playerOne;
}
} while (!bGameOver);
}
Dupe de http://stackoverflow.com/questions/3369478/checking-an-array-for-results-using-a-function-closed par le même utilisateur. –
Cette question était fermée, donc je pensais que je devais commencer une nouvelle question avec l'information qu'ils voulaient – Renge
Je n'ai pas fait d'analyse correcte (c'est un peu spaghetti-ish) mais la ligne "if (board [0] [0] = '1') {"est probablement faux s/= /! =/ –