Fordi det gir lite mening å kunne angre i Slagskip-spillet (man kan skyte og angre helt til man vinner, uten at motstanderen kan gjøre noe med det) har vi laget en litt annen oppgave for dette spillet. I stedet for å implementere undo/redo, skal man kun implementere støtte for lagring og henting av spill. Men vi innfører noen endringer i spillet: Vi innfører klassene Ship og ShipType. Filformatet som brukes for lagring skal basere seg på disse. Se mer under avsnittet Filformat. Det kan lønne seg å lese hele oppgaven før du starter.
Ship
Klassen Ship skal ha følgende felt:
...
Implementer de getter- og setter-metoden du mener du behøver.
ShipType
Klassen ShipType skal ha følgende felt:
...
Hvilke celler på brettet som tilhører skip defineres altså av plasseringen til skipene, kombinert med størrelsen til skipene, som igjen er definert av skiptypen.
Filformat
For å hente og lagre et spill trenger vi et felles format. Formatet vi skal bruke er som følger:
...
Merk: På Skiptype-linjene er hver type definert med tegn, bredde og høyde. På skip-linjene er hvert skip definert med tegn, x-koordinat og y-koordinat. Selv om formatene ser like ut betyr de altså forskjellige ting!
IBattleshipGame (Frivillig)
For å lagre et slagskipspill ønsker man selvfølgelig å lagre begge brettene. Derfor trenger vi en klasse som har oversikt over begge brettene (Som f.eks BattleshipProgram). Vi har laget en JavaFX-app som trenger at denne klassen implementerer grensesnittet IBattleshipGame, som arver fra IPersistable-grensesnittet (Begge grensesnittene får man i nedlastningspakken nedenfor). Det betyr at det er denne klassen som må ha load- og save-metodene.
Nedlastingspakke for oppgaven
Vi har laget en "nedlastningspakke" som gjør det lett å importere de nødvendige filene med Digital Compendium-tillegget. Disse finner du under. Når emfs-pakken er importert så må du
- implementere det nødvendige grensesnittet og
- legge navnet på din spill-klasse inn i fxml-fila for app-en (se instruksjoner i fila).
Så kan du starte app-en ved å høyreklikke på java-fila med samme navn som fxml-fila (<spillnavn>FX.java) og velge Run As->Java Application.
Code Block | ||||
---|---|---|---|---|
| ||||
emfs
/games/ #java #package
FxmlApp.java @ git@github.com:hallvard/javafx/games/src/games/FxmlApp.java;
FxmlBuilderFactory.java @ git@github.com:hallvard/javafx/games/src/games/FxmlBuilderFactory.java;
FxmlGame.java @ git@github.com:hallvard/javafx/games/src/games/FxmlGame.java;
IPersistable.java @ git@github.com:hallvard/javafx/games/src/games/IPersistable.java;
imagegrid/ #java #package
ImageGrid.java @ git@github.com:hallvard/javafx/games/src/games/imagegrid/ImageGrid.java;
ImageGridGame.java @ git@github.com:hallvard/javafx/games/src/games/imagegrid/ImageGridGame.java;
ObservableGrid.java @ git@github.com:hallvard/javafx/games/src/games/imagegrid/ObservableGrid.java;
GridListener.java @ git@github.com:hallvard/javafx/games/src/games/imagegrid/GridListener.java;
;
battleship/ #java #package
hit64x64.png @ git@github.com:hallvard/javafx/games/src/games/battleship/hit64x64.png;
miss64x64.png @ git@github.com:hallvard/javafx/games/src/games/battleship/miss64x64.png;
ocean64x64.png @ git@github.com:hallvard/javafx/games/src/games/battleship/ocean64x64.png;
battleship2/
IBattleship.java @ git@github.com:hallvard/javafx/games/src/games/battleship/battleship2/IBattleship.java;
IBattleshipGame.java @ git@github.com:hallvard/javafx/games/src/games/battleship/battleship2/IBattleshipGame.java;
IBattleshipPersistence @ git@github.com:hallvard/javafx/games/src/games/battleship/battleship2/IBattleshipPersistence.java
BattleshipFX.java @ git@github.com:hallvard/javafx/games/src/games/battleship/battleship2/BattleshipFX.java;
BattleshipFX.fxml @ git@github.com:hallvard/javafx/games/src/games/battleship/battleship2/BattleshipFX.fxml; |
For å lagre et slagskipspill ønsker man selvfølgelig å lagre begge brettene. Derfor innfører vi en klasse som har oversikt over begge brettene.