You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

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 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 og ShipType

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.


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.

 

IBattleshipGame

For å 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 klassen 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:

"<size>,<shiptype><x><y><width><height>, ... , <shiptype><x><y><width><height>"

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

"10,H0214,U3656"


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

..X...........X...X......X.......XX.........X........XX.X..X......X.....X..X........................
H32,U13,
H20,U63,
...XXX.....XXXXX.......XX..................X...X...........................X...........X............
H32,U13,
H20,U63,

Den første 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 og fem viser hvilke skiptyper som finnes på brettet, separert med komma. Linje tre og seks viser hvilke skip som finnes på brettet. Et skip tilhører den skiptypen med samme tegn (char). 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 og y. 

 

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.

battleship.emfs
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;
  • No labels