2017-10-20 12 views
0

私はBombermanクローンをJavaで実装しています。地図の縮尺は17×13タイルです。今、ゲームマップをArrayListに保存しています。明らかに、ゲームの仕組みは離散的な動き(右、左、上、下)のみを提供するので、非生産的です。爆弾は離散的な位置しか持てない。したがって、ArrayListでは、衝突や火災の発生を処理しながら、リスト全体を通して4つの隣接するタイルを検索する必要があります。だから、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); 
関連する問題