0
我正在Java中实现炸弹人克隆。它的地图有17 * 13瓦的比例尺。现在我将游戏地图存储在ArrayList
中。显然这是徒劳的,因为游戏机制只提供离散移动(右,左,上,下)。炸弹也可以只有离散的位置。所以在ArrayList
我必须在处理碰撞或火灾时通过整个列表查找四个相邻的瓦片。那么在Java中存储这些地图的最佳做法是什么?存储2D游戏地图的最佳方式
我正在Java中实现炸弹人克隆。它的地图有17 * 13瓦的比例尺。现在我将游戏地图存储在ArrayList
中。显然这是徒劳的,因为游戏机制只提供离散移动(右,左,上,下)。炸弹也可以只有离散的位置。所以在ArrayList
我必须在处理碰撞或火灾时通过整个列表查找四个相邻的瓦片。那么在Java中存储这些地图的最佳做法是什么?存储2D游戏地图的最佳方式
有很多方法可以对此进行建模。这里有一个建议,我经常用于类似的问题:
enum Direction {
NORTH, SOUTH, EAST, WEST;
}
class Position {
private final int x;
private final int y;
public static Stream<Position> getAllPositions();
public Stream<Position> getNeighbours();
public Optional<Position> positionInDirection(Direction direction);
// make sure you implement equals and hashCode
}
class Map {
private final Map<Position, Tile> tiles = new HashMap<>();
public Map() {
Position.getAllPositions().forEach(pos -> tiles.put(pos, new Tile());
}
public Tile getTile(Position position) {
return tiles.get(position);
}
}
这提供了很多有用的封装。例如,Position
类是唯一需要了解地图和边缘大小的类。
我们看看相邻的位置有一个炸弹(例如),你可以使用:
position.getNeighbours().map(map::getTile).anyMatch(Tile::hasBomb);
请随意编辑这个问题,如果有任何语法错误。 – Russiancold