diff --git a/src/killer_sokoban/Main.java b/src/killer_sokoban/Main.java index e48d9cb4e3516bfd7fdc1ced0094e79dbc7528d8..925aa9cedc507330f33690f5d17b7673641d2bdf 100644 --- a/src/killer_sokoban/Main.java +++ b/src/killer_sokoban/Main.java @@ -1,5 +1,8 @@ package killer_sokoban; import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; @@ -15,11 +18,13 @@ public class Main { 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 boolean gameRunning; + //A beolvasáshoz kellenek. Azért tettem ide őket, hogy a parseMap függvény is lássa őket. + private static InputStreamReader isr = new InputStreamReader(System.in); + private static BufferedReader br = new BufferedReader(isr); + public static void main(String[] args) throws IOException { - System.out.println("Üdv a protóban! Kilépés EOF-fal\n\n"); + System.out.println("Üdv a protóban! Kilépés EOF-fal"); - InputStreamReader isr = new InputStreamReader(System.in); - BufferedReader br = new BufferedReader(isr); while (true) { String line; @@ -68,37 +73,50 @@ public class Main { } gameRunning=false; } - private static void runCommand(String cmdline) + private static void runCommand(String cmdline) throws NumberFormatException, IOException { + //Ha üres sort kaptunk, ignoráljuk + //Emiatt áttekinthetőbb bemeneteket lehet csinálni + if (cmdline.equals("")) return; + + //Parancs részekgre tördelése String cmd[]; cmd = cmdline.split(" "); //Parancs értelmezés, és a szükséges függvény meghívása - if (cmd[0].equals("parseMap")) { + if (cmd[0].equals("parsemap")) { parseMap(Integer.parseInt(cmd[1]), Integer.parseInt(cmd[2])); + System.out.println("OK"); } else if (cmd[0].equals("worker")) { spawnWorker(cmd[1],Double.parseDouble(cmd[2]),cmd[3]); + System.out.println("OK"); } else if (cmd[0].equals("crate")) { spawnCrate(cmd[1],cmd[2]); + System.out.println("OK"); } else if (cmd[0].equals("setswitch")) { setSwitch(cmd[1], cmd[2]); + System.out.println("OK"); } else if (cmd[0].equals("putfluid")) { putFluid(cmd[1], cmd[2].charAt(0)); + System.out.println("OK"); } else if (cmd[0].equals("step")) { step(cmd[1],cmd[2]); + System.out.println("OK"); } else if (cmd[0].equals("stat")) { stat(cmd[1]); + System.out.println("OK"); } else if (cmd[0].equals("script")) { - stat(cmd[1]); + script(cmd[1]); + System.out.println("OK"); } else { @@ -107,9 +125,66 @@ public class Main { } - private static void parseMap(int parseInt, int parseInt2) { - // TODO implement - throw new UnsupportedOperationException("Not implemented yet"); + private static void parseMap(int lines, int columns) throws IOException { + //Tisztítás + map.clear(); + workers.clear(); + crates.clear(); + + //Feldolgozás + //Mezők létrehozása + for (int i=0; i<lines; i++) + { + String line= br.readLine(); + for (int j=0; j<columns; j++) + { + String name="f_"+i+"_"+j; //név generálása + switch (line.charAt(j)) { + case 'w' : + map.put(name, new Wall()); + break; + case 'm' : + map.put(name, new SimpleField()); + break; + case 'h' : + map.put(name, new Hole()); + break; + case 'k' : + map.put(name, new SwitchField()); + break; + case 's' : + map.put(name, new SwitchableHole()); + break; + case 't' : + map.put(name, new TargetField()); + break; + } + } + } + + + //Szomszédságok beállítása + //Minden mezőn végigmegyünk. Ha létezik a megfelelő irányú szomszédja, beállítjuk. + for (int i=0; i<lines; i++) + { + for (int j=0; j<columns; j++) + { + String name="f_"+i+"_"+j; //név generálása + String nameUp="f_"+(i-1)+"_"+j; //név generálása + String nameRight="f_"+i+"_"+(j+1); //név generálása + String nameDown="f_"+(i+1)+"_"+j; //név generálása + String nameLeft="f_"+i+"_"+(j-1); //név generálása + + if (map.containsKey(nameUp)) + map.get(name).setNeighbour(Direction.UP, map.get(nameUp)); + if (map.containsKey(nameRight)) + map.get(name).setNeighbour(Direction.RIGHT, map.get(nameRight)); + if (map.containsKey(nameDown)) + map.get(name).setNeighbour(Direction.DOWN, map.get(nameDown)); + if (map.containsKey(nameLeft)) + map.get(name).setNeighbour(Direction.LEFT, map.get(nameLeft)); + } + } } private static void spawnWorker(String name, double force, String field) @@ -166,10 +241,25 @@ public class Main { } } - private static void script(String file) + private static void script(String file) throws IOException { - // TODO implement - throw new UnsupportedOperationException("Not implemented yet"); + //Maybe this works... + File scriptFile=new File(file); + FileInputStream fis=new FileInputStream(scriptFile); + InputStreamReader isr = new InputStreamReader(fis); + BufferedReader br = new BufferedReader(isr); + + while (true) { + String line; + line = br.readLine(); + + if (line == null) break; + + runCommand(line); + } + + br.close(); + } //code copied from StackOverFlow