2017-10-20 58 views
0

我正在Java中實現炸彈人克隆。它的地圖有17 * 13瓦的比例尺。現在我將遊戲地圖存儲在ArrayList中。顯然這是徒勞的,因爲遊戲機制只提供離散移動(右,左,上,下)。炸彈也可以只有離散的位置。所以在ArrayList我必須在處理碰撞或火災時通過整個列表查找四個相鄰的瓦片。那麼在Java中存儲這些地圖的最佳做法是什麼?存儲2D遊戲地圖的最佳方式

+0

請隨意編輯這個問題,如果有任何語法錯誤。 – Russiancold

回答

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);