我将2D数组作为一个可以被认为是游戏板的网格。当棋盘初始化以便比赛开始时,有四个人。它适用于nxn
网格。作为一个例子
x o
o x
我是使用2D数组做的。现在,我尝试将数组转换为1D。我一直坚持如何将符号放在网格上为1D数组。
for(int i = 0; i < row; ++i)
for(int j = 0; j < col; ++j)
{
//grid[i][j] = '.';
grid[i * col + j] = '.'; // I've converted the part
}
int centerh = row / 2;
int centerw = col / 2;
// I'm stuck that part.
grid[centerh][centerw] = 'o';
grid[centerh - 1][centerw - 1] = 'o';
grid[centerh][centerw - 1] = 'x';
grid[centerh - 1][centerw] = 'x';
答案 0 :(得分:1)
这会将您的2D网格转换为1D:
grid1D[row*col];
grid2D[row][col];
for(int i = 0; i < row; ++i)
for(int j = 0; j < col; ++j)
grid1D[i * col + j] = grid2D[i][j];
答案 1 :(得分:1)
在C中,我会使用宏和一维数组作为此类事情的基础。
类似的东西:
#define WIDTH 10
#define HEIGHT 10
char grid[ WIDTH * HEIGHT ] ;
#define ELEMENT(row,column) grid[ ( (row)*WIDTH ) + (column) ]
/* Read an element */
char c ;
c = ELEMENT( 5, 7 ) ;
/* write to an element */
ELEMENT( 5, 7 ) = 'x' ;
/* access the array in 1D is trivial as you simply use grid[] directly */
因此,您可以使用相同的1D数组作为2D项目而无需重复。
重要的一点是:在使用宏时避免后期和预先减量操作。原因是它们可能导致混淆错误,因为宏不是函数,宏的每个“参数”只是替换相应宏“参数”的文本。