【发布时间】:2019-04-06 23:32:49
【问题描述】:
好的,所以这个有点奇怪,也许有更好的方法来解决这个问题,但这就是我所在的地方。
我正在为我的 CS 课程介绍用 C 语言编写战舰游戏。我目前有一个看起来像这样的结构:
typedef struct player {
char *board[10][10];
char *map[10][10];
char *name;
int kills;
int deadShips;
int scorePoints;
int kdr;
int hits;
int misses;
}Player;
和2个功能:
void printBoard(char board[10][10]) {
char rowLetters[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'};
printf(" 1 2 3 4 5 6 7 8 9 10 \n");
// Rows
for (int r = 0; r < NUMROWS; ++r) {
printf(" %c ", rowLetters[r]);
// Columns
for (int c = 0; c < NUMCOLS; ++c) {
printf(" %c ", board[r][c]);
}
printf("\n");
}
}
void printChar(Player *p) {
printBoard(*(p->board));
printf("Choice: '%c'\n", *(p->board)[3][4]);
}
printBoard 获取一个数组并将其打印出来。 printChar 是我的功能失败的部分。现在,我只想访问棋盘的一个字符。在我可以开始工作后,我可以开始检查该位置是否有船只,并相应地调整分数、船只健康状况等。
我假设因为 p 是一个指向结构的指针,并且该结构上有一个指向数组的指针,所以我可以使用
(*(*p->board))[row][col]
达到我想要的角色。特别是因为将*(p->board) 传递到printBoard 工作得很好。但是获得一个特定的索引是行不通的。所以基本上,我需要找到一只在上面的青蛙,一个凹凸,那是在一根圆木上。有没有语法可以帮助我解决这个问题?甚至是构建我的程序的更好方法?我对指针有点陌生,如果有更好的方法,我完全愿意接受。
【问题讨论】:
-
在编写这样的 C 代码时,您需要考虑使用 2D 数组仿真而不是文字 2D 数组。您还希望避免通过值传递像
char board[10][10]这样的大型结构,而是将它们封装在某种board结构中,您可以改为通过指针传递。最重要的是,您要避免在整个代码中散布像10这样的“幻数”,而是明确定义、有意义的常量,如BOARD_HEIGHT和BOARD_WIDTH,可以更改一次,并且干净地流过整个代码-基地。 -
谢谢!将这些幻数更改为常量在我的待办事项清单上。现在,当您说 2D 仿真与文字 2D 数组时,您的意思是表示 2D 数组比嵌套数组有更好的结构吗?
标签: c arrays pointers struct char