C:如何检查两个[x] [y]合作是否匹配?

时间:2016-02-21 03:41:25

标签: c if-statement coordinates

我正在尝试与玩家@和两个怪物M建立一个迷宫游戏。

当怪物与玩家处于同一坐标时,它应打印GAME OVER。

但我只为两个怪物中的一个工作。

为什么呢?你是怎么解决的?

void check_and_move(game_object *obj, int xoffset, int yoffset, char *v) {
    game_object *treasure = treasure_position->object;
    game_object *monster = monster_position->object;
    game_object *monster2 = monster_position->object;


    // If player gets eaten by a monster: GAME OVER!
    if(player->x == monster->x) {
        if(player->y == monster->y) {
            printf("GAME OVER!\n");
            free_memory();
        }
    }
    // If player gets eaten by a monster: GAME OVER!
    if(player->x == monster2->x) {
        if(player->y == monster2->y) {
            printf("GAME OVER!\n");
            free_memory();
        }
    }

    // If player coordinate == treasure coordinate: PLAYER WINS!
    if(player->x == treasure->x) {
        if(player->y == treasure->y) {
            printf("You have captured the treasure!\n");
            free_memory();
        }
    }

    // If coordinate is not blocked and can be moved to, object gets moved to it.
    if (isMovable(obj, obj->x + xoffset, obj->y + yoffset)) {
        move_object(obj, obj->x + xoffset, obj->y + yoffset);
    } else {
        *v = 0;
    }
}

2 个答案:

答案 0 :(得分:0)

改变这个:

game_object *monster2 = monster_position->object;

为:

game_object *monster2 = monster2_position->object;

另外,改变这个:

// If player gets eaten by a monster: GAME OVER!
if(player->x == monster->x) {
    if(player->y == monster->y) {
        printf("GAME OVER!\n");
        free_memory();
    }
}

对此:

// If player gets eaten by a monster: GAME OVER!
if ( ((player->x == monster->x) && (player->y == monster->y)) ||
     ((player->x == moster2->x) && (player->y == moster2->y)) )
{
    printf("GAME OVER!\n");
    free_memory();
    return;
}

但实际上,你应该清理这个逻辑。例如,您可以实现一个辅助函数,如:

bool same_position (game_object *o1, game_object *o2)
{
    return (o1->x == o2->x) && (o1->y == o2->yl);
}

然后你可以写这样的东西,这些东西更容易理解:

if (same_position(player, monster) || same-position(player, monster2))

看看玩家是否找到了宝藏也一样。

答案 1 :(得分:0)

你没有从这个功能返回,因此它继续发出信号,不知道该玩家是否被吃掉了。因此,即使比赛结束,我仍然会继续比赛。

如果free_memory()执行了我认为的操作,您应该从中返回,那么在您致电free_memory()后,使用该功能的其余部分计算是一个问题。

首先,所有条件都可以使用if合并为一个&&,用于每对x的{​​{1}}和y协调/ monsterplayer两对。

然后你必须在调用||之后从函数返回。

free_memory()