玩家与敌人发生冲突时结束游戏

时间:2019-11-26 01:38:21

标签: java javafx java-8

我正在创建自己的第一个JavaFX游戏,并且正在努力实现某种方法。我有一个玩家,一个敌人和一个班级。当玩家和敌人在同一单元格上行走时,游戏结束。玩家和敌人都有x和y坐标。

要实现这一点,我想循环查看敌人所在的单元格,然后比较x和y坐标以判断玩家是否在与敌人一起的单元格中。

如果有更好的方法可以做到的话,我们将不胜感激。谢谢:)

1 个答案:

答案 0 :(得分:0)

用于实现游戏中位置的相当标准的模型是,所有位置变化都要经历实现您的世界(或棋盘或地图)的任何类。然后,它会更新商品的位置,并记录从位置到该位置实体的地图。

interface Entity {
    void setPosition(Position position);
    Position getPosition();
    boolean isEnemy();
}

class World {
    private final Map<Position,Set<Entity>> entities = new HashMap<>();

    public void move(Entity entity, Position position) {
        entitySetAtPosition(entity.getPosition()).remove(entity);
        entity.setPosition(position);
        entitySetAtPosition(position).add(entity);
    }

    private Set<Entity> entitySetAtPosition(Position position) {
        return entities.computeIfAbsent(position, () -> new HashSet<>());
    }

    public Stream<Entity> entitiesAtPosition(Position position) {
        return entitySetAtPosition(position).stream();
    }
}

检查玩家位置是否有敌人world.entitiesAtPosition(player.getPosition).anyMatch(Entity::isEnemy)