我正在用Java实现炸弹人克隆。它的地图有17 * 13个瓷砖。现在我将游戏地图存储在ArrayList
中。显然它没有效果,因为游戏机制只提供离散的移动(向右,向左,向上,向下)。炸弹也只能有离散的位置。所以使用ArrayList
我必须在处理碰撞或火力生成时通过整个列表查找四个相邻的图块。那么用Java存储这些地图的最佳实践是什么呢。
答案 0 :(得分:2)
您可以通过多种方式对此进行建模。这是一个我经常用于类似问题的建议:
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);