是否可以将char arrary的元素转换为const char?

时间:2017-04-17 17:31:42

标签: c++ tic-tac-toe

我不想将char数组转换为const char数组,而是在元素获得特定值后使其成为常量。这个,我需要一个tic tac toe游戏。当网格具有X或O的值时,它需要是不可更改的,以确保玩家不能将X和O放在已经占用的网格上。

我搜索了它(在google和stackoverflow上),但到目前为止似乎不可能。这种方法有误吗?我不想改变整个程序来克服这个问题,所以我需要一些其他方法来确保玩家在拍摄后不会更改网格。

3 个答案:

答案 0 :(得分:4)

没有办法使数组const的某些元素保持可变(即非常量)。相反,请考虑为每个包含锁定值的方法创建一个对象。例如,考虑以下课程大纲:

class Piece {
    public:
        Piece();
        void LockValue();
        void SetValue(char c);
        char GetValue();
        bool GetIsLocked();

    private:
        char value;
        bool isLocked;
};

现在,您可以通过以下方式实现SetValue:

  • 在尝试更改任何内容之前检查isLocked的值
  • 第一次调用后将isLocked设置为true。

现在,您可以创建这些对象的数组,并使用它们来实现所需的功能。

答案 1 :(得分:2)

const是为开发人员准备的。它只是告诉编译器一个值是不可更改的,允许编译器进行一些优化并防止程序员错误。

在您的情况下,您必须编写自己的代码来保护您的领域。例如,您可以使用空格符号(' ')初始化每个字段,并在更改单元格的值之前,检查当前值...仅在值为空格符号时才允许更改。

答案 2 :(得分:0)

您可以使用背景bool网格来跟踪该位置是否已经用完......如果玩家已经使用过它,那么它将是真的,否则该位置将是假的,任何人都可以使用它。

//general code
char grid[3][3];
bool alreadyUsed[3][3] = {{false,false,false},{false,false,false},{false,false,false}};

if(alreadyUsed[playerChoiceX][playerChoiceY] == false)
{
    grid[playerChoiceX][playerChoiceY] = playerTurn;   //playerTurn is X or O
    alreadyUsed[playerChoiceX][playerChoice] = true;
}
else
    cout << "Position already used, select another position.\n";

编辑:我知道这不能回答你的问题,但它会帮助你完成游戏。我希望它有所帮助。