C ++比较2D多维数组中的内部值

时间:2013-06-04 17:55:00

标签: c++ multidimensional-array

所以我正忙于编写一个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;)现在只是一种更快速的调试方式。

2 个答案:

答案 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当然会进行实际检查,如果没有获胜者,则返回符号或'-'