从if和if else传递数据时出现问题
Trouble passing data from if and if else
我正在尝试创建一个简单的井字游戏程序作为一些家庭作业的一部分,但在检查游戏是否获胜时遇到困难。当我启动程序并输入一个数字时,它立即显示"玩家2获胜!",我不知道我做错了什么。
#include "stdafx.h"
#include "tictactoe.h"
using namespace std;
void clearBoard(char gameBoard[])
{
for (int i = 0; i < board_size; i++)
{
gameBoard[i] = free_char;
}
}
void printBoard(char gameBoard[])
{
system("cls");
//for (int i = 0; i < board_width; i++)
//{
//cout << gameBoard[i] + 1 << " " << gameBoard[i] + 1 << " " << gameBoard[i] + 1 << endl;
//}
cout << gameBoard[0] << " " << gameBoard[1] << " " << gameBoard[2] << endl;
cout << gameBoard[3] << " " << gameBoard[4] << " " << gameBoard[5] << endl;
cout << gameBoard[6] << " " << gameBoard[7] << " " << gameBoard[8] << endl;
}
int askMove(int player)
{
cout << "Player " << player << ", Select a square [1-9]: ";
cin >> choice;
return 0;
}
bool verifyMakeMove(char gameBoard[], int move, int player)
{
if (player == 1)
{
mark = p1_char;
}
else
{
mark = p2_char;
}
if (move < 1 || move > 9)
{
cout << "You did not enter a number between 1 and 9. Try again." << endl;
}
if (move == 1 && gameBoard[0] == free_char)
{
gameBoard[0] = mark;
}
else if (move == 2 && gameBoard[1] == free_char)
{
gameBoard[1] = mark;
}
else if (move == 3 && gameBoard[2] == free_char)
{
gameBoard[2] = mark;
}
else if (move == 4 && gameBoard[3] == free_char)
{
gameBoard[3] = mark;
}
else if (move == 5 && gameBoard[4] == free_char)
{
gameBoard[4] = mark;
}
else if (move == 6 && gameBoard[5] == free_char)
{
gameBoard[5] = mark;
}
else if (move == 7 && gameBoard[6] == free_char)
{
gameBoard[6] = mark;
}
else if (move == 8 && gameBoard[7] == free_char)
{
gameBoard[7] = mark;
}
else if (move == 9 && gameBoard[8] == free_char)
{
gameBoard[8] = mark;
}
else
{
cout << "That move cannot be made. Try again." << endl;
}
return 0;
}
int checkEndGame(char gameBoard[])
{
if (gameBoard[0] == gameBoard[1] && gameBoard[1] == gameBoard[2])
{
return 1;
}
else if (gameBoard[3] == gameBoard[4] && gameBoard[4] == gameBoard[5])
{
return 1;
}
else if (gameBoard[6] == gameBoard[7] && gameBoard[7] == gameBoard[8])
{
return 1;
}
else if (gameBoard[0] == gameBoard[3] && gameBoard[3] == gameBoard[6])
{
return 1;
}
else if (gameBoard[1] == gameBoard[4] && gameBoard[4] == gameBoard[7])
{
return 1;
}
else if (gameBoard[2] == gameBoard[5] && gameBoard[5] == gameBoard[8])
{
return 1;
}
else if (gameBoard[0] == gameBoard[4] && gameBoard[4] == gameBoard[8])
{
return 1;
}
else if (gameBoard[2] == gameBoard[4] && gameBoard[4] == gameBoard[6])
{
return 1;
}
else if (gameBoard[0] != free_char && gameBoard[1] != free_char && gameBoard[2] != free_char && gameBoard[3] != free_char && gameBoard[4] != free_char && gameBoard[5] != free_char && gameBoard[6] != free_char && gameBoard[7] != free_char && gameBoard[8] != free_char)
{
return -1;
}
else
{
return 0;
}
}
int playGame()
{
char gameBoard[10];
int player = 1;
int winner;
clearBoard(gameBoard);
do
{
printBoard(gameBoard);
askMove(player);
verifyMakeMove(gameBoard, choice, player);
checkEndGame(gameBoard);
if (player == 1)
{
player = 2;
}
else
{
player = 1;
}
} while (checkEndGame(gameBoard) == 0);
if (checkEndGame(gameBoard) == 1)
{
cout << "Player " << player << " wins!" << endl;
}
else
{
cout << "It's a draw!" << endl;
}
return 0;
}
int main()
{
playGame();
return 0;
}
游戏开始时,棋盘是空白的。所有九个正方形的值都相同,所以它们彼此相等。特别是,某一行的三个方格相等,所以根据你的逻辑,有人赢了。你需要添加额外的逻辑来避免这个结论。
一个明显的问题是,在checkEndGame
中,当您寻找一行三个时,您没有检查空方块。测试应该更像
if (gameBoard[0] != 0 && gameBoard[0] == gameBoard[1] && gameBoard[1] == gameBoard[2])
^^^^^^^^^^^^^^^^^^^^
可能还有其他问题,您可以通过使用调试器逐步检查代码来发现。
相关文章:
- 我似乎对if/else的基本语句有问题:/
- Craps游戏问题,忽略if语句
- 在C++中做一个场景问题,我不确定如何处理布尔和if循环
- 有人能在我的代码中找到与C++中的IF语句相关的问题吗
- 跳转到if(false)块有问题吗
- 面临在 if 语句之外打印变量数据的问题 完成使用 Qt 编程
- C++ do/while 循环和 if/else: 骰子游戏 -- 第 75 行错误:"Cout"之前的预期"While" -- 如何解决这个问题?
- 使用语句if时逻辑的问题
- 使用 if/else if 的函数输出问题
- R6010 执行后出错.if 语句在 for 循环中.[作业][中止已解决,发现新问题]
- 在设置 if-else 语句以删除特定货币并保持更新时遇到问题
- If/Else 语句在 2D 数组中移动时出现问题
- 我一直遇到 if elif 和 C++ 中的其他问题
- 我的 IF 语句中存在问题,否则无法正常工作
- C++函数问题中的 IF 语句
- 具有"else if"方法问题 C++ 的基本计算器
- 我的 if 语句逻辑出了什么问题?
- 这个IF语句有什么问题吗?(C++)
- IF流获取线问题
- 井字游戏循环和 If 问题