我正在尝试与玩家@和两个怪物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;
}
}
答案 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
协调/ monster
和player
两对。
然后你必须在调用||
之后从函数返回。
free_memory()