diff --git a/src/killer_sokoban/AbstractField.java b/src/killer_sokoban/AbstractField.java index 075646b2c6609e10dd205ccc27c5d9642d17f794..e090fd856d9bf3cb7ea648efa101f928ad56244d 100644 --- a/src/killer_sokoban/AbstractField.java +++ b/src/killer_sokoban/AbstractField.java @@ -38,5 +38,10 @@ public abstract class AbstractField { System.out.println("neighborDown: " + Main.getFieldName(neighbours.get(Direction.DOWN))); System.out.println("neighborLeft: " + Main.getFieldName(neighbours.get(Direction.LEFT))); } + + public void shouldDraw(View view) + { + view.drawAbstract(); + } } diff --git a/src/killer_sokoban/Crate.java b/src/killer_sokoban/Crate.java index 070518b14d9c58178a5a5fedabda02c231c531ca..7e0e12e47e0e1e8a9740acb3561f85abe3614f7b 100644 --- a/src/killer_sokoban/Crate.java +++ b/src/killer_sokoban/Crate.java @@ -50,5 +50,11 @@ public class Crate extends Moveable { System.out.println("couldMove: " + couldMove); System.out.println("isOnTarget: " + isOnTarget); } - + + @Override + public void shouldDraw(View view) + { + super.shouldDraw(view); + view.drawCrate(); + } } diff --git a/src/killer_sokoban/Hole.java b/src/killer_sokoban/Hole.java index 034c93e6efcef69773ba77f796e6bccb328ddd37..107fd82da4900baf1282b942b3f514008865d2f7 100644 --- a/src/killer_sokoban/Hole.java +++ b/src/killer_sokoban/Hole.java @@ -18,5 +18,12 @@ public class Hole extends SimpleField { return true; } + + @Override + public void shouldDraw(View view) + { + view.drawHole(); + super.shouldDraw(view); + } } diff --git a/src/killer_sokoban/Main.java b/src/killer_sokoban/Main.java index aebe80eb23b309c46e7912745e685630394e82ce..dffa482f7f61db3152728358719db2f18fbe82fa 100644 --- a/src/killer_sokoban/Main.java +++ b/src/killer_sokoban/Main.java @@ -4,7 +4,14 @@ import java.io.*; import java.util.*; import java.util.Map.Entry; -public class Main { +import javafx.application.Application; +import javafx.scene.Group; +import javafx.scene.Scene; +import javafx.scene.canvas.Canvas; +import javafx.stage.Stage; + + +public class Main extends Application { private static HashMap<String, AbstractField> map = new HashMap<>(); //itt tároljuk a pályán lévő mezőket név (pl. "f_2_4") és referencia szerint private static HashMap<String, Worker> workers = new HashMap<>(); //a munkások @@ -15,16 +22,45 @@ public class Main { private static InputStreamReader isr = new InputStreamReader(System.in); private static BufferedReader br = new BufferedReader(isr); + private static View view=new View(); + + @Override + public void start(Stage primaryStage) throws Exception { + // Ablak felépítése + primaryStage.setTitle("My super killer sokoban"); + Group root = new Group(); + Canvas canvas = new Canvas(300, 250); + view.setCanvas(canvas); + root.getChildren().add(canvas); + primaryStage.setScene(new Scene(root)); + primaryStage.show(); + + //Itt kellene betölteni a pályát + runCommand("script Teszteset25.in"); + + //Ez végzi a rajzolást + view.update(); + + //Egyéb adminisztratív teendők.. + gameRunning=true; + } + public static void drawRequiredFor(int y, int x) + { + AbstractField af=map.get("f_"+y+"_"+x); + af.shouldDraw(view); + } public static void main(String[] args) throws IOException { - while (true) { - String line; - line = br.readLine(); - - if (line == null) break; - - runCommand(line); - } + launch(args); + +// while (true) { +// String line; +// line = br.readLine(); +// +// if (line == null) break; +// +// runCommand(line); +// } } @@ -163,6 +199,9 @@ public class Main { map.get(name).setNeighbour(Direction.LEFT, map.get(nameLeft)); } } + + //View újrainicializálása + view.init(lines, columns); } private static void spawnWorker(String name, double force, String field) diff --git a/src/killer_sokoban/Moveable.java b/src/killer_sokoban/Moveable.java index 4a0fc35d7294f918d6916f74187cb77e51b138d5..5ba820f95773dcfb2e2417d008664a51ac8ec3e2 100644 --- a/src/killer_sokoban/Moveable.java +++ b/src/killer_sokoban/Moveable.java @@ -81,4 +81,9 @@ public abstract class Moveable { System.out.println("myField: " + Main.getFieldName(myField) ); } + + public void shouldDraw(View view) + { + } + } diff --git a/src/killer_sokoban/SimpleField.java b/src/killer_sokoban/SimpleField.java index 39163f218a6de0084ad681172cdc18fa73b25386..045b7de1fda9407bfd7c4d2d2c48d10073216bd5 100644 --- a/src/killer_sokoban/SimpleField.java +++ b/src/killer_sokoban/SimpleField.java @@ -98,9 +98,16 @@ public class SimpleField extends AbstractField { */ public void dropMoveable() { - myMoveable=null; - + } + + @Override + public void shouldDraw(View view) + { + view.drawSimpleField(); + fluid.shouldDraw(view); + if (myMoveable!=null) myMoveable.shouldDraw(view); + super.shouldDraw(view); } protected class Fluid { @@ -119,6 +126,10 @@ public class SimpleField extends AbstractField { return "no fluid"; } + public void shouldDraw(View view) + { + } + } protected class Oil extends Fluid { @@ -129,6 +140,12 @@ public class SimpleField extends AbstractField { public String toString() { return "oil"; } + @Override + public void shouldDraw(View view) + { + super.shouldDraw(view); + view.drawOil(); + } } protected class Honey extends Fluid { @@ -139,6 +156,12 @@ public class SimpleField extends AbstractField { public String toString() { return "honey"; } + @Override + public void shouldDraw(View view) + { + super.shouldDraw(view); + view.drawHoney(); + } } public void putOil() { diff --git a/src/killer_sokoban/SwitchField.java b/src/killer_sokoban/SwitchField.java index 291a8ecb1c627cd9a956fde69f4fbb6c80b44b01..03ef598486d12a6771f1f54d4656586a1245adc8 100644 --- a/src/killer_sokoban/SwitchField.java +++ b/src/killer_sokoban/SwitchField.java @@ -68,5 +68,12 @@ public class SwitchField extends SimpleField { } + + @Override + public void shouldDraw(View view) + { + view.drawSwitchField(); + super.shouldDraw(view); + } } diff --git a/src/killer_sokoban/SwitchableHole.java b/src/killer_sokoban/SwitchableHole.java index a5d066796c6ddb1b1ae576e1e6e4205458a9c339..347914a21541c9982f03f955c43fe5c01afc2057 100644 --- a/src/killer_sokoban/SwitchableHole.java +++ b/src/killer_sokoban/SwitchableHole.java @@ -59,5 +59,12 @@ public class SwitchableHole extends SimpleField { System.out.println("opened: " + opened); } + @Override + public void shouldDraw(View view) + { + view.drawSwitchableHole(); + super.shouldDraw(view); + } + } diff --git a/src/killer_sokoban/TargetField.java b/src/killer_sokoban/TargetField.java index ecfe63b9ae4733b0b5a8c20c9e6dc95294f8285e..448b36c0a1b455dc27df2a0e36722b7fa50924b6 100644 --- a/src/killer_sokoban/TargetField.java +++ b/src/killer_sokoban/TargetField.java @@ -48,5 +48,12 @@ public class TargetField extends SimpleField { return ret; } + + @Override + public void shouldDraw(View view) + { + view.drawTargetField(); + super.shouldDraw(view); + } } diff --git a/src/killer_sokoban/View.java b/src/killer_sokoban/View.java new file mode 100644 index 0000000000000000000000000000000000000000..1a8f498b48f273ba53bf3f1c2cd2fc92c69160ba --- /dev/null +++ b/src/killer_sokoban/View.java @@ -0,0 +1,87 @@ +package killer_sokoban; + + +import javafx.scene.canvas.Canvas; +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.paint.Color; + +public class View { + + public int line, column; + private int y, x; + private GraphicsContext gc; + + private int tileSize=20; + private int cratemargin=3; + + public void init(int line, int column) + { + this.line=line; + this.column=column; + } + public void setCanvas(Canvas c) + { + this.gc=c.getGraphicsContext2D(); + } + + public void update() + { + + for (x=0;x<column;x++) + for (y=0;y<line;y++) + Main.drawRequiredFor(y,x); + + } + + public void drawAbstract() { + gc.setLineWidth(2); + gc.setStroke(Color.BLUE); + gc.strokeRect(x*tileSize, y*tileSize, tileSize, tileSize); + } + + public void drawSimpleField() { + gc.setFill(Color.ALICEBLUE); + gc.fillRect(x*tileSize, y*tileSize, tileSize, tileSize); + } + + public void drawTargetField() { + gc.setFill(Color.YELLOW); + gc.fillRect(x*tileSize, y*tileSize, tileSize, tileSize); + } + public void drawHole() { + gc.setFill(Color.BLACK); + gc.fillRect(x*tileSize, y*tileSize, tileSize, tileSize); + } + public void drawSwitchableHole() { + gc.setFill(Color.PINK); + gc.fillRect(x*tileSize, y*tileSize, tileSize, tileSize); + } + public void drawSwitchField() { + gc.setFill(Color.PLUM); + gc.fillRect(x*tileSize, y*tileSize, tileSize, tileSize); + } + public void drawWall() { + gc.setFill(Color.GREY); + gc.fillRect(x*tileSize, y*tileSize, tileSize, tileSize); + } + public void drawOil() { + gc.setFill(Color.SLATEGREY); + gc.fillOval(x*tileSize, y*tileSize, tileSize, tileSize); + } + public void drawHoney() { + gc.setFill(Color.GOLD); + gc.fillOval(x*tileSize, y*tileSize, tileSize, tileSize); + } + + public void drawWorker() { + gc.setFill(Color.GREEN); + gc.fillPolygon(new double[]{(x+0.1)*tileSize, (x+0.9)*tileSize, (x+0.5)*tileSize}, + new double[]{(y+0.9)*tileSize, (y+0.9)*tileSize, (y+0.1)*tileSize}, 3); + } + public void drawCrate() { + gc.setFill(Color.ORANGE); + gc.fillRect(x*tileSize+cratemargin, y*tileSize+cratemargin, tileSize-2*cratemargin, tileSize-2*cratemargin); + } + + +} diff --git a/src/killer_sokoban/Wall.java b/src/killer_sokoban/Wall.java index f3b846865b846c5f2318176fb2ebb7c1ace23d23..070e3dd61d6fd3319d67bf4b428c55c80ed79ec1 100644 --- a/src/killer_sokoban/Wall.java +++ b/src/killer_sokoban/Wall.java @@ -24,5 +24,12 @@ public class Wall extends AbstractField { public boolean couldMoveOn(Direction toward) { return false; } + + @Override + public void shouldDraw(View view) + { + view.drawWall(); + super.shouldDraw(view); + } } diff --git a/src/killer_sokoban/Worker.java b/src/killer_sokoban/Worker.java index 91fffb71110e8471a567a7f7a64f2870817e3193..7fa9aa9fcd5e010dbdf61e53f4de85944c15d0fe 100644 --- a/src/killer_sokoban/Worker.java +++ b/src/killer_sokoban/Worker.java @@ -90,5 +90,12 @@ public class Worker extends Moveable { public void onSwitch(SwitchField s) { s.turnOff(); } + + @Override + public void shouldDraw(View view) + { + super.shouldDraw(view); + view.drawWorker(); + } }