检查二维数组中的坐标以用于 C 中的雷区游戏

标签 c dynamic-arrays

我正在编写一个小型雷区游戏。我实现了初始化雷区和部署地雷的功能。现在我必须编写一个函数来检查特定坐标是否包含地雷。如果坐标是空闲的,则状态应从 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/

相关文章:

c - 释放它们后真的应该将指针设置为 `NULL` 吗?

c - 如何将参数传递给 makefile

c++ - 什么是不透明字节串?

c - 如何从c中的命令行参数中获取运算符?

c - 为什么当线程 A 关闭套接字对的末端时,windows select() 并不总是通知线程 B 的 select()?

javascript - 多条件数组动态过滤

c++ - 在 C++ 中将类构造函数分配给带有参数的新构造函数

c++ - 如何将对象指针与动态数组一起使用

c - 在C中将一个数组中的项目附加到另一个数组的末尾

c - 动态分配的二维数组