我不想将char数组转换为const char数组,而是在元素获得特定值后使其成为常量。这个,我需要一个tic tac toe游戏。当网格具有X或O的值时,它需要是不可更改的,以确保玩家不能将X和O放在已经占用的网格上。
我搜索了它(在google和stackoverflow上),但到目前为止似乎不可能。这种方法有误吗?我不想改变整个程序来克服这个问题,所以我需要一些其他方法来确保玩家在拍摄后不会更改网格。
答案 0 :(得分:4)
没有办法使数组const的某些元素保持可变(即非常量)。相反,请考虑为每个包含锁定值的方法创建一个对象。例如,考虑以下课程大纲:
class Piece {
public:
Piece();
void LockValue();
void SetValue(char c);
char GetValue();
bool GetIsLocked();
private:
char value;
bool isLocked;
};
现在,您可以通过以下方式实现SetValue:
现在,您可以创建这些对象的数组,并使用它们来实现所需的功能。
答案 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";
编辑:我知道这不能回答你的问题,但它会帮助你完成游戏。我希望它有所帮助。