您有两种解决方案:创建一个数组数组来存储您的字符(这就是矩阵的本质),或者创建一个 char 数组,这将是矩阵的线性化版本,即。一个数组,包含矩阵的所有行放在一起。
第一种情况很简单:
const int grid_size = size * size; // determines the size of the grid height x width
char **number = new char*[size]; // create the array to the size of the grid
for ( int i = 0; i < size; i++ ) {
number[i] = new char[grid_size];
for( int j = 0; j < size; j++)
number[i][j] = i * size + j;
}
// access any char with a double bracket notation
// beware that coordinates start at `0`
number[2][1] = 'X';
第二种解决方案比较棘手,我建议使用辅助函数将矩阵坐标转换为数组索引:
const int grid_size = size * size;
int idx(int x, int y){
return y * size + x;
}
char *number = new char[grid_size];
for (int i = 0; i < grid_size; i++)
number[i] = i;
number[idx(2,1)] = 'O';
字符实际上是变相的数字,但值远高于9
,因此对于常规井字游戏来说,这应该不是问题,并且您应该能够让它在最大为 8*8 的情况下工作。从 65 开始,数字开始代表常规字母字符(即 65 是A
,66 是B
等等,查看 ASCII 码表了解更多详细信息)。解决该问题的一种方法是,如果您想将单元格编号存储在单元格中并跟踪游戏状态,则使用 254 和 255 作为表示玩家移动的值,而不是使用O
and X
,但您会仍然限制在 7*7 的网格大小。
对于更大的尺寸,您可能需要考虑另一种数据结构来跟踪游戏状态。