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