diff --git a/src/killer_sokoban/Main.java b/src/killer_sokoban/Main.java index 7a3c7a0b4192c2e1a65c607849d8b7df2f33a365..d50aa45d5b102752e6b72b0e08889bce3df57bd2 100644 --- a/src/killer_sokoban/Main.java +++ b/src/killer_sokoban/Main.java @@ -46,15 +46,17 @@ public class Main extends Application { } //swapping active worker - boolean activeFound = false; - int i; - for(i=0; i<workers.size() && !activeFound; i++) { - if(workers.values().toArray()[i] == activeWorker) { - activeFound = true; + if (aliveWorkers.size() != 0) { + boolean activeFound = false; + int i; + for(i=0; i<aliveWorkers.size() && !activeFound; i++) { + if(aliveWorkers.values().toArray()[i] == activeWorker) { + activeFound = true; + } } + if(i==aliveWorkers.size()) activeWorker = (Worker)aliveWorkers.values().toArray()[0]; + else activeWorker = (Worker)aliveWorkers.values().toArray()[i]; } - if(i==workers.size()) activeWorker = (Worker)workers.values().toArray()[0]; - else activeWorker = (Worker)workers.values().toArray()[i]; //checking if game should end checkGameEnded(); @@ -68,6 +70,8 @@ public class Main extends Application { private static HashMap<String, Worker> workers = new HashMap<>(); //a munkások private static HashMap<String, Crate> crates = new HashMap<>(); //a ládák - azért szedtem így külön mindent, hogy a játék vége detektálásánál végig lehessen kérdezgetni csak a ládákat - comment by SF + private static HashMap<String, Worker> aliveWorkers = new HashMap<>(); + private static Worker activeWorker; private static boolean gameRunning; @@ -158,20 +162,9 @@ public class Main extends Application { af.shouldDraw(view); } public static void main(String[] args) throws IOException { - launch(args); - -// while (true) { -// String line; -// line = br.readLine(); -// -// if (line == null) break; -// -// runCommand(line); -// } } - public static String getFieldName(AbstractField field) { return getKeyByValue(map, field); @@ -189,7 +182,7 @@ public class Main extends Application { public static void deleteWorker(Worker w) { - workers.remove(getKeyByValue(workers, w)); + aliveWorkers.remove(getKeyByValue(workers, w)); } public static void deleteCrate(Crate c) @@ -198,6 +191,11 @@ public class Main extends Application { } private static void checkGameEnded() { + if (aliveWorkers.size() == 0) { + endGame(); + return; + } + boolean ended = true; for(Crate c : crates.values()) { if(!c.couldGameFinish()) ended = false; @@ -208,12 +206,7 @@ public class Main extends Application { } } - private static void endGame() - { - for (Entry<String, Worker> e : workers.entrySet()) - { - System.out.println(e.getKey() + ": " + e.getValue()); - } + private static void endGame() { gameRunning=false; } @@ -335,6 +328,7 @@ public class Main extends Application { { Worker w=new Worker(force); workers.put(name, w); + aliveWorkers.put(name, w); AbstractField f=map.get(field); f.accept(Direction.RIGHT, w, w); } diff --git a/src/killer_sokoban/Worker.java b/src/killer_sokoban/Worker.java index d0ebb1d69120435d9e7171b06bc8f765039161bc..30dc1d8fd63c6c426422c3a2781e1c85230d61fe 100644 --- a/src/killer_sokoban/Worker.java +++ b/src/killer_sokoban/Worker.java @@ -75,6 +75,7 @@ public class Worker extends Moveable { public void kill() { force=0; alive=false; + Main.deleteWorker(this); super.kill(); }