1

所以我正忙于编写一个 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循环并检查第一个字符与第二个&&三分之一之间的相等性,但由于某种原因,当我这样做时,它似乎只是简单地给出了我给它的输出“win text”。

感谢您提供的任何输入:)

*所以这个问题得到了回答,但我只是想给出我为测试行和列所做的代码。因为我刚刚完成它,所以我没有包括我的对角线部分,但它应该非常简单(而不是[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

不要介意系统的使用,我正在编写一个函数来清除使用过的“控制台”屏幕。system("cls") 现在只是一种更快的调试方法。

4

2 回答 2

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"!;
}

同样,您可以检查列和对角线

于 2013-06-04T18:03:15.233 回答
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当然会进行实际检查,并返回符号或'-'如果没有获胜者。

于 2013-06-04T17:57:36.820 回答