我正在编写一个小型雷区游戏。我实现了初始化雷区和部署地雷的功能。现在我必须编写一个函数来检查特定坐标是否包含地雷。如果坐标是空闲的,则状态应从 UNKNOWN_FREE 更改为 KNOWN_FREE 并返回 0。如果坐标包含地雷 - UNKNOWN_MINE 到 KNOWN_MINE 并返回 1。如果坐标在雷区之外,则应返回 -1。
int checkPlace(const Field *f, unsigned int x, unsigned int y)
{
while (y < f->ysize && x < f->xsize){
if( ( f->places[y][x] = UNKNOWN_MINE ) ){
f->places[y][x] = KNOWN_MINE;
return 1;
}
else if ( (f->places[y][x] = UNKNOWN_FREE) ){
f->places[y][x] = KNOWN_FREE;
return 0;
}
}
return -1;
}
现在我得到一个错误,对于空闲位置返回 1 而不是 0。
typedef enum {
UNKNOWN_FREE,
UNKNOWN_MINE,
KNOWN_FREE,
KNOWN_MINE
} State;
typedef struct {
unsigned int xsize, ysize;
State **places;
} Field;
非常感谢您的帮助。
最佳答案
您正在使用 =
,它是赋值运算符。您需要比较运算符 (==
)。
改变
if( ( f->places[y][x] = UNKNOWN_MINE ) ){
到
if( ( f->places[y][x] == UNKNOWN_MINE ) ){
和
else if ( (f->places[y][x] = UNKNOWN_FREE) ){
到
else if ( (f->places[y][x] == UNKNOWN_FREE) ){
此外,不需要额外的括号。
关于检查二维数组中的坐标以用于 C 中的雷区游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29605799/