Функция void checkboard не работает. Это игра в крестики-нолики. Таким образом, эта функция проверяет после каждого хода, выиграл ли кто-то игру или имеет ничью. После того, как кто-то выиграет или сыграет вничью, настольная карта должна быть сброшена и игра начала. Я просто не могу заставить функцию void checkboard работать. Пожалуйста, помогите мне решить эту проблему.
checkboard должен проверять каждый пользовательский ввод, чтобы увидеть, выиграла ли эта игра. Таким образом, checkboard должен проверить, есть ли у playerOne X в линии или по диагонали, или есть ли у playerTwo Os таким же образом или есть ли связь. Если игрок выигрывает или есть ничья, он сообщает, кто выиграл или что есть ничья, и затем спрашивает пользователя, хотят ли они играть снова или выйти из программы. По их ответу доска сбрасывается или игра выходит.
Проблема, я думаю, в том, что bGameOver продолжает работать, несмотря ни на что. Я поставил после кода перед gameover bGameOver = false, и программа работала так, как и предполагалось. Так что где-то в выражениях if он продолжает делать bGameOver = true после 1 хода.
После того, как она будет решена, я хотел бы получить предложения по ее улучшению только после того, как проблема будет решена.
#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);
}