我如何重置我的井字游戏的值

How i can reset the values of my Tic Tac Toe Game

本文关键字:游戏 我的井 何重置      更新时间:2023-10-16

您好,我的程序有问题。编程对我来说是新的,我不知道我将在哪里重置矩阵的值,因为它的值的声明是全局的。为了了解更多信息,我在下面有一个评论,其中如果游戏已经完成,程序将询问用户是否要再次运行游戏。无论如何,可以通过向给定代码添加一些代码或修改来解决此问题。我尝试使用功能转到开始;在 if 条件和主函数中有一个 开始:写入。但它没有用。请提前帮助我谢谢。

#include <iostream>
using namespace std;
char matrix[3][3] = { '1', '2', '3', '4', '5', '6', '7', '8', '9' };
char player = 'X';
int rear; 

void Draw()
{
    system("cls");
    cout << "nntTic Tac Toe Game nn";
    for (int i = 0; i < 3; i++)
    {
        cout<<" t     "; 
        for (int j = 0; j < 3; j++)
        {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }
}
void Input()
{
    int a;
    ++rear; 
    cout << "n    Press the number of the field: ";
    cin >> a;
    if (a == 1)
        matrix[0][0] = player;
    else if (a == 2)
        matrix[0][1] = player;
    else if (a == 3)
        matrix[0][2] = player;
    else if (a == 4)
        matrix[1][0] = player;
    else if (a == 5)
        matrix[1][1] = player;
    else if (a == 6)
        matrix[1][2] = player;
    else if (a == 7)
        matrix[2][0] = player;
    else if (a == 8)
        matrix[2][1] = player;
    else if (a == 9)
        matrix[2][2] = player;
    else {
    cout<<"n [ERROR: Invalid Range of Input is only 1-9 ]nn "; 
    system("pause"); 
    rear--; 
    }
}
void TogglePlayer()
{
    if (player == 'X')
        player = 'O';
    else
        player = 'X';
}
char Win()
{
    //first player
    if (matrix[0][0] == 'X' && matrix[0][1] == 'X' && matrix[0][2] == 'X')
        return 'X';
    if (matrix[1][0] == 'X' && matrix[1][1] == 'X' && matrix[1][2] == 'X')
        return 'X';
    if (matrix[2][0] == 'X' && matrix[2][1] == 'X' && matrix[2][2] == 'X')
        return 'X';
    if (matrix[0][0] == 'X' && matrix[1][0] == 'X' && matrix[2][0] == 'X')
        return 'X';
    if (matrix[0][1] == 'X' && matrix[1][1] == 'X' && matrix[2][1] == 'X')
        return 'X';
    if (matrix[0][2] == 'X' && matrix[1][2] == 'X' && matrix[2][2] == 'X')
        return 'X';
    if (matrix[0][0] == 'X' && matrix[1][1] == 'X' && matrix[2][2] == 'X')
        return 'X';
    if (matrix[2][0] == 'X' && matrix[1][1] == 'X' && matrix[0][2] == 'X')
        return 'X';
    //second player
    if (matrix[0][0] == 'O' && matrix[0][1] == 'O' && matrix[0][2] == 'O')
        return 'O';
    if (matrix[1][0] == 'O' && matrix[1][1] == 'O' && matrix[1][2] == 'O')
        return 'O';
    if (matrix[2][0] == 'O' && matrix[2][1] == 'O' && matrix[2][2] == 'O')
        return 'O';
    if (matrix[0][0] == 'O' && matrix[1][0] == 'O' && matrix[2][0] == 'O')
        return 'O';
    if (matrix[0][1] == 'O' && matrix[1][1] == 'O' && matrix[2][1] == 'O')
        return 'O';
    if (matrix[0][2] == 'O' && matrix[1][2] == 'O' && matrix[2][2] == 'O')
        return 'O';
    if (matrix[0][0] == 'O' && matrix[1][1] == 'O' && matrix[2][2] == 'O')
        return 'O';
    if (matrix[2][0] == 'O' && matrix[1][1] == 'O' && matrix[0][2] == 'O')
        return 'O';
    return '/';
}
int main()
{
    char choice; 
    Draw();
    Start: 
    while (1)
    {
        Input();
        Draw();
        if (Win() == 'X')
        {
            cout << "n    [Message: Player 'X' Wins The Game]  ";
            break;
        }
        else if (Win() == 'O')
        {
            cout << "n    [Message: Player 'O' Wins The Game ]" << endl;
            break;
        }
        else if(rear==9)
        {
            cout<<" Draw"<<endl; 
            break; 
        }
        TogglePlayer();
    }
    cout<<"nn   ";
    cout<<"Do you want to run the game again [Y/N]? ";
    cin>>choice;
    if(choice=='Y' || choice=='y')
    {
        // i don't know where i can reset the values again; 
    }
    else 
    {
    }
    return 0;
}

您必须重置游戏变量。我认为您的游戏变量重置值是:

int rear = 0;
player = 'X';
char matrix[3][3] = { '1', '2', '3', '4', '5', '6', '7', '8', '9' };

虽然您只需分配即可重置rearplayer,但matrix必须"重新生成"。重新注册matrix的一种方法是(有关详细信息,请参阅如何从初始值设定项列表分配数组(:

    for (int i=0; i<3; i++) {
        for (int j=0; j<3; j++) {
            matrix[i][j] = i*3+(j+1) + 48;
        }
    }

最后,你必须回到你main函数的开始。您已经在这里放置了一个Start:标签,所以我假设您可能尝试使用goto?标签需要在Draw()之前移动。所以这是你的重置代码:

if(choice=='Y' || choice=='y')
{
    // i don't know where i can restart the values again; 
    for (int i=0; i<3; i++) {
        for (int j=0; j<3; j++) {
            matrix[i][j] = i*3+(j+1) + 48;
        }
    }
    rear = 0;
    player = 'X';
    goto Start;
}

一些问题:

  • 你不应该依赖goto,尽管在这种情况下它仍然没问题。
  • system("cls")在 Linux 上不起作用

最简单的解决方案是创建一个函数来执行此操作(void InitGame()(,并在需要时运行它。

附带说明:矩阵索引可以通过几个简单的算法从位置找出matrix[(position - 1)/3][(position - 1) % 3]。 这在初始化矩阵时也很方便。

此外,与其检查每行是否每个位置

等于每个玩家,不如检查每个位置的值是否相等,然后该值代表获胜者。

相关文章: