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