diff --git a/bin/de/deadlocker8/roadgame/logic/Board.class b/bin/de/deadlocker8/roadgame/logic/Board.class new file mode 100644 index 0000000000000000000000000000000000000000..67c2f435d1d683a1649aed224b3d0b63b7b447c8 Binary files /dev/null and b/bin/de/deadlocker8/roadgame/logic/Board.class differ diff --git a/bin/de/deadlocker8/roadgame/logic/EdgeLocation.class b/bin/de/deadlocker8/roadgame/logic/EdgeLocation.class new file mode 100644 index 0000000000000000000000000000000000000000..2e30acec68827afdaa3753d490563845c18a33b3 Binary files /dev/null and b/bin/de/deadlocker8/roadgame/logic/EdgeLocation.class differ diff --git a/bin/de/deadlocker8/roadgame/logic/EdgeType.class b/bin/de/deadlocker8/roadgame/logic/EdgeType.class new file mode 100644 index 0000000000000000000000000000000000000000..182bf379e3f568a0046606bc46906f13cdebc40b Binary files /dev/null and b/bin/de/deadlocker8/roadgame/logic/EdgeType.class differ diff --git a/bin/de/deadlocker8/roadgame/logic/Game.class b/bin/de/deadlocker8/roadgame/logic/Game.class new file mode 100644 index 0000000000000000000000000000000000000000..44f929ab90a24829c036ba5aa5cab17c2606bf18 Binary files /dev/null and b/bin/de/deadlocker8/roadgame/logic/Game.class differ diff --git a/bin/de/deadlocker8/roadgame/logic/PossibleTiles.class b/bin/de/deadlocker8/roadgame/logic/PossibleTiles.class new file mode 100644 index 0000000000000000000000000000000000000000..62a871ec775db2b0725cba3a1219ed35a6d928ae Binary files /dev/null and b/bin/de/deadlocker8/roadgame/logic/PossibleTiles.class differ diff --git a/bin/de/deadlocker8/roadgame/logic/Tile.class b/bin/de/deadlocker8/roadgame/logic/Tile.class new file mode 100644 index 0000000000000000000000000000000000000000..92941ac05dd70be679e86675dcf9ce735231ae5b Binary files /dev/null and b/bin/de/deadlocker8/roadgame/logic/Tile.class differ diff --git a/src/de/deadlocker8/roadgame/logic/Board.java b/src/de/deadlocker8/roadgame/logic/Board.java new file mode 100644 index 0000000000000000000000000000000000000000..784dd28b4f6f8d6d0db4e0aee4e68378dbd75508 --- /dev/null +++ b/src/de/deadlocker8/roadgame/logic/Board.java @@ -0,0 +1,155 @@ +package de.deadlocker8.roadgame.logic; + +import java.util.ArrayList; + +import javafx.geometry.Point2D; + +public class Board +{ + private ArrayList<Tile> tiles; + private PossibleTiles possibleTiles; + + public Board() + { + this.tiles = new ArrayList<>(); + this.possibleTiles = new PossibleTiles(); + initBoard(); + } + + private void initBoard() + { + Tile startTile = possibleTiles.getRandomTile(); + startTile.setPosition(new Point2D(0, 0)); + + tiles.add(startTile); + } + + public ArrayList<Tile> getTiles() + { + return tiles; + } + + public boolean containsTileAtPosition(int x, int y) + { + for(Tile currentTile : tiles) + { + if((int)currentTile.getPosition().getX() == x && (int)currentTile.getPosition().getY() == y) + { + 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(tile.getN().equals(playerTile.getS())) + { + freeEdges.add(new Point2D(x, y-1)); + } + } + + //East + if(!containsTileAtPosition(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())) + { + freeEdges.add(new Point2D(x, y+1)); + } + } + + //West + if(!containsTileAtPosition(x-1, y)) + { + if(tile.getW().equals(playerTile.getE())) + { + freeEdges.add(new Point2D(x-1, y)); + } + } + + return freeEdges; + } + + public ArrayList<Point2D> getPossibleLocations(Tile tile) + { + ArrayList<Point2D> possibleLocations = new ArrayList<>(); + + for(Tile currentTile : tiles) + { + possibleLocations.addAll(getFreeEdges(currentTile, tile)); + } + + return possibleLocations; + } + + public int getWidth() + { + int minX = 0; + int maxX = 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(); + } + } + + 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(); + } + + if((int)currentTile.getPosition().getX() > maxY) + { + maxY = (int)currentTile.getPosition().getY(); + } + } + + return Math.abs(minY) + maxY + 1; + } + + public void addTile(Tile tile) + { + tiles.add(tile); + } + + @Override + public String toString() + { + return "Board [tiles=" + tiles + "]"; + } +} \ No newline at end of file diff --git a/src/de/deadlocker8/roadgame/logic/EdgeLocation.java b/src/de/deadlocker8/roadgame/logic/EdgeLocation.java new file mode 100644 index 0000000000000000000000000000000000000000..2d59d25148378ee2848452b30e4add21787b7cb4 --- /dev/null +++ b/src/de/deadlocker8/roadgame/logic/EdgeLocation.java @@ -0,0 +1,6 @@ +package de.deadlocker8.roadgame.logic; + +public enum EdgeLocation +{ + NORTH, EAST, SOUTH, WEST +} \ No newline at end of file diff --git a/src/de/deadlocker8/roadgame/logic/EdgeType.java b/src/de/deadlocker8/roadgame/logic/EdgeType.java new file mode 100644 index 0000000000000000000000000000000000000000..54f9903224cffd205608d121401213d0ded8edeb --- /dev/null +++ b/src/de/deadlocker8/roadgame/logic/EdgeType.java @@ -0,0 +1,6 @@ +package de.deadlocker8.roadgame.logic; + +public enum EdgeType +{ + GRASS, ROAD +} \ No newline at end of file diff --git a/src/de/deadlocker8/roadgame/logic/Game.java b/src/de/deadlocker8/roadgame/logic/Game.java new file mode 100644 index 0000000000000000000000000000000000000000..73e77070a990b0034ad3bd4ffc7916141f193fa4 --- /dev/null +++ b/src/de/deadlocker8/roadgame/logic/Game.java @@ -0,0 +1,50 @@ +package de.deadlocker8.roadgame.logic; + +import java.util.ArrayList; + +import javafx.geometry.Point2D; + +public class Game +{ + private Board board; + private PossibleTiles possibleTiles; + + public Game() + { + board = new Board(); + possibleTiles = new PossibleTiles(); + System.out.println(board); + } + + public Tile getNextTile() + { + return possibleTiles.getRandomTile(); + } + + public ArrayList<Point2D> getPossibleLocations(Tile tile) + { + return board.getPossibleLocations(tile); + } + + public void placeTile(Tile tile, Point2D position) + { + tile.setPosition(position); + board.addTile(tile); + } + + public static void main(String[] args) + { + Game g = new Game(); + Tile t = g.getNextTile(); + System.out.println(t); + System.out.println(g.getPossibleLocations(t)); + System.out.println(g.board.getWidth()); + System.out.println(g.board.getHeight()); + + g.placeTile(t, g.getPossibleLocations(t).get(0)); + System.out.println(g.board); + + System.out.println(g.board.getWidth()); + System.out.println(g.board.getHeight()); + } +} \ No newline at end of file diff --git a/src/de/deadlocker8/roadgame/logic/PossibleTiles.java b/src/de/deadlocker8/roadgame/logic/PossibleTiles.java new file mode 100644 index 0000000000000000000000000000000000000000..4a5e6d8c443ae3d46e3f956541560d340c327e23 --- /dev/null +++ b/src/de/deadlocker8/roadgame/logic/PossibleTiles.java @@ -0,0 +1,41 @@ +package de.deadlocker8.roadgame.logic; + +import java.util.ArrayList; +import java.util.Random; + +public class PossibleTiles +{ + private ArrayList<Tile> possibleTiles; + + public PossibleTiles() + { + possibleTiles = new ArrayList<>(); + //curve + possibleTiles.add(new Tile(EdgeType.ROAD, EdgeType.ROAD, EdgeType.GRASS, EdgeType.GRASS)); + //straight + possibleTiles.add(new Tile(EdgeType.ROAD, EdgeType.GRASS, EdgeType.ROAD, EdgeType.GRASS)); + //T-tile + possibleTiles.add(new Tile(EdgeType.ROAD, EdgeType.ROAD, EdgeType.ROAD, EdgeType.GRASS)); + } + + public ArrayList<Tile> getPossibleTiles() + { + return possibleTiles; + } + + public Tile getRandomTile() + { + Random random = new Random(); + int index = random.nextInt(possibleTiles.size()); + Tile tile = possibleTiles.get(index); + + //random rotation + int rotate = random.nextInt(3); + for(int i = 0; i < rotate; i++) + { + tile.rotateRight(); + } + + return tile; + } +} \ No newline at end of file diff --git a/src/de/deadlocker8/roadgame/logic/Tile.java b/src/de/deadlocker8/roadgame/logic/Tile.java new file mode 100644 index 0000000000000000000000000000000000000000..297fed9f4fe75d7a179c3063a0b17ac5d318c438 --- /dev/null +++ b/src/de/deadlocker8/roadgame/logic/Tile.java @@ -0,0 +1,84 @@ +package de.deadlocker8.roadgame.logic; + +import javafx.geometry.Point2D; + +public class Tile +{ + private EdgeType N; + private EdgeType E; + private EdgeType S; + private EdgeType W; + private Point2D position; + + public Tile(EdgeType N, EdgeType E, EdgeType S, EdgeType W, int x, int y) + { + this.N = N; + this.E = E; + this.S = S; + this.W = W; + this.position = new Point2D(x, y); + } + + public Tile(EdgeType N, EdgeType E, EdgeType S, EdgeType W) + { + this.N = N; + this.E = E; + this.S = S; + this.W = W; + this.position = null; + } + + public EdgeType getN() + { + return N; + } + + public EdgeType getE() + { + return E; + } + + public EdgeType getS() + { + return S; + } + + public EdgeType getW() + { + return W; + } + + public Point2D getPosition() + { + return position; + } + + public void setPosition(Point2D position) + { + this.position = position; + } + + public void rotateRight() + { + EdgeType temp = N; + N = W; + W = S; + S = E; + E = temp; + } + + public void rotateLeft() + { + EdgeType temp = N; + N = E; + E = S; + S = W; + W = temp; + } + + @Override + public String toString() + { + return "Tile [N=" + N + ", E=" + E + ", S=" + S + ", W=" + W + ", position=" + position + "]"; + } +} \ No newline at end of file