diff --git a/bin/de/deadlocker8/roadgame/logic/Board.class b/bin/de/deadlocker8/roadgame/logic/Board.class index d98dedf6e198e2131c10ee4bbacd6e4483d7784a..d769c1b96a21bf4de46407cb93bfce16230e4b4f 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 index b31e76b38449f2fe3fb3f95b2ff8225b7d0f2c11..65050bad771b43ca35e05a7554646de24ce2d847 100644 Binary files a/bin/de/deadlocker8/roadgame/logic/CenterType.class 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 9f4e1e0a5de4ad1283c3f0f788cba96bbce0f029..ca53f7a1949f36faf120b94122eb729e723e46fe 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/ScorePosition.class b/bin/de/deadlocker8/roadgame/logic/ScorePosition.class new file mode 100644 index 0000000000000000000000000000000000000000..1dfdede1104449f8c5cbf5eaa8b4d5eafc142e8a Binary files /dev/null and b/bin/de/deadlocker8/roadgame/logic/ScorePosition.class differ diff --git a/bin/de/deadlocker8/roadgame/logic/Tile.class b/bin/de/deadlocker8/roadgame/logic/Tile.class index 353ec31f90ee61f0bfa879869a966057cf9e4ee5..470d138b908273e7ebc9045cbd0b07ca0aef9c6a 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/TileType.class b/bin/de/deadlocker8/roadgame/logic/TileType.class index 7c39c14ec9f44df69a4dffa6ebc4cfbda6edc71f..cdf5661d7657148b9499a7465e5323098ab47678 100644 Binary files a/bin/de/deadlocker8/roadgame/logic/TileType.class and b/bin/de/deadlocker8/roadgame/logic/TileType.class differ diff --git a/bin/de/deadlocker8/roadgame/tilepacks/TilePackOneTile.class b/bin/de/deadlocker8/roadgame/tilepacks/TilePackOneTile.class new file mode 100644 index 0000000000000000000000000000000000000000..3ba3204aaf69ea918c8d3f0f55a53162629f1077 Binary files /dev/null and b/bin/de/deadlocker8/roadgame/tilepacks/TilePackOneTile.class differ diff --git a/bin/de/deadlocker8/roadgame/tilepacks/TilePackTest2.class b/bin/de/deadlocker8/roadgame/tilepacks/TilePackTest2.class index 0fc0a42fa46fc5c2b515fc7e081a374a02c49833..3d4179dd775e273a740f495f86066a86bd6f3ff5 100644 Binary files a/bin/de/deadlocker8/roadgame/tilepacks/TilePackTest2.class and b/bin/de/deadlocker8/roadgame/tilepacks/TilePackTest2.class differ diff --git a/bin/de/deadlocker8/roadgame/ui/Controller.class b/bin/de/deadlocker8/roadgame/ui/Controller.class index 6e265d0979e69ea2319d25d6a4e0a313b0dfb1d6..6ca952b4bd98b496615477761e4006d0ce8d23c6 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/Scoring.class b/bin/de/deadlocker8/roadgame/ui/Scoring.class new file mode 100644 index 0000000000000000000000000000000000000000..13872ad5e44dc7305784239d595934a8a23e0647 Binary files /dev/null and b/bin/de/deadlocker8/roadgame/ui/Scoring.class differ diff --git a/src/de/deadlocker8/roadgame/logic/Board.java b/src/de/deadlocker8/roadgame/logic/Board.java index f95fe9dc96c6fb424827a40e02ace549dbff1bec..92b6647e4a5f381895c91946ac87a12c8a03619c 100644 --- a/src/de/deadlocker8/roadgame/logic/Board.java +++ b/src/de/deadlocker8/roadgame/logic/Board.java @@ -11,24 +11,24 @@ public class Board private ArrayList<Tile> tiles; public Board(TilePack tilePack) - { + { this.tilePack = tilePack; - this.tiles = new ArrayList<>(); + this.tiles = new ArrayList<>(); initBoard(); } - + private void initBoard() - { + { TileType tileType = getRandomTile(); if(tileType != null) - { + { Tile startTile = new Tile(tileType); startTile.setPosition(new Point2D(0, 0)); - - tiles.add(startTile); - } + + tiles.add(startTile); + } } - + public TilePack getTilePack() { return tilePack; @@ -38,7 +38,7 @@ public class Board { return tiles; } - + public Tile getTile(int x, int y) { for(Tile currentTile : tiles) @@ -48,15 +48,15 @@ public class Board return currentTile; } } - + return null; } - + public TileType getRandomTile() { return tilePack.getRandomTile(); } - + public boolean containsTileAtPosition(int x, int y) { for(Tile currentTile : tiles) @@ -66,108 +66,144 @@ public class Board return true; } } - + return false; } - + public ArrayList<Point2D> getFreeEdges(Tile tile, Tile playerTile) { ArrayList<Point2D> freeEdges = new ArrayList<>(); - + int x = (int)tile.getPosition().getX(); int y = (int)tile.getPosition().getY(); - - //North - if(!containsTileAtPosition(x, y-1)) - { - if(isCrossCheckValid(playerTile, x, y-1)) - { - freeEdges.add(new Point2D(x, y-1)); - } + + // North + if(!containsTileAtPosition(x, y - 1)) + { + if(isCrossCheckValid(playerTile, x, y - 1)) + { + freeEdges.add(new Point2D(x, y - 1)); + } } - - //East - if(!containsTileAtPosition(x+1, y)) + + // East + if(!containsTileAtPosition(x + 1, y)) { - if(isCrossCheckValid(playerTile, x+1, y)) + if(isCrossCheckValid(playerTile, x + 1, y)) { - freeEdges.add(new Point2D(x+1, y)); - } + freeEdges.add(new Point2D(x + 1, y)); + } } - - //South - if(!containsTileAtPosition(x, y+1)) - { - if(isCrossCheckValid(playerTile, x, y+1)) - { - freeEdges.add(new Point2D(x, y+1)); - } + + // South + if(!containsTileAtPosition(x, y + 1)) + { + if(isCrossCheckValid(playerTile, x, y + 1)) + { + freeEdges.add(new Point2D(x, y + 1)); + } } - - //West - if(!containsTileAtPosition(x-1, y)) + + // West + if(!containsTileAtPosition(x - 1, y)) { - if(isCrossCheckValid(playerTile, x-1, y)) + if(isCrossCheckValid(playerTile, x - 1, y)) { - freeEdges.add(new Point2D(x-1, y)); - } + freeEdges.add(new Point2D(x - 1, y)); + } } - + return freeEdges; } - + private boolean isCrossCheckValid(Tile tile, int x, int y) { - //North - if(containsTileAtPosition(x, y-1)) - { - if(!tile.getN().equals(getTile(x, y-1).getS())) + // North + if(containsTileAtPosition(x, y - 1)) + { + Tile nextTile = getTile(x, y - 1); + + if(tile.getN().equals(EdgeType.CASTLE) || tile.getN().equals(EdgeType.CASTLE_END)) + { + if(!(nextTile.getS().equals(EdgeType.CASTLE_END) || nextTile.getS().equals(EdgeType.CASTLE))) + { + return false; + } + } + else if(!tile.getN().equals(nextTile.getS())) { return false; - } + } } - - //East - if(containsTileAtPosition(x+1, y)) + + // East + if(containsTileAtPosition(x + 1, y)) { - if(!tile.getE().equals(getTile(x+1, y).getW())) + Tile nextTile = getTile(x + 1, y); + + if(tile.getE().equals(EdgeType.CASTLE) || tile.getE().equals(EdgeType.CASTLE_END)) + { + if(!(nextTile.getW().equals(EdgeType.CASTLE_END) || nextTile.getW().equals(EdgeType.CASTLE))) + { + return false; + } + } + else if(!tile.getE().equals(nextTile.getW())) { return false; - } + } } - - //South - if(containsTileAtPosition(x, y+1)) + + // South + if(containsTileAtPosition(x, y + 1)) { - if(!tile.getS().equals(getTile(x, y+1).getN())) + Tile nextTile = getTile(x, y + 1); + + if(tile.getS().equals(EdgeType.CASTLE) || tile.getS().equals(EdgeType.CASTLE_END)) + { + if(!(nextTile.getN().equals(EdgeType.CASTLE_END) || nextTile.getN().equals(EdgeType.CASTLE))) + { + return false; + } + } + else if(!tile.getS().equals(nextTile.getN())) { return false; - } + } } - - //West - if(containsTileAtPosition(x-1, y)) + + // West + if(containsTileAtPosition(x - 1, y)) { - if(!tile.getW().equals(getTile(x-1, y).getE())) + Tile nextTile = getTile(x - 1, y); + + if(tile.getW().equals(EdgeType.CASTLE) || tile.getW().equals(EdgeType.CASTLE_END)) + { + if(!(nextTile.getE().equals(EdgeType.CASTLE_END) || nextTile.getE().equals(EdgeType.CASTLE))) + { + return false; + } + } + else if(!tile.getW().equals(nextTile.getE())) { return false; - } + } } - + return true; } - + public ArrayList<Point2D> getPossibleLocations(Tile tile) { ArrayList<Point2D> possibleLocations = new ArrayList<>(); - + for(Tile currentTile : tiles) { possibleLocations.addAll(getFreeEdges(currentTile, tile)); - } - + } + return possibleLocations; - } + } public boolean tileCanBePlaced(Tile tile) { @@ -199,40 +235,40 @@ public class Board } return true; } - + public Dimension getDimension() { int minX = 0; int maxX = 0; int minY = 0; int maxY = 0; - + for(Tile currentTile : tiles) { if((int)currentTile.getPosition().getX() < minX) { minX = (int)currentTile.getPosition().getX(); } - + if((int)currentTile.getPosition().getX() > maxX) { maxX = (int)currentTile.getPosition().getX(); } - + if((int)currentTile.getPosition().getY() < minY) { minY = (int)currentTile.getPosition().getY(); } - + if((int)currentTile.getPosition().getY() > maxY) { maxY = (int)currentTile.getPosition().getY(); } - } - - return new Dimension(minX, maxX, minY, maxY); + } + + return new Dimension(minX, maxX, minY, maxY); } - + public void addTile(Tile tile) { tiles.add(tile); diff --git a/src/de/deadlocker8/roadgame/logic/CenterType.java b/src/de/deadlocker8/roadgame/logic/CenterType.java index 68afdd92ea85807018409b2bdfe5495f3e76b4ce..502c26ae5c91e49d9531a3c88f61fd1ecb14ac32 100644 --- a/src/de/deadlocker8/roadgame/logic/CenterType.java +++ b/src/de/deadlocker8/roadgame/logic/CenterType.java @@ -2,5 +2,5 @@ package de.deadlocker8.roadgame.logic; public enum CenterType { - EMPTY, CASTLE, CASTLE_TRIANGLE, CHURCH, ROAD + EMPTY, CASTLE, CASTLE_TRIANGLE, CHURCH, ROAD, JUNCTION } \ 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 6f049c03c63dd24f5d5667cfa348890cbdafa9d7..c3e4f85ef7a8a1c8651bd235e856c38d30ee3bfa 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, CASTLE + GRASS, ROAD, CASTLE, CASTLE_END } \ No newline at end of file diff --git a/src/de/deadlocker8/roadgame/logic/ScorePosition.java b/src/de/deadlocker8/roadgame/logic/ScorePosition.java new file mode 100644 index 0000000000000000000000000000000000000000..9c6e337e5feb5f735394419889e23397425d06ce --- /dev/null +++ b/src/de/deadlocker8/roadgame/logic/ScorePosition.java @@ -0,0 +1,6 @@ +package de.deadlocker8.roadgame.logic; + +public enum ScorePosition +{ + NORTH, EAST, SOUTH, WEST, CENTER +} \ 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 567485195e7f2108780692030a56c45d60ad29aa..c52bf9a88bda32806e41be0abd48fa186bda3a4a 100644 --- a/src/de/deadlocker8/roadgame/logic/Textures.java +++ b/src/de/deadlocker8/roadgame/logic/Textures.java @@ -62,5 +62,5 @@ public class Textures public Image getImageCenterRoad() { return imageCenterRoad; - } + } } \ 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 a7a52bccc3fa19536ce1ddf9ea8157fa1132b331..af60820e5bc010b94e0a887b5e830e27ec915651 100644 --- a/src/de/deadlocker8/roadgame/logic/Tile.java +++ b/src/de/deadlocker8/roadgame/logic/Tile.java @@ -4,35 +4,30 @@ import javafx.geometry.Point2D; public class Tile { + private TileType type; private EdgeType N; private EdgeType E; private EdgeType S; private EdgeType W; private CenterType C; private Point2D position; + //TODO use + private boolean marked; - public Tile(EdgeType N, EdgeType E, EdgeType S, EdgeType W, CenterType C, int x, int y) + public Tile(TileType type, int x, int y) { - this.N = N; - this.E = E; - this.S = S; - this.W = W; - this.C = C; + this.type = type; + this.N = type.getN(); + this.E = type.getE(); + this.S = type.getS(); + this.W = type.getW(); + this.C = type.getC(); this.position = new Point2D(x, y); } - 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; - } - public Tile(TileType type) { + this.type = type; this.N = type.getN(); this.E = type.getE(); this.S = type.getS(); @@ -65,6 +60,11 @@ public class Tile { return C; } + + public TileType getType() + { + return type; + } public Point2D getPosition() { diff --git a/src/de/deadlocker8/roadgame/logic/TileType.java b/src/de/deadlocker8/roadgame/logic/TileType.java index 3ce5f9951fbf03d627d05293167a81e2580e7909..8e42011af8641c3e7e922f7ac029e555fdcfaff9 100644 --- a/src/de/deadlocker8/roadgame/logic/TileType.java +++ b/src/de/deadlocker8/roadgame/logic/TileType.java @@ -3,11 +3,11 @@ package de.deadlocker8.roadgame.logic; public enum TileType { //only roads - ROAD_END(EdgeType.ROAD, EdgeType.GRASS, EdgeType.GRASS, EdgeType.GRASS, CenterType.EMPTY), + ROAD_END(EdgeType.ROAD, EdgeType.GRASS, EdgeType.GRASS, EdgeType.GRASS, CenterType.JUNCTION), 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), + ROAD_T_JUNCTION(EdgeType.ROAD, EdgeType.ROAD, EdgeType.ROAD, EdgeType.GRASS, CenterType.JUNCTION), + ROAD_X_JUNCTION(EdgeType.ROAD, EdgeType.ROAD, EdgeType.ROAD, EdgeType.ROAD, CenterType.JUNCTION), //roads with churches ROAD_END_CHURCH(EdgeType.ROAD, EdgeType.GRASS, EdgeType.GRASS, EdgeType.GRASS, CenterType.CHURCH), @@ -17,11 +17,11 @@ public enum TileType ROAD_X_JUNCTION_CHURCH(EdgeType.ROAD, EdgeType.ROAD, EdgeType.ROAD, EdgeType.ROAD, CenterType.CHURCH), //single castles - 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_SINGLE(EdgeType.CASTLE_END, EdgeType.GRASS, EdgeType.GRASS, EdgeType.GRASS,CenterType.EMPTY), + CASTLE_TWO_SINGLE_OPPOSITE(EdgeType.CASTLE_END, EdgeType.GRASS, EdgeType.CASTLE_END, EdgeType.GRASS, CenterType.EMPTY), + CASTLE_TWO_SINGLE_NEIGHBOR(EdgeType.CASTLE_END, EdgeType.CASTLE_END, EdgeType.GRASS, EdgeType.GRASS, CenterType.EMPTY), + CASTLE_THREE_SINGLE(EdgeType.CASTLE_END, EdgeType.CASTLE_END, EdgeType.CASTLE_END, EdgeType.GRASS, CenterType.EMPTY), + CASTLE_FOUR_SINGLE(EdgeType.CASTLE_END, EdgeType.CASTLE_END, EdgeType.CASTLE_END, EdgeType.CASTLE_END, CenterType.EMPTY), //special castles CASTLE_TRIANGLE(EdgeType.CASTLE, EdgeType.CASTLE, EdgeType.GRASS, EdgeType.GRASS, CenterType.CASTLE_TRIANGLE), @@ -30,16 +30,16 @@ public enum TileType CASTLE_U(EdgeType.CASTLE, EdgeType.CASTLE, EdgeType.CASTLE, EdgeType.GRASS, CenterType.CASTLE), //single castles with roads - 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_SINGLE_ROAD_END_IN_CASTLE(EdgeType.CASTLE, EdgeType.GRASS, EdgeType.ROAD, EdgeType.GRASS, CenterType.ROAD), - CASTLE_SINGLE_ROAD_CURVE_RIGHT_END_IN_CASTLE(EdgeType.CASTLE, EdgeType.ROAD, EdgeType.GRASS, EdgeType.GRASS,CenterType.ROAD), - CASTLE_SINGLE_ROAD_CURVE_LEFT_END_IN_CASTLE(EdgeType.CASTLE, EdgeType.GRASS, EdgeType.GRASS, EdgeType.ROAD,CenterType.ROAD), - 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), + CASTLE_SINGLE_ROAD_STRAIGHT(EdgeType.CASTLE_END, EdgeType.ROAD, EdgeType.GRASS, EdgeType.ROAD, CenterType.EMPTY), + CASTLE_SINGLE_ROAD_CURVE_RIGHT(EdgeType.CASTLE_END, EdgeType.ROAD, EdgeType.ROAD, EdgeType.GRASS, CenterType.EMPTY), + CASTLE_SINGLE_ROAD_CURVE_LEFT(EdgeType.CASTLE_END, EdgeType.GRASS, EdgeType.ROAD, EdgeType.ROAD, CenterType.EMPTY), + CASTLE_SINGLE_ROAD_T_JUNCTION(EdgeType.CASTLE_END, EdgeType.ROAD, EdgeType.ROAD, EdgeType.ROAD, CenterType.JUNCTION), + CASTLE_SINGLE_ROAD_END_IN_CASTLE(EdgeType.CASTLE_END, EdgeType.GRASS, EdgeType.ROAD, EdgeType.GRASS, CenterType.JUNCTION), + CASTLE_SINGLE_ROAD_CURVE_RIGHT_END_IN_CASTLE(EdgeType.CASTLE_END, EdgeType.ROAD, EdgeType.GRASS, EdgeType.GRASS, CenterType.ROAD), + CASTLE_SINGLE_ROAD_CURVE_LEFT_END_IN_CASTLE(EdgeType.CASTLE_END, EdgeType.GRASS, EdgeType.GRASS, EdgeType.ROAD, CenterType.ROAD), + CASTLE_TWO_SINGLE_OPPOSITE_ROAD_STRAIGHT(EdgeType.CASTLE_END, EdgeType.ROAD, EdgeType.CASTLE_END, EdgeType.ROAD, CenterType.EMPTY), + CASTLE_TWO_SINGLE_NEIGHBOR_ROAD_CURVE(EdgeType.CASTLE_END, EdgeType.CASTLE_END, EdgeType.ROAD, EdgeType.ROAD, CenterType.EMPTY), + CASTLE_THREE_SINGLE_ROAD_END(EdgeType.CASTLE_END, EdgeType.CASTLE_END, EdgeType.CASTLE_END, EdgeType.ROAD, CenterType.JUNCTION), //special castles with roads CASTLE_TRIANGLE_ROAD_CURVE(EdgeType.CASTLE, EdgeType.CASTLE, EdgeType.ROAD, EdgeType.ROAD, CenterType.CASTLE_TRIANGLE), diff --git a/src/de/deadlocker8/roadgame/tilepacks/TilePackOneTile.java b/src/de/deadlocker8/roadgame/tilepacks/TilePackOneTile.java new file mode 100644 index 0000000000000000000000000000000000000000..9f3a1ed2b93dbdcdef303ebc0b63735428a8bfc5 --- /dev/null +++ b/src/de/deadlocker8/roadgame/tilepacks/TilePackOneTile.java @@ -0,0 +1,16 @@ +package de.deadlocker8.roadgame.tilepacks; + +import java.util.HashMap; + +import de.deadlocker8.roadgame.logic.TileType; + +public class TilePackOneTile extends TilePack +{ + public TilePackOneTile() + { + super("Test"); + + tiles = new HashMap<>(); + tiles.put(TileType.ROAD_X_JUNCTION, 1); + } +} \ No newline at end of file diff --git a/src/de/deadlocker8/roadgame/tilepacks/TilePackTest2.java b/src/de/deadlocker8/roadgame/tilepacks/TilePackTest2.java index f3c6919237bb2b81f93c1a3b2f31094f301f58c3..32ed8ce013d1f5e1900718c79647387154467de2 100644 --- a/src/de/deadlocker8/roadgame/tilepacks/TilePackTest2.java +++ b/src/de/deadlocker8/roadgame/tilepacks/TilePackTest2.java @@ -11,8 +11,7 @@ public class TilePackTest2 extends TilePack super("Test 2"); tiles = new HashMap<>(); - tiles.put(TileType.ROAD_END, 1); tiles.put(TileType.CASTLE_FULL, 1); - tiles.put(TileType.ROAD_CURVE, 1); + tiles.put(TileType.CASTLE_TRIANGLE, 1); } } \ No newline at end of file diff --git a/src/de/deadlocker8/roadgame/ui/Controller.java b/src/de/deadlocker8/roadgame/ui/Controller.java index 529a1177743ba7a3638b19e10b18b2a67741f40c..4aff9702cb13d289403053b119ca8cc098064087 100644 --- a/src/de/deadlocker8/roadgame/ui/Controller.java +++ b/src/de/deadlocker8/roadgame/ui/Controller.java @@ -248,6 +248,8 @@ public class Controller return new ImageView(textures.getImageRoad()); case CASTLE: return new ImageView(textures.getImageCastle()); + case CASTLE_END: + return new ImageView(textures.getImageCastle()); default: return new ImageView(textures.getImageEmpty()); } diff --git a/src/de/deadlocker8/roadgame/ui/Scoring.java b/src/de/deadlocker8/roadgame/ui/Scoring.java new file mode 100644 index 0000000000000000000000000000000000000000..6ca23643bb360e6b402a503185f2c62c1843fabb --- /dev/null +++ b/src/de/deadlocker8/roadgame/ui/Scoring.java @@ -0,0 +1,328 @@ +package de.deadlocker8.roadgame.ui; + +import de.deadlocker8.roadgame.logic.Board; +import de.deadlocker8.roadgame.logic.CenterType; +import de.deadlocker8.roadgame.logic.EdgeType; +import de.deadlocker8.roadgame.logic.ScorePosition; +import de.deadlocker8.roadgame.logic.Tile; +import de.deadlocker8.roadgame.logic.TileType; +import de.deadlocker8.roadgame.tilepacks.TilePackOneTile; +import javafx.geometry.Point2D; + +public class Scoring +{ + private Tile tileToScore; + private Tile tile; + private Board board; + private int x; + private int y; + private int points; + + public Scoring(Tile tile, Board board) + { + this.tile = tile; + this.board = board; + Point2D position = tile.getPosition(); + this.x = (int)position.getX(); + this.y = (int)position.getY(); + points = 1; + tileToScore = tile; + this.tile = tile; + } + + private void setTile(Tile nextTile) + { + this.tile = nextTile; + this.x = (int)nextTile.getPosition().getX(); + this.y = (int)nextTile.getPosition().getY(); + } + + public int getScoreForTile(ScorePosition scorePosition) + { + switch(scorePosition) + { + case CENTER: + scoreCenter(); + break; + case NORTH: + scoreEdge(tile.getN(), scorePosition); + break; + case EAST: + scoreEdge(tile.getE(), scorePosition); + break; + case SOUTH: + scoreEdge(tile.getS(), scorePosition); + break; + case WEST: + scoreEdge(tile.getW(), scorePosition); + break; + default: + break; + } + + return points; + } + + private void scoreEdge(EdgeType edgeType, ScorePosition scorePosition) + { + switch(edgeType) + { + case CASTLE: + scoreCastle(scorePosition); + break; + case CASTLE_END: + scoreCastle(scorePosition); + break; + // TODO + case GRASS: + break; + case ROAD: + scoreRoad(scorePosition); + break; + default: + break; + } + } + + private void scoreCenter() + { + switch(tile.getC()) + { + case CASTLE: + scoreCastle(null); + break; + case CASTLE_TRIANGLE: + scoreCastle(null); + break; + case CHURCH: + scoreChurch(); + break; + case JUNCTION: + scoreRoad(null); + break; + case ROAD: + scoreRoad(null); + break; + default: + break; + } + } + + private void scoreChurch() + { + // North + points = board.containsTileAtPosition(x, y - 1) ? points += 1 : points; + + // North-East + points = board.containsTileAtPosition(x + 1, y - 1) ? points += 1 : points; + + // East + points = board.containsTileAtPosition(x + 1, y) ? points += 1 : points; + + // South-East + points = board.containsTileAtPosition(x + 1, y + 1) ? points += 1 : points; + + // South + points = board.containsTileAtPosition(x, y + 1) ? points += 1 : points; + + // South-West + points = board.containsTileAtPosition(x - 1, y + 1) ? points += 1 : points; + + // West + points = board.containsTileAtPosition(x - 1, y) ? points += 1 : points; + + // North-West + points = board.containsTileAtPosition(x - 1, y - 1) ? points += 1 : points; + } + + private void scoreRoad(ScorePosition scorePosition) + { + switch(scorePosition) + { + case NORTH: + if(board.containsTileAtPosition(x, y - 1)) + { + Tile nextTile = board.getTile(x, y - 1); + if(nextTile.getS().equals(tile.getN())) + { + if(nextTile.getC().equals(CenterType.EMPTY)) + { + if(nextTile.getN().equals(EdgeType.ROAD)) + { + setTile(nextTile); + scoreRoad(ScorePosition.NORTH); + return; + } + + if(nextTile.getE().equals(EdgeType.ROAD)) + { + setTile(nextTile); + scoreRoad(ScorePosition.EAST); + return; + } + + if(nextTile.getW().equals(EdgeType.ROAD)) + { + setTile(nextTile); + scoreRoad(ScorePosition.WEST); + return; + } + } + else + { + points++; + } + } + else + { + points++; + } + } + break; + case EAST: + if(board.containsTileAtPosition(x + 1, y)) + { + Tile nextTile = board.getTile(x + 1, y); + if(nextTile.getW().equals(tile.getE())) + { + if(nextTile.getC().equals(CenterType.EMPTY)) + { + if(nextTile.getN().equals(EdgeType.ROAD)) + { + setTile(nextTile); + scoreRoad(ScorePosition.NORTH); + return; + } + + if(nextTile.getE().equals(EdgeType.ROAD)) + { + setTile(nextTile); + scoreRoad(ScorePosition.EAST); + return; + } + + if(nextTile.getS().equals(EdgeType.ROAD)) + { + setTile(nextTile); + scoreRoad(ScorePosition.SOUTH); + return; + } + } + else + { + points++; + } + } + else + { + points++; + } + } + break; + case SOUTH: + if(board.containsTileAtPosition(x, y + 1)) + { + Tile nextTile = board.getTile(x, y + 1); + if(nextTile.getN().equals(tile.getS())) + { + if(nextTile.getC().equals(CenterType.EMPTY)) + { + if(nextTile.getE().equals(EdgeType.ROAD)) + { + setTile(nextTile); + scoreRoad(ScorePosition.EAST); + return; + } + + if(nextTile.getS().equals(EdgeType.ROAD)) + { + setTile(nextTile); + scoreRoad(ScorePosition.SOUTH); + return; + } + + if(nextTile.getW().equals(EdgeType.ROAD)) + { + setTile(nextTile); + scoreRoad(ScorePosition.WEST); + return; + } + } + else + { + points++; + } + } + else + { + points++; + } + } + break; + case WEST: + if(board.containsTileAtPosition(x - 1, y)) + { + Tile nextTile = board.getTile(x - 1, y); + if(nextTile.getN().equals(tile.getS())) + { + if(nextTile.getC().equals(CenterType.EMPTY)) + { + if(nextTile.getE().equals(EdgeType.ROAD)) + { + setTile(nextTile); + scoreRoad(ScorePosition.EAST); + return; + } + + if(nextTile.getS().equals(EdgeType.ROAD)) + { + setTile(nextTile); + scoreRoad(ScorePosition.SOUTH); + return; + } + + if(nextTile.getN().equals(EdgeType.ROAD)) + { + setTile(nextTile); + scoreRoad(ScorePosition.NORTH); + return; + } + } + else + { + points++; + } + } + else + { + points++; + } + } + break; + default: + break; + } + } + + private void scoreCastle(ScorePosition scorePosition) + { + + } + + public static void main(String[] args) + { + Board b = new Board(new TilePackOneTile()); + Scoring s = new Scoring(b.getTile(0, 0), b); + + Tile t = new Tile(TileType.ROAD_STRAIGHT); + t.setPosition(new Point2D(0, -1)); + if(!t.getN().equals(EdgeType.ROAD)) + { + t.rotateRight(); + } + + b.addTile(t); + System.out.println(b.getTile(0, 0)); + System.out.println(s.getScoreForTile(ScorePosition.NORTH)); + } +} \ No newline at end of file