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 en endring 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.

 

Ship

...

Klassen Ship skal ha følgende felt:

  • ShipType shipType – skiptypen til dette skipet.
  • int x – x-koordinaten til den øverste, venstre cellen som hører til skipet.
  • int y – y-koordinaten til den øverste, venstre cellen som hører til skipet.

Implementer de getter- og setter-metoden du mener du behøver.

ShipType

Klassen ShipType skal ha følgende felt:

  • char type – tegnet som representerer skiptypen.
  • int width – bredden til denne skiptypen.
  • int height – høyden til denne skiptypen.

Implementer de getter- og setter-metoden du mener du behøver.

...

Hvilke celler på brettet som tilhører skip defineres altså av plasseringen til skipene, kombinert med størrelsen til skipene, som er definert av skiptypen.


 

...

Filformat

For å hente og lagre et slagskipspill ønsker man selvfølgelig å lagre begge brettene. Derfor innfører vi en klasse som har oversikt over begge brettene. Denne klassen skal implementere grensesnittet IBattleshipGame, som arver fra IPersistable-grensesnittet. Det betyr at det er denne klassen som vil ha load- og save-metodene.

 

Filformat

For å opprette et helt nytt spill bruker vi kun en streng på følgende format:

et spill trenger vi et felles format. Formatet vi skal bruke er som følger:

"<size>
<hits board1>
<shiptype><x><y><width><height>, ... , <shiptype><x><y><width><height>
<hits board2>
"<size>,<shiptype><x><y><width><height>, ... , <shiptype><x><y><width><height>"

Et eksempel på et 10 x 10 stort brett med to skipstyper og to skip på hvert brett:

"10,H0214,U3656"

For å lagre, derimot, er filformatet litt mer avansert. Her er et eksempel:

Code Block
themeEclipse
languagenone
titleEksempel lagringsformat
linenumberstrue
10
..X...........X...X......X.......XX.........X........XX.X..X......X.....X..X........................

...


H32,U13

...

 // Dette er skipstyper
H20,U63

...

 // Dette er skip
...XXX.....XXXXX.......XX..................X...X...........................X...........X............

...


H32,U13

...

 // Dette er skipstyper
H20,U63

...

 // Dette er skip

Den første linjen er størrelsen på brettet. Et brett er alltid kvadratisk.

Den andre og femte og fjerde linja er hits-strengen til henholdsvis brett 1 og 2. Den representerer den enkle lista over celler. X betyr at cellen har blitt skutt, punktum betyr at den ikke har det.

Linje to tre og fem seks viser hvilke skiptyper  skiptyper som finnes på brettet, separert med komma. Det første tallet i hvert skip er bredden på skipstypen, det andre tallet er høyden på skipet.

Linje tre fire og seks viser hvilke skip som finnes på brettet, adskilt med komma. Et skip tilhører den skiptypen skipstypen med samme tegn bokstav (char). Skipstypen som blir benyttet av et skip må være definert på linjen over. Det første tallet i skipet er x-verdien til ruten øverst til venstre i skipet, det andre tallet er y-verdien til ruten øverst til venstre i skipet. 

Merk: På Skiptype På skiptype-linjene er hver type definert med tegn, bredde og høyde. På skip-linjene er hvert skip definert med tegn til tilhørende skiptype, 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

...

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;		
		;	
	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.