I denne oppgaven skal Sokoban utvides med funksjoner for raskere flytting av spilleren.

Sokoban skal utvides med to funksjoner, som begge gjør det raskere å flytte spilleren. ISokoban-grensesnittet har derfor blitt utvidet med følgende metoder:

  • String movePlayerTo(int x, int y) - flytter spilleren til cellen (x,y) ved hjelp av en sekvens med flytt (altså ikke dytt), og returnerer en String som representerer flyttene. Flyttene representeres med tegnene l, r, u, ogfor i indikere retning, altså l for left/venstre, r for right/høyre, u for up/opp og d for down/ned. Dersom et kall til metoden gjør at spilleren flytter til venstre og så opp, så skal altså metoden returnere "lu". Hvis flyttet ikke er lovlig/mulig, så skal metoden returnere null.
  • String moveBox(int x, int y, ind dy, int dy) - flytter boksen i cellen (x,y) i retning (dx, dy) ved hjelp av en sekvens med flytt, for om nødvendig å få spilleren i rett posisjon, og så et dytt for å flytte boksen. Metoden skal returne en streng som representerer flyttene og dyttet. Flyttene representeres som beskrevet over, mens det siste dyttet er tilsvarende store bokstav, altså L, R, U, eller D. Som over så skal metoden returnere null, dersom sekvensen ikke er lovlig/mulig.

movePlayerTo-metoden er nok vanskeligst, fordi en må prøve seg frem med ulike sekvenser av flytt for å se om en kan nå frem til ønsker rute. Det kan være lurt å kunne lagre litt hjelpeinformasjon i en rute, for å gjøre det enklere. moveBox-metoden er enklere, og nøkkelen er å innse at for å kunne dytte boksen i den angitt retningen, så må spilleren først flytte seg til riktig (motsatt) side av boksen, før boksen dyttes. Og flytting av spilleren er jo nettopp det movePlayerTo gjør!

For hvert spill har vi 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.

Nedlastingspakke

emfs
/games/ #java #package $repo="@github.com:hallvard/javafx/games/src/games/"
	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;
	IUndoable.java				@ git@github.com:hallvard/javafx/games/src/games/IUndoable.java;
	IUpdateable.java			@ git@github.com:hallvard/javafx/games/src/games/IUpdateable.java;
	PersistableController.java	@ git@github.com:hallvard/javafx/games/src/games/PersistableController.java;
	UndoableController.java		@ git@github.com:hallvard/javafx/games/src/games/UndoableController.java;
	Persistable.fxml			@ git@github.com:hallvard/javafx/games/src/games/Persistable.fxml;
	Undoable.fxml				@ git@github.com:hallvard/javafx/games/src/games/Undoable.fxml;
	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;
		;
	sokoban/ #java #package
		sokoban3/ #java #package
			ISokoban.java	@ git@github.com:hallvard/javafx/games/src/games/sokoban/sokoban3/ISokoban.java;
			SokobanFX.java	@ git@github.com:hallvard/javafx/games/src/games/sokoban/sokoban3/SokobanFX.java;
			SokobanFX.fxml	@ git@github.com:hallvard/javafx/games/src/games/sokoban/sokoban3/SokobanFX.fxml;
			;
		box_on_target16x16.png	@ git@github.com:hallvard/javafx/games/src/games/sokoban/box_on_target16x16.png;
		box16x16.png			@ git@github.com:hallvard/javafx/games/src/games/sokoban/box16x16.png;
		empty16x16.png			@ git@github.com:hallvard/javafx/games/src/games/sokoban/empty16x16.png;
		player_on_target16x16.png	@ git@github.com:hallvard/javafx/games/src/games/sokoban/player_on_target16x16.png;
		player16x16.png			@ git@github.com:hallvard/javafx/games/src/games/sokoban/player16x16.png;
		target16x16.png			@ git@github.com:hallvard/javafx/games/src/games/sokoban/target16x16.png;
		wall16x16.png			@ git@github.com:hallvard/javafx/games/src/games/sokoban/wall16x16.png;
  • No labels