所以我正忙于编写一个3x3 2D井字游戏,我想尽快将其转换为3D版本 - 朋友给我看的东西。
无论如何,我的大部分基本面都没有了(播放器1,播放器2,输入行和列的值等等。但是我比较了值的行或值列是否等于彼此。
constexpr size_t rows = 3;
constexpr size_t cols = 3;
char gameBoard[rows][cols] = {
{'-','-','-'},
{'-','-','-'},
{'-','-','-'}
};
如果通过输入流程将其更改为:
char gameBoard[rows][cols] = {
{'O','O','O'},
{'X','X','-'},
{'-','-','X'}
};
我希望它能够识别第1行现已满,我可以提供必要的输出。
我想使用for
循环并检查第一个char到第二个&&
第三个之间的相等性但是出于某种原因,当我这样做时,它似乎只是简单地给出输出&#34 ;赢得文字"我已经给了它。
感谢您提供的任何输入:)
* 所以这个问题得到了回答,但我只想给我的代码来测试行和列。我还没有包含我的对角线部分,因为我刚刚完成它,但它应该非常直接(而不是[i][j]
你有[j][j]
来测试左上角的对角线例如,在右下方。
for (size_t i = 0; i != 1; i++)
{
int win_cnt = 0;
for (size_t j = 0; j != 3; j++)
{
if (gameBoard[i][j] == 'X')
{
win_cnt++;
if (win_cnt == 3)
{
system("cls"); //Please do not mind this, this is a placeholder
cout << "\n Player 1 has won the game!" << endl;
return 0;
}
}
}//Check for row win
win_cnt = 0;
for (size_t j = 0; j != 3; j++)
{
if (gameBoard[j][i] == 'X')
{
win_cnt++;
if (win_cnt == 3)
{
system("cls"); //Please do not mind this, this is a placeholder
cout << "\n Player 1 has won the game!" << endl;
return 0;
}
}
}//Check for column win
}//Check for win PRIMARY
不介意使用系统,我在编写功能的过程中清除使用过的&#34;控制台&#34;屏幕。 system(&#34; cls&#34;)现在只是一种更快速的调试方式。
答案 0 :(得分:1)
你可以这样做:
// Check rows
for (int row=0; row<rows; ++row) {
char first = gameBoard[row][0];
int col = 1;
while (gameBoard[row][col]==first && col<cols) ++col;
if (col==cols-1) return new std::string(first) + " wins"!;
}
同样,您可以检查列和对角线
答案 1 :(得分:0)
天真和最简单的解决方案是有两个循环,一个用于检查所有三个是否等于'O'
,如果没有,则运行另一个循环以检查所有三个是否等于'X'
。
类似下面的伪代码:
winner = check_winner('O');
if (winner != 'O')
winner = check_winner('X');
if (winner != '-')
std::cout << "The winner is " << winner << '\n';
函数check_winner
当然会进行实际检查,如果没有获胜者,则返回符号或'-'
。