【问题标题】:c++ Tic-Tac-Toe program [closed]c ++井字游戏程序[关闭]
【发布时间】:2016-12-08 19:35:37
【问题描述】:

所以我一直在构建井字游戏程序,目前仍在进行中。到目前为止,我没有收到任何构建错误,但我目前遇到的主要问题是,当玩家 1 输入他们的第一个数字时,程序就会关闭。我认为这是因为 Input() 函数,但是在查看了大约 3 次代码之后,我遇到了一个空白,不知道是什么原因造成的。以下是相关代码:

#include <iostream>
using namespace std;


char acBoard[3][3] = { '1', '2', '3', '4', '5', '6', '7', '8', '9' };
char cPlayerCharacter = '0';
int iChoice = iChoice + 1;




void DisplayBoard()
{
    system("cls");
    cout << ' ' << acBoard[0][0] << " | " << acBoard[0][1] << " | " << acBoard[0][2] << endl;
    cout << "---|---|---" << endl;
    cout << ' ' << acBoard[1][0] << " | " << acBoard[1][1] << " | " << acBoard[1][2] << endl;
    cout << "---|---|---" << endl;;
    cout << ' ' << acBoard[2][0] << " | " << acBoard[2][1] << " | " << acBoard[2][2] << endl;
}

char win()
{
    if (acBoard[0][0] && acBoard[0][1] && acBoard[0][2] == 'X' ||
        acBoard[1][0] && acBoard[1][1] && acBoard[1][2] == 'X' ||
        acBoard[2][0] && acBoard[2][1] && acBoard[2][2] == 'X' ||
        acBoard[0][0] && acBoard[1][0] && acBoard[2][0] == 'X' ||
        acBoard[0][1] && acBoard[1][1] && acBoard[2][1] == 'X' ||
        acBoard[0][2] && acBoard[1][2] && acBoard[2][2] == 'X' ||
        acBoard[0][0] && acBoard[1][1] && acBoard[2][2] == 'X' ||
        acBoard[2][0] && acBoard[1][1] && acBoard[2][0] == 'X')
        return 'X';

    if (acBoard[0][0] && acBoard[0][1] && acBoard[0][2] == '0' ||
        acBoard[1][0] && acBoard[1][1] && acBoard[1][2] == '0' ||
        acBoard[2][0] && acBoard[2][1] && acBoard[2][2] == '0' ||
        acBoard[0][0] && acBoard[1][0] && acBoard[2][0] == '0' ||
        acBoard[0][1] && acBoard[1][1] && acBoard[2][1] == '0' ||
        acBoard[0][2] && acBoard[1][2] && acBoard[2][2] == '0' ||
        acBoard[0][0] && acBoard[1][1] && acBoard[2][2] == '0' ||
        acBoard[2][0] && acBoard[1][1] && acBoard[2][0] == '0')
        return '0';

    return 'd';
}


void Input()
{
    cin >> iChoice;
    switch (iChoice)
    {
    case 1:
        acBoard[0][0] = cPlayerCharacter;
        break;
    case 2:
        acBoard[0][1] = cPlayerCharacter;
        break;
    case 3:
        acBoard[0][2] = cPlayerCharacter;
        break;
    case 4:
        acBoard[1][0] = cPlayerCharacter;
        break;
    case 5:
        acBoard[1][1] = cPlayerCharacter;
        break;
    case 6:
        acBoard[1][2] = cPlayerCharacter;
        break;
    case 7:
        acBoard[2][0] = cPlayerCharacter;
        break;
    case 8:
        acBoard[2][1] = cPlayerCharacter;
        break;
    case 9:
        acBoard[2][2] = cPlayerCharacter;
        break;
    }
}


int main()
{
    do
    {
        DisplayBoard();
        cout << "Enter a Number Player " << cPlayerCharacter << ": ";
        Input();
        if (cPlayerCharacter = '0')
        {
            cPlayerCharacter = 'X';
        }
        else cPlayerCharacter = '0';
    } while (!win);

    if (win() == 'd')
    {
        cout << "It's a draw";
    }

    if (win() == '0')
    {
        cout << "Nought wins";
    }

    if (win() == 'X')
    {
        cout << "Cross wins";
    }
}

我觉得解决方案就在我面前,但我就是看不到它。任何帮助,将不胜感激。谢谢。

【问题讨论】:

  • 如果您使用调试器单步调试,您只需查看一次。
  • } while (!win); 这应该是一个警告。除非你拒绝警告。 win 是一个函数。
  • 恕我直言,设计很糟糕。想象一下,如果您决定将游戏更改为在 5x5 棋盘上玩,您将要做些什么。
  • @sasha199568 所以我看到一个 5x5 板实际上是 something that could happen... :)
  • 任何时候您的代码开始看起来像您一直在剪切和粘贴相同代码的副本,是时候退后一步重新考虑设计了。

标签: c++ tic-tac-toe


【解决方案1】:

while (!win); 应该是 while (!win()); 才能实际调用该函数。否则,您实际上只是在评估该函数是否存在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    • 2015-03-11
    • 1970-01-01
    相关资源
    最近更新 更多