diff --git a/bin/de/deadlocker8/roadgame/logic/Board.class b/bin/de/deadlocker8/roadgame/logic/Board.class index 57c8bd9335e70decc0b5a8ad7f84bd7d51ebbc47..1b11f364cb1c2ba2d180a4668e20ae5608ef4dd5 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/CenterType.class b/bin/de/deadlocker8/roadgame/logic/CenterType.class new file mode 100644 index 0000000000000000000000000000000000000000..95d4df8668b7d78b6ad344bfab615e7cc65471cc Binary files /dev/null and b/bin/de/deadlocker8/roadgame/logic/CenterType.class differ diff --git a/bin/de/deadlocker8/roadgame/logic/EdgeType.class b/bin/de/deadlocker8/roadgame/logic/EdgeType.class index 182bf379e3f568a0046606bc46906f13cdebc40b..9f4e1e0a5de4ad1283c3f0f788cba96bbce0f029 100644 Binary files a/bin/de/deadlocker8/roadgame/logic/EdgeType.class and b/bin/de/deadlocker8/roadgame/logic/EdgeType.class differ diff --git a/bin/de/deadlocker8/roadgame/logic/Textures.class b/bin/de/deadlocker8/roadgame/logic/Textures.class index 9328b2686bb49ac6158a7a90a35af6482bc3a888..0c0a89d2c7471997ac3cb9eb6a0f1bbbb6e8c5c3 100644 Binary files a/bin/de/deadlocker8/roadgame/logic/Textures.class and b/bin/de/deadlocker8/roadgame/logic/Textures.class differ diff --git a/bin/de/deadlocker8/roadgame/logic/Tile.class b/bin/de/deadlocker8/roadgame/logic/Tile.class index 5347d9b7f579065c7f814af569c2ae146b3adc09..6c03737627235fc1e125273bd591da9a847b6ba1 100644 Binary files a/bin/de/deadlocker8/roadgame/logic/Tile.class and b/bin/de/deadlocker8/roadgame/logic/Tile.class differ diff --git a/bin/de/deadlocker8/roadgame/logic/TileTypes.class b/bin/de/deadlocker8/roadgame/logic/TileTypes.class index 61650ecfdf66a824d80d0adee3c61be9dc2cb6c2..943e11dd0df0c4c8980be70480f14c940358db84 100644 Binary files a/bin/de/deadlocker8/roadgame/logic/TileTypes.class and b/bin/de/deadlocker8/roadgame/logic/TileTypes.class differ diff --git a/bin/de/deadlocker8/roadgame/resources/castle.png b/bin/de/deadlocker8/roadgame/resources/castle.png new file mode 100644 index 0000000000000000000000000000000000000000..1b6bbe406fd37c89a36b0654672a9e0c122b3b26 Binary files /dev/null and b/bin/de/deadlocker8/roadgame/resources/castle.png differ diff --git a/bin/de/deadlocker8/roadgame/resources/center_castle.png b/bin/de/deadlocker8/roadgame/resources/center_castle.png new file mode 100644 index 0000000000000000000000000000000000000000..0ddb1de6225d11a962956dc866d5b63d8eee8657 Binary files /dev/null and b/bin/de/deadlocker8/roadgame/resources/center_castle.png differ diff --git a/bin/de/deadlocker8/roadgame/resources/center_castle_triangle.png b/bin/de/deadlocker8/roadgame/resources/center_castle_triangle.png new file mode 100644 index 0000000000000000000000000000000000000000..7f03ee6bdfdf9260222cd17313e0dab9268ee04d Binary files /dev/null and b/bin/de/deadlocker8/roadgame/resources/center_castle_triangle.png differ diff --git a/bin/de/deadlocker8/roadgame/ui/Controller.class b/bin/de/deadlocker8/roadgame/ui/Controller.class index ed189f709b208353aa5da985c7e2b3a8652b7486..da6912eebc7b6b41608ad1889c1eca56f26e5c9d 100644 Binary files a/bin/de/deadlocker8/roadgame/ui/Controller.class and b/bin/de/deadlocker8/roadgame/ui/Controller.class differ diff --git a/src/de/deadlocker8/roadgame/logic/Board.java b/src/de/deadlocker8/roadgame/logic/Board.java index ab24c7b5e87e912606d915cb36f7f12fad9929e9..c390f3242e1d92b327aeaa3f1229390efa884eb1 100644 --- a/src/de/deadlocker8/roadgame/logic/Board.java +++ b/src/de/deadlocker8/roadgame/logic/Board.java @@ -46,7 +46,7 @@ public class Board Random random = new Random(); int index = random.nextInt(TileTypes.values().length); TileTypes tileType = TileTypes.values()[index]; - Tile tile = new Tile(tileType.getN(), tileType.getE(), tileType.getS(), tileType.getW()); + Tile tile = new Tile(tileType.getN(), tileType.getE(), tileType.getS(), tileType.getW(), tileType.getC()); //random rotation int rotate = random.nextInt(3); diff --git a/src/de/deadlocker8/roadgame/logic/CenterType.java b/src/de/deadlocker8/roadgame/logic/CenterType.java new file mode 100644 index 0000000000000000000000000000000000000000..3e7114b8c809231b59e8fb5b8fc1c47561b73035 --- /dev/null +++ b/src/de/deadlocker8/roadgame/logic/CenterType.java @@ -0,0 +1,6 @@ +package de.deadlocker8.roadgame.logic; + +public enum CenterType +{ + EMPTY, CASTLE, CASTLE_TRIANGLE +} \ No newline at end of file diff --git a/src/de/deadlocker8/roadgame/logic/EdgeType.java b/src/de/deadlocker8/roadgame/logic/EdgeType.java index 54f9903224cffd205608d121401213d0ded8edeb..6f049c03c63dd24f5d5667cfa348890cbdafa9d7 100644 --- a/src/de/deadlocker8/roadgame/logic/EdgeType.java +++ b/src/de/deadlocker8/roadgame/logic/EdgeType.java @@ -2,5 +2,5 @@ package de.deadlocker8.roadgame.logic; public enum EdgeType { - GRASS, ROAD + GRASS, ROAD, CASTLE } \ No newline at end of file diff --git a/src/de/deadlocker8/roadgame/logic/Textures.java b/src/de/deadlocker8/roadgame/logic/Textures.java index 5dd21b0d28a1b6c46b91f42af9cc4a6006a5529a..9625830f207ae9fbebb811648fce7ccde34bfc4e 100644 --- a/src/de/deadlocker8/roadgame/logic/Textures.java +++ b/src/de/deadlocker8/roadgame/logic/Textures.java @@ -8,6 +8,9 @@ public class Textures private Image imageBorder= new Image("de/deadlocker8/roadgame/resources/border.png"); private Image imageGrass = new Image("de/deadlocker8/roadgame/resources/grass.png"); private Image imageRoad = new Image("de/deadlocker8/roadgame/resources/road.png"); + private Image imageCastle = new Image("de/deadlocker8/roadgame/resources/castle.png"); + private Image imageCenterCastle = new Image("de/deadlocker8/roadgame/resources/center_castle.png"); + private Image imageCenterCastleTriangle = new Image("de/deadlocker8/roadgame/resources/center_castle_triangle.png"); public Textures() { @@ -33,4 +36,19 @@ public class Textures { return imageRoad; } + + public Image getImageCastle() + { + return imageCastle; + } + + public Image getImageCenterCastle() + { + return imageCenterCastle; + } + + public Image getImageCenterCastleTriangle() + { + return imageCenterCastleTriangle; + } } \ No newline at end of file diff --git a/src/de/deadlocker8/roadgame/logic/Tile.java b/src/de/deadlocker8/roadgame/logic/Tile.java index b78a6b770cb7a578860e9d82730266b2641e6146..93e7c56ff5ad5854bed03eb72d76fb29ba79f7ee 100644 --- a/src/de/deadlocker8/roadgame/logic/Tile.java +++ b/src/de/deadlocker8/roadgame/logic/Tile.java @@ -8,23 +8,26 @@ public class Tile private EdgeType E; private EdgeType S; private EdgeType W; + private CenterType C; private Point2D position; - public Tile(EdgeType N, EdgeType E, EdgeType S, EdgeType W, int x, int y) + public Tile(EdgeType N, EdgeType E, EdgeType S, EdgeType W, CenterType C, int x, int y) { this.N = N; this.E = E; this.S = S; this.W = W; + this.C = C; this.position = new Point2D(x, y); } - public Tile(EdgeType N, EdgeType E, EdgeType S, EdgeType W) + public Tile(EdgeType N, EdgeType E, EdgeType S, EdgeType W, CenterType C) { this.N = N; this.E = E; this.S = S; this.W = W; + this.C = C; this.position = null; } @@ -46,8 +49,13 @@ public class Tile public EdgeType getW() { return W; - } + } + public CenterType getC() + { + return C; + } + public Point2D getPosition() { return position; diff --git a/src/de/deadlocker8/roadgame/logic/TileTypes.java b/src/de/deadlocker8/roadgame/logic/TileTypes.java index 80a0ce9d4ef2a13a723671d04de2c4e3c58429e8..81fccb9162d1228e3580e08eeaad6d839df75c1b 100644 --- a/src/de/deadlocker8/roadgame/logic/TileTypes.java +++ b/src/de/deadlocker8/roadgame/logic/TileTypes.java @@ -2,23 +2,45 @@ package de.deadlocker8.roadgame.logic; public enum TileTypes { - ROAD_END(EdgeType.ROAD, EdgeType.GRASS, EdgeType.GRASS, EdgeType.GRASS), - ROAD_STRAIGHT(EdgeType.ROAD, EdgeType.GRASS, EdgeType.ROAD, EdgeType.GRASS), - ROAD_CURVE(EdgeType.ROAD, EdgeType.ROAD, EdgeType.GRASS, EdgeType.GRASS), - ROAD_T_JUNCTION(EdgeType.ROAD, EdgeType.ROAD, EdgeType.ROAD, EdgeType.GRASS), - ROAD_X_JUNCTION(EdgeType.ROAD, EdgeType.ROAD, EdgeType.ROAD, EdgeType.ROAD); + ROAD_END(EdgeType.ROAD, EdgeType.GRASS, EdgeType.GRASS, EdgeType.GRASS, CenterType.EMPTY), + ROAD_STRAIGHT(EdgeType.ROAD, EdgeType.GRASS, EdgeType.ROAD, EdgeType.GRASS, CenterType.EMPTY), + ROAD_CURVE(EdgeType.ROAD, EdgeType.ROAD, EdgeType.GRASS, EdgeType.GRASS, CenterType.EMPTY), + ROAD_T_JUNCTION(EdgeType.ROAD, EdgeType.ROAD, EdgeType.ROAD, EdgeType.GRASS, CenterType.EMPTY), + ROAD_X_JUNCTION(EdgeType.ROAD, EdgeType.ROAD, EdgeType.ROAD, EdgeType.ROAD, CenterType.EMPTY), + + CASTLE_SINGLE(EdgeType.CASTLE, EdgeType.GRASS, EdgeType.GRASS, EdgeType.GRASS,CenterType.EMPTY), + CASTLE_TWO_SINGLE_OPPOSITE(EdgeType.CASTLE, EdgeType.GRASS, EdgeType.CASTLE, EdgeType.GRASS, CenterType.EMPTY), + CASTLE_TWO_SINGLE_NEIGHBOR(EdgeType.CASTLE, EdgeType.CASTLE, EdgeType.GRASS, EdgeType.GRASS, CenterType.EMPTY), + CASTLE_THREE_SINGLE(EdgeType.CASTLE, EdgeType.CASTLE, EdgeType.CASTLE, EdgeType.GRASS, CenterType.EMPTY), + CASTLE_FOUR_SINGLE(EdgeType.CASTLE, EdgeType.CASTLE, EdgeType.CASTLE, EdgeType.CASTLE, CenterType.EMPTY), + + CASTLE_TRIANGLE(EdgeType.CASTLE, EdgeType.CASTLE, EdgeType.GRASS, EdgeType.GRASS, CenterType.CASTLE_TRIANGLE), + CASTLE_TUBE(EdgeType.CASTLE, EdgeType.GRASS, EdgeType.CASTLE, EdgeType.GRASS, CenterType.CASTLE), + CASTLE_FULL(EdgeType.CASTLE, EdgeType.CASTLE, EdgeType.CASTLE, EdgeType.CASTLE, CenterType.CASTLE), + + CASTLE_SINGLE_ROAD_STRAIGHT(EdgeType.CASTLE, EdgeType.ROAD, EdgeType.GRASS, EdgeType.ROAD,CenterType.EMPTY), + CASTLE_SINGLE_ROAD_CURVE_RIGHT(EdgeType.CASTLE, EdgeType.ROAD, EdgeType.ROAD, EdgeType.GRASS,CenterType.EMPTY), + CASTLE_SINGLE_ROAD_CURVE_LEFT(EdgeType.CASTLE, EdgeType.GRASS, EdgeType.ROAD, EdgeType.ROAD,CenterType.EMPTY), + CASTLE_SINGLE_ROAD_T_JUNCTION(EdgeType.CASTLE, EdgeType.ROAD, EdgeType.ROAD, EdgeType.ROAD,CenterType.EMPTY), + + CASTLE_TWO_SINGLE_OPPOSITE_ROAD_STRAIGHT(EdgeType.CASTLE, EdgeType.ROAD, EdgeType.CASTLE, EdgeType.ROAD, CenterType.EMPTY), + CASTLE_TWO_SINGLE_NEIGHBOR_ROAD_CURVE(EdgeType.CASTLE, EdgeType.CASTLE, EdgeType.ROAD, EdgeType.ROAD, CenterType.EMPTY), + CASTLE_THREE_SINGLE_ROAD_END(EdgeType.CASTLE, EdgeType.CASTLE, EdgeType.CASTLE, EdgeType.ROAD, CenterType.EMPTY); + private EdgeType N; private EdgeType E; private EdgeType S; private EdgeType W; - - private TileTypes(EdgeType n, EdgeType e, EdgeType s, EdgeType w) + private CenterType C; + + private TileTypes(EdgeType n, EdgeType e, EdgeType s, EdgeType w, CenterType c) { N = n; E = e; S = s; W = w; + C = c; } public EdgeType getN() @@ -40,4 +62,9 @@ public enum TileTypes { return W; } + + public CenterType getC() + { + return C; + } } \ No newline at end of file diff --git a/src/de/deadlocker8/roadgame/resources/castle.png b/src/de/deadlocker8/roadgame/resources/castle.png new file mode 100644 index 0000000000000000000000000000000000000000..1b6bbe406fd37c89a36b0654672a9e0c122b3b26 Binary files /dev/null and b/src/de/deadlocker8/roadgame/resources/castle.png differ diff --git a/src/de/deadlocker8/roadgame/resources/center_castle.png b/src/de/deadlocker8/roadgame/resources/center_castle.png new file mode 100644 index 0000000000000000000000000000000000000000..0ddb1de6225d11a962956dc866d5b63d8eee8657 Binary files /dev/null and b/src/de/deadlocker8/roadgame/resources/center_castle.png differ diff --git a/src/de/deadlocker8/roadgame/resources/center_castle_triangle.png b/src/de/deadlocker8/roadgame/resources/center_castle_triangle.png new file mode 100644 index 0000000000000000000000000000000000000000..7f03ee6bdfdf9260222cd17313e0dab9268ee04d Binary files /dev/null and b/src/de/deadlocker8/roadgame/resources/center_castle_triangle.png differ diff --git a/src/de/deadlocker8/roadgame/ui/Controller.java b/src/de/deadlocker8/roadgame/ui/Controller.java index da34629b6c0823a4dbd9f7e81c530db5b18a9973..788629997fa7e017cc4d74ec70a3eb7c3419943a 100644 --- a/src/de/deadlocker8/roadgame/ui/Controller.java +++ b/src/de/deadlocker8/roadgame/ui/Controller.java @@ -31,67 +31,67 @@ public class Controller @FXML private StackPane stackPaneCurrentTile; @FXML private Button buttonRotate; @FXML private ScrollPane scrollPane; - + private Image icon = new Image("de/deadlocker8/roadgame/resources/icon.png"); private final ResourceBundle bundle = ResourceBundle.getBundle("de/deadlocker8/roadgame/main/", Locale.GERMANY); private GridPane grid; - private Game game; + private Game game; private Textures textures; public void init(Stage stage) - { + { textures = new Textures(); - + anchorPaneGame.setStyle("-fx-border-color: #333333; -fx-border-width: 2px"); stackPaneCurrentTile.setStyle("-fx-border-color: #333333; -fx-border-width: 2px"); - + grid = new GridPane(); scrollPane.setContent(grid); - + game = new Game(); - + updateGrid(game.getBoard(), null); - + nextTile(); } - + private void updateGrid(Board board, ArrayList<Point2D> possibleLocations) - { - grid.getChildren().clear(); - + { + grid.getChildren().clear(); + int width = board.getDimension().getWidth(); int height = board.getDimension().getHeight(); - - Point2D center = board.getDimension().getCenterCoordinates(); - + + Point2D center = board.getDimension().getCenterCoordinates(); + 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) - { + { if(possibleLocations != null) { if(isInPossibleLocations(possibleLocations, center, x, y)) { - grid.add(createStackPaneForTile(null, true, -((int)center.getX() - x), -((int)center.getY() - y)), x, y); + grid.add(createStackPaneForTile(null, true, -((int)center.getX() - x), -((int)center.getY() - y)), x, y); } else { - grid.add(createStackPaneForTile(null, false, 0, 0), x, y); + grid.add(createStackPaneForTile(null, false, 0, 0), x, y); } } else { - grid.add(createStackPaneForTile(null, false, 0, 0), x, y); - } + grid.add(createStackPaneForTile(null, false, 0, 0), x, y); + } } else - { + { Tile tile = board.getTile(x - (int)center.getX(), y - (int)center.getY()); if(tile != null) - { - grid.add(createStackPaneForTile(tile, false, 0, 0), x, y); + { + grid.add(createStackPaneForTile(tile, false, 0, 0), x, y); } else { @@ -99,40 +99,40 @@ public class Controller { if(isInPossibleLocations(possibleLocations, center, x, y)) { - grid.add(createStackPaneForTile(null, true, x - (int)center.getX(), y - (int)center.getY()), x, y); + grid.add(createStackPaneForTile(null, true, x - (int)center.getX(), y - (int)center.getY()), x, y); } else { - grid.add(createStackPaneForTile(null, false, 0, 0), x, y); + grid.add(createStackPaneForTile(null, false, 0, 0), x, y); } } else { - grid.add(createStackPaneForTile(null, false, 0, 0), x, y); - } + grid.add(createStackPaneForTile(null, false, 0, 0), x, y); + } } - } + } } } } - + private void placeTile(int x, int 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(); - + StackPane stack = new StackPane(); + stack.getChildren().add(new ImageView(textures.getImageEmpty())); - + if(tile == null) { if(possible) { - stack.getChildren().add(new ImageView(textures.getImageBorder())); + stack.getChildren().add(new ImageView(textures.getImageBorder())); stack.setOnMouseClicked(new EventHandler<MouseEvent>() { @Override @@ -141,77 +141,127 @@ public class Controller if(event.getButton().equals(MouseButton.PRIMARY)) { placeTile(x, y); - } + } } }); } } else { - stack.getChildren().add(new ImageView(textures.getImageGrass())); - - if(tile.getN().equals(EdgeType.ROAD)) - { - ImageView imageViewRoadNorth = new ImageView(textures.getImageRoad()); - stack.getChildren().add(imageViewRoadNorth); - } + stack.getChildren().add(new ImageView(textures.getImageGrass())); - if(tile.getE().equals(EdgeType.ROAD)) - { - ImageView imageViewRoadEast = new ImageView(textures.getImageRoad()); - imageViewRoadEast.setRotate(90); - stack.getChildren().add(imageViewRoadEast); - } - - if(tile.getS().equals(EdgeType.ROAD)) - { - ImageView imageViewRoadSouth = new ImageView(textures.getImageRoad()); - imageViewRoadSouth.setRotate(180); - stack.getChildren().add(imageViewRoadSouth); - } + //North + stack.getChildren().add(getImageForEdge(tile.getN())); + + //East + ImageView imageViewEast = getImageForEdge(tile.getE()); + imageViewEast.setRotate(90); + stack.getChildren().add(imageViewEast); + + //South + ImageView imageViewSouth = getImageForEdge(tile.getS()); + imageViewSouth.setRotate(180); + stack.getChildren().add(imageViewSouth); + + //West + ImageView imageViewWest = getImageForEdge(tile.getW()); + imageViewWest.setRotate(270); + stack.getChildren().add(imageViewWest); - if(tile.getW().equals(EdgeType.ROAD)) - { - ImageView imageViewRoadWest = new ImageView(textures.getImageRoad()); - imageViewRoadWest.setRotate(270); - stack.getChildren().add(imageViewRoadWest); - } - } - + //Center + ImageView imageViewCenter = getImageForCenter(tile); + stack.getChildren().add(imageViewCenter); + } + + stack.setStyle("-fx-border-color: #cccccc; -fx-border-width: 1px;"); return stack; } + + private ImageView getImageForEdge(EdgeType edgeType) + { + switch(edgeType) + { + case GRASS: + return new ImageView(textures.getImageEmpty()); + case ROAD: + return new ImageView(textures.getImageRoad()); + case CASTLE: + return new ImageView(textures.getImageCastle()); + default: + return new ImageView(textures.getImageEmpty()); + } + } + private ImageView getImageForCenter(Tile tile) + { + switch(tile.getC()) + { + case EMPTY: + return new ImageView(textures.getImageEmpty()); + case CASTLE: + return new ImageView(textures.getImageCenterCastle()); + case CASTLE_TRIANGLE: + ImageView iv = new ImageView(textures.getImageCenterCastleTriangle()); + if(tile.getN().equals(EdgeType.CASTLE)) + { + if(tile.getW().equals(EdgeType.CASTLE)) + { + //North and West + iv.setRotate(270); + } + } + + if(tile.getS().equals(EdgeType.CASTLE)) + { + if(tile.getE().equals(EdgeType.CASTLE)) + { + //South and East + iv.setRotate(90); + } + else + { + //South and West + iv.setRotate(180); + } + } + + return iv; + default: + return new ImageView(textures.getImageEmpty()); + } + } + private boolean isInPossibleLocations(ArrayList<Point2D> possibleLocations, Point2D center, int x, int y) { for(Point2D currentPoint : possibleLocations) { - int currentX = (int)center.getX() + (int)currentPoint.getX(); - int currentY = (int)center.getY() + (int)currentPoint.getY(); + int currentX = (int)center.getX() + (int)currentPoint.getX(); + int currentY = (int)center.getY() + (int)currentPoint.getY(); if(currentX == x && currentY == y) { return true; } } - + return false; } - + private void nextTile() { game.setCurrentTile(game.getNextTile()); - + stackPaneCurrentTile.getChildren().clear(); - stackPaneCurrentTile.getChildren().add(createStackPaneForTile(game.getCurrentTile(), false, 0, 0)); - + stackPaneCurrentTile.getChildren().add(createStackPaneForTile(game.getCurrentTile(), false, 0, 0)); + updateGrid(game.getBoard(), game.getPossibleLocations(game.getCurrentTile())); } - + public void rotateRight() { - game.getCurrentTile().rotateRight(); + game.getCurrentTile().rotateRight(); stackPaneCurrentTile.getChildren().clear(); - stackPaneCurrentTile.getChildren().add(createStackPaneForTile(game.getCurrentTile(), false, 0, 0)); - + stackPaneCurrentTile.getChildren().add(createStackPaneForTile(game.getCurrentTile(), false, 0, 0)); + updateGrid(game.getBoard(), game.getPossibleLocations(game.getCurrentTile())); }