Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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

  1. implementere det nødvendige grensesnittet og
  2. 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
titlebattleship.emfs
collapsetrue
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.