2016-04-01 58 views
-3

我有一项任务,需要我生成一个10×10的网格,每个网格都是空的或用星号填充。启动代码包含它应该生成的模式,但我只是不确定如何处理它。如何处理这个typedef?

在帮助文件中,该类型定义声明

#define BOARD_WIDTH 10 
#define BOARD_HEIGHT 10 

typedef enum cell{ 
    EMPTY, 
    BLOCKED, 
    PLAYER 
} Cell; 

#define EMPTY_OUTPUT " " 
#define BLOCKED_OUTPUT "*" 

Cell BOARD_1[BOARD_HEIGHT][BOARD_WIDTH]; 
Cell BOARD_2[BOARD_HEIGHT][BOARD_WIDTH]; 

,这里是在c文件中的代码

Cell BOARD_1[BOARD_HEIGHT][BOARD_WIDTH] = 
{ 
    { BLOCKED, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY }, 
    { EMPTY, BLOCKED, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, BLOCKED, EMPTY, EMPTY }, 
    { EMPTY, EMPTY, BLOCKED, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY }, 
    { EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, BLOCKED, EMPTY, EMPTY }, 
    { EMPTY, EMPTY, EMPTY, EMPTY, BLOCKED, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY }, 
    { EMPTY, EMPTY, BLOCKED, EMPTY, EMPTY, BLOCKED, EMPTY, BLOCKED, EMPTY, EMPTY }, 
    { EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, BLOCKED, EMPTY, EMPTY, EMPTY }, 
    { EMPTY, EMPTY, BLOCKED, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY }, 
    { EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY }, 
    { EMPTY, EMPTY, BLOCKED, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, BLOCKED } 
}; 

我编写了一段代码来生成一个空白格

void initialiseBoard(Cell board[BOARD_HEIGHT][BOARD_WIDTH]) 
{ 
int x; 
int y; 
printf("| |"); 
for(x=0; x<=9; x++){ 
    printf("%i|", x); 
} 
printf("\n"); 
for (y=0; y<=9; y++){ 

    printf("|%i|", y); 
    for(x=0; x<=9; x++){ 
     printf(" |"); 
    } 
    printf("\n"); 
} 

} 
void loadBoard(Cell board[BOARD_HEIGHT][BOARD_WIDTH], 
      Cell boardToLoad[BOARD_HEIGHT][BOARD_WIDTH]) 
{ 
    /* TODO */ 
} 

但我不确定如何使用BOARD_1单元格填充带星号的网格。 此函数initialiseBoard()也是启动代码的一部分,我也想解释为什么当我生成空白网格时需要参数。

+0

你应该在'for'循环中使用'BOARD_HEIGHT'和'BOARD_WIDTH'而不是9} –

+0

我会把它写成'typedef enum {EMPTY ='',BLOCKED ='*',PLAYER ='@'} Cell;'然后当你想打印它时,只需将值赋给'char'。为你保存一张查找表。另一种方法是查找表:'const char SYMBOL [] = {'','*','@'};'后面跟着'SYMBOL [my_enum]'。 – Lundin

回答

2

“生成”并不意味着“打印到标准输出”,它的意思是“创建内存状态”,换句话说,你initialiseBoard()功能应该变化板阵列的内容,它的通过,所以它成为初始化的板(而不是随机的非初始化板)。

printf()在你的循环应该是分配到的board细胞:

void initialiseBoard(Cell board[BOARD_HEIGHT][BOARD_WIDTH]) 
{ 
    for (size_t y = 0; y < BOARD_HEIGHT; ++y) 
    { 
    for (size_t x = 0; x < BOARD_WIDTH; ++x) 
     board[y][x] = EMPTY; 
    } 
} 

这将所有细胞EMPTY