2017-10-20 19 views
0

J'implémente le clone de Bomberman en Java. Sa carte a une échelle de 17 * 13 tuiles. Maintenant, je stocke la carte de jeu dans le ArrayList. Évidemment, il est improductif puisque la mécanique du jeu ne fournit que des mouvements discrets (droite, gauche, haut, bas). Les bombes peuvent avoir seulement une position discrète aussi. Donc, avec le ArrayList, je dois chercher quatre tuiles adjacentes dans la liste entière pendant le traitement des collisions ou des incendies. Alors quelles sont les meilleures pratiques pour stocker de telles cartes en Java.La meilleure façon de stocker la carte de jeu 2D

+0

S'il vous plaît, ne hésitez pas à modifier cette question, s'il y a des erreurs de grammaire. – Russiancold

Répondre

2

Il y a de nombreuses façons de modéliser ceci. Voici une suggestion que j'ai souvent utilisée pour des problèmes similaires:

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

Ceci fournit beaucoup d'encapsulation utile. Par exemple, la classe Position est la seule à connaître la taille de la carte et des bords.

Maintenant, pour voir si une position adjacente a une bombe (par exemple), vous pouvez utiliser:

position.getNeighbours().map(map::getTile).anyMatch(Tile::hasBomb);