井字游戏2D阵列填充角色

时间:2018-10-30 22:36:02

标签: c++11 tic-tac-toe

我正在尝试使用井字游戏创建4x4电路板,这是我正在使用的功能。此功能将板重置为默认值,必须像这样 default

void resetBoard(char board[4][4])                                   
{
    for (int i = 0; i < 4; i++)                                     
    {
        int boardcounter = 1;
        for (int j = 0; j < 4; j++)
        {
            board[i][j] = '0' + boardcounter;
            boardcounter++;
        }
    }
}

为此,我得到了答案current output 如果这样写

 for (int j = 0; j < 3; j++)
    {
        board[i][j] = (char) boardcounter;
        boardcounter++;
    }

董事会被搞砸了,我该如何更改,以便该人可以输入代表董事会中10-16的字符A,...,G。

2 个答案:

答案 0 :(得分:0)

void resetBoard(char board[4][4])                                   
{
    for (int i = 0; i < 4; i++)                                     
    {
        int boardcounter = 1;
        for (int j = 0; j < 4; j++)
        {
            char offset = '0';

            if( boardcounter > 9 )
            {
                offset = 'A' - 10;
            }

            board[i][j] = offset + boardcounter;
            boardcounter++;
        }
    }
}

答案 1 :(得分:0)

我不确定您发布的图片是您上面发布的代码的输出。我必须更改您发布的代码才能获得该输出:

void resetBoard(char board[4][4])
{
    int boardcounter = 1;

    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            board[i][j] = '0' + boardcounter;
            boardcounter++;
        }
    }
}

如果不清楚更改是什么,我将int boardcounter = 1;行移到了循环之外。

此代码产生您发布的图像中显示的输出的原因与ASCII编码系统有关。

如果您查看该链接中的表,则可以看到'0'的ASCII码为48。当boardcounter为1时,'0' + boardcounter的值将为49,即1的代码。程序在循环中移动,'0' + boardcounter移至50(2的代码),51(3的代码),依此类推。

当boardcounter达到10时,'0' + boardcounter将为58,这是:的代码。这就是为什么您在发布的图像中看到该符号的原因。董事会人数分别为11、12、13、14、15和16时,也会有类似的说明。

因此,既然已经解释了输出奇怪的原因,那么问题是如何获得所需的输出。一种方法是使用if语句检查boardcounter是在1到9之间还是在10到16之间。如果它在1到9之间,则可以使用发布的代码。如果boardcounter在10到16之间,则可能需要使用board[i][j] = 'A' + (boardcounter-10);之类的行来将字符分配给board数组。