diff --git a/bin/de/deadlocker8/roadgame/logic/Board.class b/bin/de/deadlocker8/roadgame/logic/Board.class index bc6431984802150d760a1933700b1e41077c6048..a3c7421f9e5d58f240e377c05ec3cd170f44c50e 100644 Binary files a/bin/de/deadlocker8/roadgame/logic/Board.class and b/bin/de/deadlocker8/roadgame/logic/Board.class differ diff --git a/bin/de/deadlocker8/roadgame/logic/Dimension.class b/bin/de/deadlocker8/roadgame/logic/Dimension.class new file mode 100644 index 0000000000000000000000000000000000000000..c2f729d1e3a469658a099b4e54423e36dc759c10 Binary files /dev/null and b/bin/de/deadlocker8/roadgame/logic/Dimension.class differ diff --git a/bin/de/deadlocker8/roadgame/resources/2.png b/bin/de/deadlocker8/roadgame/resources/2.png new file mode 100644 index 0000000000000000000000000000000000000000..8d8cea35f9b801e5f39132e92b07a3630a5fedaa Binary files /dev/null and b/bin/de/deadlocker8/roadgame/resources/2.png differ diff --git a/bin/de/deadlocker8/roadgame/resources/border.png b/bin/de/deadlocker8/roadgame/resources/border.png new file mode 100644 index 0000000000000000000000000000000000000000..c2b5d4faf7bd65e73e071791bbd9cabd0cee17e5 Binary files /dev/null and b/bin/de/deadlocker8/roadgame/resources/border.png differ diff --git a/bin/de/deadlocker8/roadgame/resources/empty.png b/bin/de/deadlocker8/roadgame/resources/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..0b624ce13d73f787120c3997e3836566e212cfba Binary files /dev/null and b/bin/de/deadlocker8/roadgame/resources/empty.png differ diff --git a/bin/de/deadlocker8/roadgame/resources/green.png b/bin/de/deadlocker8/roadgame/resources/green.png new file mode 100644 index 0000000000000000000000000000000000000000..947ab103ae2d22eb71f398df474884b16d07e44f Binary files /dev/null and b/bin/de/deadlocker8/roadgame/resources/green.png differ diff --git a/bin/de/deadlocker8/roadgame/resources/road.png b/bin/de/deadlocker8/roadgame/resources/road.png new file mode 100644 index 0000000000000000000000000000000000000000..0c2cd245f9822b3c40316e419e2e314418b3213a Binary files /dev/null and b/bin/de/deadlocker8/roadgame/resources/road.png differ diff --git a/bin/de/deadlocker8/roadgame/ui/Controller$1.class b/bin/de/deadlocker8/roadgame/ui/Controller$1.class index 5e27e9312bd188b813fcce42367f59a46350480a..3e40e28222964a2d6c131b6f57c2d5debbc147b1 100644 Binary files a/bin/de/deadlocker8/roadgame/ui/Controller$1.class and b/bin/de/deadlocker8/roadgame/ui/Controller$1.class differ diff --git a/bin/de/deadlocker8/roadgame/ui/Controller$2.class b/bin/de/deadlocker8/roadgame/ui/Controller$2.class new file mode 100644 index 0000000000000000000000000000000000000000..4dfed642988740f411ddfbb691d4a912c2022182 Binary files /dev/null and b/bin/de/deadlocker8/roadgame/ui/Controller$2.class differ diff --git a/bin/de/deadlocker8/roadgame/ui/Controller.class b/bin/de/deadlocker8/roadgame/ui/Controller.class index 36f07da706d31af0c70cae8682b27df53499c715..ccfff9e08e168ea162b7b262544400e30de5a5b3 100644 Binary files a/bin/de/deadlocker8/roadgame/ui/Controller.class and b/bin/de/deadlocker8/roadgame/ui/Controller.class differ diff --git a/bin/de/deadlocker8/roadgame/ui/GUI.fxml b/bin/de/deadlocker8/roadgame/ui/GUI.fxml index 466a0007d9317dd19e294380e1ffe0383c5c46bc..c1199ad145a9e673ae262f6cd2f07790d0f19e30 100644 --- a/bin/de/deadlocker8/roadgame/ui/GUI.fxml +++ b/bin/de/deadlocker8/roadgame/ui/GUI.fxml @@ -3,10 +3,7 @@ <?import javafx.geometry.Insets?> <?import javafx.scene.control.Button?> <?import javafx.scene.layout.AnchorPane?> -<?import javafx.scene.layout.ColumnConstraints?> -<?import javafx.scene.layout.GridPane?> <?import javafx.scene.layout.HBox?> -<?import javafx.scene.layout.RowConstraints?> <?import javafx.scene.layout.StackPane?> <?import javafx.scene.layout.VBox?> @@ -14,20 +11,7 @@ <children> <HBox layoutX="14.0" layoutY="14.0" AnchorPane.bottomAnchor="14.0" AnchorPane.leftAnchor="14.0" AnchorPane.rightAnchor="14.0" AnchorPane.topAnchor="14.0"> <children> - <AnchorPane fx:id="anchorPaneGame" prefHeight="572.0" prefWidth="599.0" HBox.hgrow="ALWAYS"> - <children> - <GridPane AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> - <columnConstraints> - <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> - <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> - </columnConstraints> - <rowConstraints> - <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> - <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> - <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> - </rowConstraints> - </GridPane> - </children></AnchorPane> + <AnchorPane fx:id="anchorPaneGame" prefHeight="572.0" prefWidth="599.0" HBox.hgrow="ALWAYS" /> <VBox alignment="TOP_CENTER" prefHeight="572.0" prefWidth="124.0"> <HBox.margin> <Insets left="20.0" /> diff --git a/src/de/deadlocker8/roadgame/logic/Board.java b/src/de/deadlocker8/roadgame/logic/Board.java index c384a7eaa840b0695dd279f514751c7782840368..5b260498b4d3ac41df91dc7e368d78c63251aa94 100644 --- a/src/de/deadlocker8/roadgame/logic/Board.java +++ b/src/de/deadlocker8/roadgame/logic/Board.java @@ -65,36 +65,48 @@ public class Board //North if(!containsTileAtPosition(x, y-1)) { - if(tile.getN().equals(playerTile.getS())) + if(!tile.getN().equals(EdgeType.GRASS)) { - freeEdges.add(new Point2D(x, y-1)); + if(tile.getN().equals(playerTile.getS())) + { + freeEdges.add(new Point2D(x, y-1)); + } } } //East if(!containsTileAtPosition(x+1, y)) { - if(tile.getE().equals(playerTile.getW())) + if(!tile.getE().equals(EdgeType.GRASS)) { - - }freeEdges.add(new Point2D(x+1, y)); + if(tile.getE().equals(playerTile.getW())) + { + freeEdges.add(new Point2D(x+1, y)); + } + } } //South if(!containsTileAtPosition(x, y+1)) { - if(tile.getS().equals(playerTile.getN())) + if(!tile.getS().equals(EdgeType.GRASS)) { - freeEdges.add(new Point2D(x, y+1)); + if(tile.getS().equals(playerTile.getN())) + { + freeEdges.add(new Point2D(x, y+1)); + } } } //West if(!containsTileAtPosition(x-1, y)) { - if(tile.getW().equals(playerTile.getE())) + if(!tile.getW().equals(EdgeType.GRASS)) { - freeEdges.add(new Point2D(x-1, y)); + if(tile.getW().equals(playerTile.getE())) + { + freeEdges.add(new Point2D(x-1, y)); + } } } @@ -113,10 +125,12 @@ public class Board return possibleLocations; } - public int getWidth() + public Dimension getDimension() { int minX = 0; int maxX = 0; + int minY = 0; + int maxY = 0; for(Tile currentTile : tiles) { @@ -129,18 +143,7 @@ public class Board { maxX = (int)currentTile.getPosition().getX(); } - } - - return Math.abs(minX) + maxX + 1; - } - - public int getHeight() - { - int minY = 0; - int maxY = 0; - - for(Tile currentTile : tiles) - { + if((int)currentTile.getPosition().getY() < minY) { minY = (int)currentTile.getPosition().getY(); @@ -150,9 +153,9 @@ public class Board { maxY = (int)currentTile.getPosition().getY(); } - } + } - return Math.abs(minY) + maxY + 1; + return new Dimension(minX, maxX, minY, maxY); } public void addTile(Tile tile) diff --git a/src/de/deadlocker8/roadgame/logic/Dimension.java b/src/de/deadlocker8/roadgame/logic/Dimension.java new file mode 100644 index 0000000000000000000000000000000000000000..b262903311b497b6e95a0daaf70f8b65e428858c --- /dev/null +++ b/src/de/deadlocker8/roadgame/logic/Dimension.java @@ -0,0 +1,60 @@ +package de.deadlocker8.roadgame.logic; + +import javafx.geometry.Point2D; + +public class Dimension +{ + private int minX; + private int maxX; + private int minY; + private int maxY; + + public Dimension(int minX, int maxX, int minY, int maxY) + { + this.minX = minX; + this.maxX = maxX; + this.minY = minY; + this.maxY = maxY; + } + + public int getMinX() + { + return minX; + } + + public int getMaxX() + { + return maxX; + } + + public int getMinY() + { + return minY; + } + + public int getMaxY() + { + return maxY; + } + + public int getWidth() + { + return Math.abs(minX) + maxX + 1; + } + + public int getHeight() + { + return Math.abs(minY) + maxY + 1; + } + + public Point2D getCenterCoordinates() + { + return new Point2D(Math.abs(minX) + 1, Math.abs(minY) + 1); + } + + @Override + public String toString() + { + return "Dimension [minX=" + minX + ", maxX=" + maxX + ", minY=" + minY + ", maxY=" + maxY + "]"; + } +} \ No newline at end of file diff --git a/src/de/deadlocker8/roadgame/logic/PossibleTiles.java b/src/de/deadlocker8/roadgame/logic/PossibleTiles.java index 4a5e6d8c443ae3d46e3f956541560d340c327e23..4bb50b1954358fa673f56739953b85737f7397c7 100644 --- a/src/de/deadlocker8/roadgame/logic/PossibleTiles.java +++ b/src/de/deadlocker8/roadgame/logic/PossibleTiles.java @@ -35,7 +35,7 @@ public class PossibleTiles { tile.rotateRight(); } - + return tile; } } \ No newline at end of file diff --git a/src/de/deadlocker8/roadgame/resources/2.png b/src/de/deadlocker8/roadgame/resources/2.png new file mode 100644 index 0000000000000000000000000000000000000000..8d8cea35f9b801e5f39132e92b07a3630a5fedaa Binary files /dev/null and b/src/de/deadlocker8/roadgame/resources/2.png differ diff --git a/src/de/deadlocker8/roadgame/resources/border.png b/src/de/deadlocker8/roadgame/resources/border.png new file mode 100644 index 0000000000000000000000000000000000000000..c2b5d4faf7bd65e73e071791bbd9cabd0cee17e5 Binary files /dev/null and b/src/de/deadlocker8/roadgame/resources/border.png differ diff --git a/src/de/deadlocker8/roadgame/resources/empty.png b/src/de/deadlocker8/roadgame/resources/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..0b624ce13d73f787120c3997e3836566e212cfba Binary files /dev/null and b/src/de/deadlocker8/roadgame/resources/empty.png differ diff --git a/src/de/deadlocker8/roadgame/resources/green.png b/src/de/deadlocker8/roadgame/resources/green.png new file mode 100644 index 0000000000000000000000000000000000000000..947ab103ae2d22eb71f398df474884b16d07e44f Binary files /dev/null and b/src/de/deadlocker8/roadgame/resources/green.png differ diff --git a/src/de/deadlocker8/roadgame/resources/road.png b/src/de/deadlocker8/roadgame/resources/road.png new file mode 100644 index 0000000000000000000000000000000000000000..0c2cd245f9822b3c40316e419e2e314418b3213a Binary files /dev/null and b/src/de/deadlocker8/roadgame/resources/road.png differ diff --git a/src/de/deadlocker8/roadgame/ui/Controller.java b/src/de/deadlocker8/roadgame/ui/Controller.java index 0efae05e388087cfd8303e68c275ff2460aa5b60..e29638ccc9530e4b4c050c9d32af8116c35b229f 100644 --- a/src/de/deadlocker8/roadgame/ui/Controller.java +++ b/src/de/deadlocker8/roadgame/ui/Controller.java @@ -4,9 +4,8 @@ import java.util.ArrayList; import java.util.Locale; import java.util.ResourceBundle; -import com.sun.org.apache.bcel.internal.generic.IfInstruction; - import de.deadlocker8.roadgame.logic.Board; +import de.deadlocker8.roadgame.logic.EdgeType; import de.deadlocker8.roadgame.logic.Game; import de.deadlocker8.roadgame.logic.Tile; import javafx.event.EventHandler; @@ -17,6 +16,9 @@ import javafx.scene.control.Alert.AlertType; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.MouseButton; +import javafx.scene.input.MouseEvent; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.GridPane; import javafx.scene.layout.StackPane; @@ -68,61 +70,139 @@ public class Controller private void updateGrid(Board board, ArrayList<Point2D> possibleLocations) { - grid.getChildren().clear(); + grid.getChildren().clear(); + + int width = board.getDimension().getWidth(); + int height = board.getDimension().getHeight(); - int width = board.getWidth(); - int height = board.getHeight(); + Point2D center = board.getDimension().getCenterCoordinates(); - //fill outer rim with void for(int x = 0; x < width + 2; x++) { for(int y = 0; y < height + 2; y++) { if(x == 0 || y == 0 || x == width + 1 || y == height + 1) - { - Label label = new Label("X"); + { if(possibleLocations != null) { - //TODO x , y is alwasy positive, but possible locations can be negative --> transform coordinates - if(isInPossibleLocations(possibleLocations, x, y)) + if(isInPossibleLocations(possibleLocations, center, x, y)) + { + grid.add(createStackPaneForTile(null, true, -((int)center.getX() - x), -((int)center.getY() - y)), x, y); + } + else { - label.setStyle("-fx-background-color: red"); + grid.add(createStackPaneForTile(null, false, 0, 0), x, y); } } - - grid.add(label, y, x); - + else + { + grid.add(createStackPaneForTile(null, false, 0, 0), x, y); + } } else { - Tile tile = board.getTile(x-1, y-1); + System.out.println("�hm: " +( x - (int)center.getX() )+" "+ (y - (int)center.getY() )); + Tile tile = board.getTile(x - (int)center.getX(), y - (int)center.getY()); if(tile != null) { - grid.add(new Label(board.getTile(x-1, y-1).toShortString()), y, x); + grid.add(createStackPaneForTile(tile, false, 0, 0), x, y); } else { - Label label = new Label("X"); if(possibleLocations != null) { - if(isInPossibleLocations(possibleLocations, x, y)) + if(isInPossibleLocations(possibleLocations, center, x, y)) + { + grid.add(createStackPaneForTile(null, true, x - (int)center.getX(), y - (int)center.getY()), x, y); + } + else { - label.setStyle("-fx-background-color: red"); + grid.add(createStackPaneForTile(null, false, 0, 0), x, y); } } - - grid.add(label, y, x); + else + { + grid.add(createStackPaneForTile(null, false, 0, 0), x, y); + } } } } } } - private boolean isInPossibleLocations(ArrayList<Point2D> possibleLocations, int x, int y) + private void placeTile(int x, int y) + { + System.out.println(x + " " + y); + game.placeTile(game.getCurrentTile(), new Point2D(x, y)); + nextTile(); + } + + private StackPane createStackPaneForTile(Tile tile, boolean possible, int x, int y) + { + StackPane stack = new StackPane(); + + stack.getChildren().add(new ImageView(new Image("de/deadlocker8/roadgame/resources/empty.png"))); + + if(tile == null) + { + if(possible) + { + stack.getChildren().add(new ImageView(new Image("de/deadlocker8/roadgame/resources/border.png"))); + stack.setOnMouseClicked(new EventHandler<MouseEvent>() + { + @Override + public void handle(MouseEvent event) + { + if(event.getButton().equals(MouseButton.PRIMARY)) + { + placeTile(x, y); + } + } + }); + } + } + else + { + stack.getChildren().add(new ImageView(new Image("de/deadlocker8/roadgame/resources/green.png"))); + + if(tile.getN().equals(EdgeType.ROAD)) + { + ImageView imageViewRoadNorth = new ImageView(new Image("de/deadlocker8/roadgame/resources/road.png")); + stack.getChildren().add(imageViewRoadNorth); + } + + if(tile.getE().equals(EdgeType.ROAD)) + { + ImageView imageViewRoadEast = new ImageView(new Image("de/deadlocker8/roadgame/resources/road.png")); + imageViewRoadEast.setRotate(90); + stack.getChildren().add(imageViewRoadEast); + } + + if(tile.getS().equals(EdgeType.ROAD)) + { + ImageView imageViewRoadSouth = new ImageView(new Image("de/deadlocker8/roadgame/resources/road.png")); + imageViewRoadSouth.setRotate(180); + stack.getChildren().add(imageViewRoadSouth); + } + + if(tile.getW().equals(EdgeType.ROAD)) + { + ImageView imageViewRoadWest = new ImageView(new Image("de/deadlocker8/roadgame/resources/road.png")); + imageViewRoadWest.setRotate(270); + stack.getChildren().add(imageViewRoadWest); + } + } + + return stack; + } + + private boolean isInPossibleLocations(ArrayList<Point2D> possibleLocations, Point2D center, int x, int y) { for(Point2D currentPoint : possibleLocations) { - if((int)currentPoint.getX() == x && (int)currentPoint.getY() == y) + int currentX = (int)center.getX() + (int)currentPoint.getX(); + int currentY = (int)center.getY() + (int)currentPoint.getY(); + if(currentX == x && currentY == y) { return true; } @@ -136,15 +216,19 @@ public class Controller game.setCurrentTile(game.getNextTile()); stackPaneCurrentTile.getChildren().clear(); - stackPaneCurrentTile.getChildren().add(new Label(game.getCurrentTile().toShortString())); + stackPaneCurrentTile.getChildren().add(createStackPaneForTile(game.getCurrentTile(), false, 0, 0)); + System.out.println(game.getBoard()); - System.out.println(game.getPossibleLocations(game.getCurrentTile())); updateGrid(game.getBoard(), game.getPossibleLocations(game.getCurrentTile())); } public void rotateRight() { - + game.getCurrentTile().rotateRight(); + stackPaneCurrentTile.getChildren().clear(); + stackPaneCurrentTile.getChildren().add(createStackPaneForTile(game.getCurrentTile(), false, 0, 0)); + + updateGrid(game.getBoard(), game.getPossibleLocations(game.getCurrentTile())); } public void about()