2017-10-20 59 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);