From dd5cab54379b5305b8e076020ac6cf03df641e79 Mon Sep 17 00:00:00 2001 From: sfphoton <schulcz.ferenc@gmail.com> Date: Sat, 5 May 2018 16:13:36 +0200 Subject: [PATCH] Game ending detection works --- src/killer_sokoban/AbstractField.java | 17 +++++++++++++++++ src/killer_sokoban/Crate.java | 22 ++++++++++++---------- src/killer_sokoban/Main.java | 23 +++++++++++++++++++++-- src/killer_sokoban/Moveable.java | 5 +++++ src/killer_sokoban/SimpleField.java | 2 +- testmap1.in | 4 ++++ 6 files changed, 60 insertions(+), 13 deletions(-) diff --git a/src/killer_sokoban/AbstractField.java b/src/killer_sokoban/AbstractField.java index e090fd8..02b8ede 100644 --- a/src/killer_sokoban/AbstractField.java +++ b/src/killer_sokoban/AbstractField.java @@ -6,6 +6,7 @@ public abstract class AbstractField { protected HashMap<Direction, AbstractField> neighbours=new HashMap<Direction, AbstractField>(); + protected boolean isCorner; /**Ez a függvény azt jelzi a mező számára, hogy szeretnének rálépni. * @param toward melyik irányból szeretnének rálépni @@ -43,5 +44,21 @@ public abstract class AbstractField { { view.drawAbstract(); } + + /** + * Ez a függvény sarkot csinál a mzőből. + */ + public void setToCorner() {isCorner = true;} + + /** + * A sarokba betoltunk valamit, így a szomszédjaiból sarok lett. + */ + public void fillCorner() { + if(!isCorner) return; + + for(AbstractField neighbor : neighbours.values()) { + neighbor.setToCorner(); + } + } } diff --git a/src/killer_sokoban/Crate.java b/src/killer_sokoban/Crate.java index 2ae558a..9e97abb 100644 --- a/src/killer_sokoban/Crate.java +++ b/src/killer_sokoban/Crate.java @@ -2,8 +2,7 @@ package killer_sokoban; public class Crate extends Moveable { - - private boolean couldMove=true; + private boolean isOnTarget; @@ -38,17 +37,9 @@ public class Crate extends Moveable { s.turnOn(); } - /** - * Beállítja, hogy a láda eltolható-e. - */ - public void setCouldMove(boolean b) { - couldMove=b; - } - public void printStat() { super.printStat(); - System.out.println("couldMove: " + couldMove); System.out.println("isOnTarget: " + isOnTarget); } @@ -58,4 +49,15 @@ public class Crate extends Moveable { super.shouldDraw(view); view.drawCrate(); } + + /** + * Jelzi a láda számára, hogy sarokba ragadt. + */ + @Override + public void arriveToCorner() { + myField.fillCorner(); + Main.deleteCrate(this); + } + + public boolean couldGameFinish() {return isOnTarget;} } diff --git a/src/killer_sokoban/Main.java b/src/killer_sokoban/Main.java index 7999199..7a3c7a0 100644 --- a/src/killer_sokoban/Main.java +++ b/src/killer_sokoban/Main.java @@ -7,7 +7,6 @@ import java.util.Map.Entry; import javafx.application.Application; import javafx.event.EventHandler; -import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.canvas.Canvas; @@ -15,7 +14,6 @@ import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; import javafx.scene.layout.*; import javafx.scene.paint.Color; -import javafx.scene.paint.Paint; import javafx.scene.text.Font; import javafx.scene.text.Text; import javafx.stage.Stage; @@ -58,6 +56,9 @@ public class Main extends Application { if(i==workers.size()) activeWorker = (Worker)workers.values().toArray()[0]; else activeWorker = (Worker)workers.values().toArray()[i]; + //checking if game should end + checkGameEnded(); + view.update(); } @@ -196,6 +197,17 @@ public class Main extends Application { crates.remove(getKeyByValue(crates, c)); } + private static void checkGameEnded() { + boolean ended = true; + for(Crate c : crates.values()) { + if(!c.couldGameFinish()) ended = false; + } + + if (ended) { + endGame(); + } + } + private static void endGame() { for (Entry<String, Worker> e : workers.entrySet()) @@ -241,6 +253,9 @@ public class Main extends Application { else if (cmd[0].equals("stat")) { stat(cmd[1]); } + else if (cmd[0].equals("setcorner")) { + setCorner(cmd[1]); + } else if (cmd[0].equals("script")) { script(cmd[1]); } @@ -374,6 +389,10 @@ public class Main extends Application { } } + private static void setCorner(String field) { + map.get(field).setToCorner(); + } + private static void script(String file) throws IOException { BufferedReader backup = br; diff --git a/src/killer_sokoban/Moveable.java b/src/killer_sokoban/Moveable.java index be7c9ec..80accfe 100644 --- a/src/killer_sokoban/Moveable.java +++ b/src/killer_sokoban/Moveable.java @@ -85,4 +85,9 @@ public abstract class Moveable { { } + /** + * Azt jelzi a Moveable számára, hogy sarokba érkezett. Szándékosan üres, a láda felüüldefiniálja. + */ + public void arriveToCorner() {} + } diff --git a/src/killer_sokoban/SimpleField.java b/src/killer_sokoban/SimpleField.java index 045b7de..d07d332 100644 --- a/src/killer_sokoban/SimpleField.java +++ b/src/killer_sokoban/SimpleField.java @@ -26,7 +26,7 @@ public class SimpleField extends AbstractField { { m.move(this); //Fontos a sorrend, mert ez a függvény eldobatja magát m mezőjével. myMoveable=m; - //determineBlocked(toward); //A szkeletonban maradjon kikommentelve... sok szomszédot létre kellene hozni a helyes működéshez + if (isCorner) m.arriveToCorner(); } diff --git a/testmap1.in b/testmap1.in index 0dbe966..dde580e 100644 --- a/testmap1.in +++ b/testmap1.in @@ -9,6 +9,10 @@ wmmmwmmtmw wmmmwmmtmw wmmmmmmmmw wwwwwwwwww +setcorner f_1_1 +setcorner f_1_8 +setcorner f_8_1 +setcorner f_8_8 setswitch f_3_4 f_1_4 worker w1 3 f_1_1 crate c1 f_1_3 -- GitLab