Nous allons ajouter la possibilité de créer une carte vierge d’une certaine taille. Ajoutez les lignes suivantes dans la classe EditorView
.
MenuItem newItem = new MenuItem("New map");
// New map
newItem.setOnAction(e -> {
Form form = new Form(stage, "Size of the map : width x height");
String[] parts = form.getText().replaceAll("\\s+","").split("x");
if (parts.length != 2)
return;
try {
int x = Integer.parseInt(parts[0]);
int y = Integer.parseInt(parts[1]);
this.grid = gridRepoString.create(x, y);
updateGrid(grid);
} catch (NumberFormatException numberFormatException) {
return;
}
});
1) Ajoutez la ligne newItem, new SeparatorMenuItem(),
dans fileMenu.getItems().addAll(
`
2) Implémentez la méthode public Grid create(int width, int height) { }
dans la classe GridRepoString
et testez votre code. Cette méthode doit créer une nouvelle carte et la remplir avec Entity.GROUND
.
3) Pour rendre la manipulation des cartes plus faciles, ajoutez les lignes suivantes dans la méthode createTile
de la classe GridView
.
ColorAdjust colorAdjust = new ColorAdjust();
colorAdjust.setBrightness(-0.2);
tile.setOnMouseEntered(e -> {
if (e.isShiftDown()) {
update(tile, i, j);
}
tile.setEffect(colorAdjust);
});
tile.setOnMouseExited(e -> {
tile.setEffect(null);
});
Nous allons faire évoluer notre classe gridRepoStringRLE
pour qu’elle puisse être utilisée pour lire et écrire dans un fichier. L’objectif est que cette classe implémente une deuxième interface GridRepoIO
définie ci-dessous.
public interface GridRepoIO {
Grid load(Reader in) throws IOException;
void export(Grid grid, Writer ou) throws IOException;
}
1) Modifiez la déclaration de la variable gridRepoStringRLE
dans la classe EditorView
pour que son type soit le suivant :
GridRepoStringRLE gridRepoStringRLE = new GridRepoStringRLE();
2) Ajoutez les méthodes nécessaires dans la classe gridRepoStringRLE
. Faites en sorte de factoriser les traitements entre les différentes méthodes load
et export
.
3) Ajoutez les lignes suivantes dans la classe EditorView
. Ajoutez les déclarations nécessaires et faites en sorte que le menu soit mis à jour. Testez votre application.
// Load from file
loadItemF.setOnAction(e -> {
File file = fileChooser.showOpenDialog(stage);
if (file != null) {
// Chargement depuis un fichier (avec compression)
}
});
// Export to file
exportItemF.setOnAction(e -> {
File file = fileChooser.showSaveDialog(stage);
if (file != null) {
// Sauvegarde dans un fichier (avec compression)
}
});