diff --git a/class/application/Controller$1.class b/class/application/Controller$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..51b66919e71c48372e4c9fa9a1ea11909dccc0b2
Binary files /dev/null and b/class/application/Controller$1.class differ
diff --git a/class/application/Controller.class b/class/application/Controller.class
index 9e09295f37fd6a40e3d5de34efcbe6a8cde20d4e..6266957965d0fc7670da3eab97f411957e16d2aa 100644
Binary files a/class/application/Controller.class and b/class/application/Controller.class differ
diff --git a/class/application/MainGUI.fxml b/class/application/MainGUI.fxml
index e92780c0a7a3a7bb2b4113422cae8dfd6ccc9a13..a6a521c7ea37697baa6dcb4a0347695000b69b8a 100644
--- a/class/application/MainGUI.fxml
+++ b/class/application/MainGUI.fxml
@@ -1,13 +1,21 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
+<?import javafx.scene.control.Label?>
 <?import javafx.scene.image.ImageView?>
 <?import javafx.scene.layout.AnchorPane?>
 <?import javafx.scene.layout.HBox?>
+<?import javafx.scene.text.Font?>
 
 <AnchorPane prefHeight="600.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.Controller">
    <children>
-      <HBox fx:id="hboxPlayerDeck" layoutX="83.0" layoutY="450.0" prefHeight="107.0" prefWidth="634.0" />
+      <HBox fx:id="hboxPlayerDeck" alignment="CENTER" layoutX="83.0" layoutY="450.0" prefHeight="107.0" prefWidth="634.0" />
       <ImageView fx:id="iconDeck" fitHeight="90.0" fitWidth="57.0" layoutX="447.0" layoutY="230.0" pickOnBounds="true" preserveRatio="true" />
       <ImageView fx:id="iconLastCard" fitHeight="90.0" fitWidth="57.0" layoutX="277.0" layoutY="230.0" pickOnBounds="true" preserveRatio="true" />
+      <HBox fx:id="hboxAI1" layoutX="246.0" layoutY="31.0" prefHeight="107.0" prefWidth="309.0" />
+      <Label fx:id="labelCurrentPlayer" alignment="CENTER" contentDisplay="CENTER" layoutX="320.0" layoutY="377.0" prefHeight="31.0" prefWidth="162.0" textAlignment="CENTER">
+         <font>
+            <Font name="System Bold" size="19.0" />
+         </font>
+      </Label>
    </children>
 </AnchorPane>
diff --git a/class/logic/AI.class b/class/logic/AI.class
index 2244de046670dc6c2f863e8836304ceb02c3c410..653ed62e7299254dd07b0cfe2810c0db4bc913c5 100644
Binary files a/class/logic/AI.class and b/class/logic/AI.class differ
diff --git a/class/logic/Game.class b/class/logic/Game.class
index 2c08991143131323f6c047ab596d63d1fabdf01e..c148f6bd2cd1beeec9a4af410ccf6433248bb8e8 100644
Binary files a/class/logic/Game.class and b/class/logic/Game.class differ
diff --git a/class/logic/Player.class b/class/logic/Player.class
index bd82c537dc81df483d302da92a725af1f010820f..8f921401c014056841767dd73eb99de384d60a20 100644
Binary files a/class/logic/Player.class and b/class/logic/Player.class differ
diff --git a/src/application/Controller.java b/src/application/Controller.java
index d048273a24a8c3b1960d98023e93a548e7629223..e889885b3373f5a0accf72b4172af7ce86b50949 100644
--- a/src/application/Controller.java
+++ b/src/application/Controller.java
@@ -4,12 +4,15 @@ import java.util.ArrayList;
 import java.util.Locale;
 import java.util.ResourceBundle;
 
+import javafx.event.EventHandler;
 import javafx.fxml.FXML;
 import javafx.geometry.Insets;
 import javafx.scene.control.Alert;
 import javafx.scene.control.Alert.AlertType;
+import javafx.scene.control.Label;
 import javafx.scene.image.Image;
 import javafx.scene.image.ImageView;
+import javafx.scene.input.MouseEvent;
 import javafx.scene.layout.HBox;
 import javafx.stage.Stage;
 import logic.Card;
@@ -21,19 +24,22 @@ public class Controller
 {
 	@FXML private ImageView iconLastCard;
 	@FXML private ImageView iconDeck;
-	@FXML private HBox hboxPlayerDeck;	
-	
+	@FXML private HBox hboxPlayerDeck;
+	@FXML private HBox hboxAI1;
+	@FXML private Label labelCurrentPlayer;
+
 	public Game game;
-	
+
 	public Stage stage;
 	public Image icon = new Image("images/icon.png");
 	private final ResourceBundle bundle = ResourceBundle.getBundle("application/", Locale.GERMANY);
 
 	public void init()
 	{
-		iconDeck.setImage(createBackCard());		
-		
-		game = new Game(this, 3);
+		iconDeck.setImage(createBackCard());
+
+		// DEBUG
+		game = new Game(this, 1);
 		game.newGame(5);
 	}
 
@@ -41,53 +47,97 @@ public class Controller
 	{
 		this.stage = stage;
 	}
-	
+
+	public void setLabelCurrentPlayer(String text)
+	{
+		labelCurrentPlayer.setText(text);
+	}
+
 	public void setLastCard(Card card)
 	{
 		iconLastCard.setImage(createCard(card, true).getImage());
 	}
-	
+
 	private Image createBackCard()
-	{		
-		return new Image("images/card-back.png");		
+	{
+		return new Image("images/card-back.png");
 	}
-	
+
 	private ImageView createCard(Card card, boolean valid)
-	{			
+	{
 		ImageView imageView = new ImageView(new Image("images/" + card.getType() + "-" + card.getColor() + ".png"));
 		imageView.setFitHeight(90.0);
-		imageView.setFitWidth(57.0);			
-				
+		imageView.setFitWidth(57.0);
+
+		if(!valid)
+		{			
+			//TODO
+//			imageView.setImage(new Image("images/transparent/" + card.getType() + "-" + card.getColor() + ".png"));
+//			imageView.setStyle("-fx-background-color: transparent;");
+		}
+
+		imageView.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>()
+		{
+			@Override
+			public void handle(MouseEvent event)
+			{
+				if(valid)
+				{
+					Color newWishColor = null;
+
+					if(card.getType().equals(CardType.WILD) || card.getType().equals(CardType.DRAW_FOUR))
+					{
+						// TODO chose wishColor
+					}
+
+					game.playCard(game.getPlayer().playCard(card), newWishColor);
+				}
+			}
+		});
+
 		return imageView;
 	}
-		
+
 	public void setPlayerDeck(ArrayList<Card> deck)
 	{
-		hboxPlayerDeck.getChildren().clear();		
-		
+		hboxPlayerDeck.getChildren().clear();
+
 		for(Card currentCard : deck)
 		{
 			hboxPlayerDeck.getChildren().add(createCard(currentCard, true));
-			HBox.setMargin(hboxPlayerDeck.getChildren().get(hboxPlayerDeck.getChildren().size() - 1), new Insets(0,15,0,0));			
+			HBox.setMargin(hboxPlayerDeck.getChildren().get(hboxPlayerDeck.getChildren().size() - 1), new Insets(0, 15, 0, 0));
 		}
-	}	
-	
+	}
+
+	// TODO other AIs
+	// TODO set Cards to back
+	public void setAI1Deck(ArrayList<Card> deck)
+	{
+		hboxAI1.getChildren().clear();
+
+		for(Card currentCard : deck)
+		{
+			hboxAI1.getChildren().add(createCard(currentCard, true));
+			HBox.setMargin(hboxAI1.getChildren().get(hboxAI1.getChildren().size() - 1), new Insets(0, 15, 0, 0));
+		}
+	}
+
 	public void setValidPlayerDeck(ArrayList<Card> deck, ArrayList<Card> validDeck)
-	{	
+	{
 		for(Card currentCard : deck)
 		{
 			if(validDeck.contains(currentCard))
 			{
 				hboxPlayerDeck.getChildren().add(createCard(currentCard, true));
-			}		
+			}
 			else
 			{
 				hboxPlayerDeck.getChildren().add(createCard(currentCard, false));
 			}
-			
-			HBox.setMargin(hboxPlayerDeck.getChildren().get(hboxPlayerDeck.getChildren().size() - 1), new Insets(0,15,0,0));				
+
+			HBox.setMargin(hboxPlayerDeck.getChildren().get(hboxPlayerDeck.getChildren().size() - 1), new Insets(0, 15, 0, 0));
 		}
-	}	
+	}
 
 	public void about()
 	{
diff --git a/src/application/MainGUI.fxml b/src/application/MainGUI.fxml
index e92780c0a7a3a7bb2b4113422cae8dfd6ccc9a13..a6a521c7ea37697baa6dcb4a0347695000b69b8a 100644
--- a/src/application/MainGUI.fxml
+++ b/src/application/MainGUI.fxml
@@ -1,13 +1,21 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
+<?import javafx.scene.control.Label?>
 <?import javafx.scene.image.ImageView?>
 <?import javafx.scene.layout.AnchorPane?>
 <?import javafx.scene.layout.HBox?>
+<?import javafx.scene.text.Font?>
 
 <AnchorPane prefHeight="600.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.Controller">
    <children>
-      <HBox fx:id="hboxPlayerDeck" layoutX="83.0" layoutY="450.0" prefHeight="107.0" prefWidth="634.0" />
+      <HBox fx:id="hboxPlayerDeck" alignment="CENTER" layoutX="83.0" layoutY="450.0" prefHeight="107.0" prefWidth="634.0" />
       <ImageView fx:id="iconDeck" fitHeight="90.0" fitWidth="57.0" layoutX="447.0" layoutY="230.0" pickOnBounds="true" preserveRatio="true" />
       <ImageView fx:id="iconLastCard" fitHeight="90.0" fitWidth="57.0" layoutX="277.0" layoutY="230.0" pickOnBounds="true" preserveRatio="true" />
+      <HBox fx:id="hboxAI1" layoutX="246.0" layoutY="31.0" prefHeight="107.0" prefWidth="309.0" />
+      <Label fx:id="labelCurrentPlayer" alignment="CENTER" contentDisplay="CENTER" layoutX="320.0" layoutY="377.0" prefHeight="31.0" prefWidth="162.0" textAlignment="CENTER">
+         <font>
+            <Font name="System Bold" size="19.0" />
+         </font>
+      </Label>
    </children>
 </AnchorPane>
diff --git a/src/logic/AI.java b/src/logic/AI.java
index 182d1d2f40cf248e4074aa2ef9adecc8c6391516..6dbd96ab03bbb39447ee3682b394bb18bee71d37 100644
--- a/src/logic/AI.java
+++ b/src/logic/AI.java
@@ -110,6 +110,11 @@ public class AI
 	{
 		return name;
 	}
+	
+	public ArrayList<Card> getDeck()
+	{
+		return deck;
+	}
 
 	public void turn(Card lastCard, Color wishColor, boolean challenge)
 	{
@@ -123,12 +128,14 @@ public class AI
 				drawCards(game.getDeck().drawCards(game.getChallengeCounter(), game.getDeadDeck()));	
 				System.out.println("draw " + game.getChallengeCounter() + " cards");
 				System.out.println("deack after draw: " + deck);
+				game.draw();
 			}
 			else
 			{
 				drawCard(game.getDeck().drawCard(game.getDeadDeck()));	
 				System.out.println("draw one card");
 				System.out.println("deack after draw: " + deck);
+				game.draw();
 			}		
 		}	
 		else
@@ -140,7 +147,7 @@ public class AI
 			Card playedCard = getHighestValuedCard(validDeck);
 			Color newWishColor = null;
 			
-			if(playedCard.getType().equals(CardType.WILD) || playedCard.getType().equals(CardType.DRAW_TWO))
+			if(playedCard.getType().equals(CardType.WILD) || playedCard.getType().equals(CardType.DRAW_FOUR))
 			{
 				Random random = new Random();
 				int colorInt = random.nextInt(4) + 1;
diff --git a/src/logic/Game.java b/src/logic/Game.java
index e4e4aae7dd3ae2fd0ac7df9bfdc7a3e796b2bf77..26af13581c791c9b1050d2eb90443431a592a3d5 100644
--- a/src/logic/Game.java
+++ b/src/logic/Game.java
@@ -19,6 +19,9 @@ public class Game
 	private boolean challenge;
 	private Direction direction;
 	private Controller controller;
+	private boolean lastPlayerDraw;
+	private boolean skipped;
+	private int counter;
 
 	public Game(Controller controller, int numberOfAIs)
 	{
@@ -27,7 +30,7 @@ public class Game
 		deadDeck = new DeadDeck();
 		player = new Player("Spieler", this);
 		ais = new ArrayList<AI>();
-		for(int i = 0; i < numberOfAIs; i++)
+		for(int i = 1; i <= numberOfAIs; i++)
 		{
 			ais.add(new AI("AI " + i, this));
 		}
@@ -47,6 +50,8 @@ public class Game
 		wishColor = null;
 		challenge = false;
 		direction = Direction.RIGHT;
+		lastPlayerDraw = false;
+		skipped = false;
 
 		player.initialize();
 
@@ -60,6 +65,9 @@ public class Game
 		
 		deadDeck.add(deck.drawCard(deadDeck));
 		lastCard = deadDeck.getCards().get(deadDeck.getCards().size()-1);	
+		controller.setLastCard(lastCard);
+		
+		//TODO abfangen wenn  +4 oder +2 oder wild am anfang kommt
 		
 		start();
 	}
@@ -69,59 +77,97 @@ public class Game
 		return gameCount;
 	}
 	
-	private void start()
+	public void start()
 	{
 		Random random = new Random();
-		currentPlayer = random.nextInt(ais.size() + 1) + 1;		
+		currentPlayer = random.nextInt(ais.size() + 1) + 1;			
 	
-		//while(true)
-		//{
-			if(!lastCard.getType().equals(CardType.SKIP))
+		counter = 1;	
+		
+		run();
+	}
+	
+	private String run()
+	{	
+		if(player.getDeckSize() == 0)
+		{						
+			end(player.getName());	
+			return null;
+		}	
+		
+			for(AI winningAI : ais)
 			{
-				if(lastCard.getType().equals(CardType.REVERSE))
+				if(winningAI.getDeckSize() == 0)
 				{
-					if(direction.equals(Direction.RIGHT))
-					{
-						direction = Direction.LEFT;
-					}
-					else
-					{
-						direction = Direction.RIGHT;
-					}
-					//TODO show icon direction in UI
-				}	
-				
-				determineNextPlayer();
-				
-				//DEBUG
-				currentPlayer = 1;
-				//TODO mark currentPlayer in UI
-				
-				if(currentPlayer == 1)
-				{						
-					controller.setValidPlayerDeck(player.getDeck(), player.getValidCards(lastCard, wishColor, challenge));					
-					
-					//player.turn(lastCard, wishColor, challenge);
-//					controller.setPlayerDeck(player.getDeck());
-					
-					if(player.getDeckSize() == 0)
-					{						
-						end(player.getName());
-//						break;
-					}					
+					end(winningAI.getName());
+					return null;
+				}
+			}		
+		
+		System.out.println("ROUND: " + counter / 4);
+		
+		determineNextPlayer();				
+		
+		System.out.println("Player " + currentPlayer + "'s turn");
+		
+		if(skipped || !lastCard.getType().equals(CardType.SKIP))
+		{
+			if(lastCard.getType().equals(CardType.REVERSE) && !lastPlayerDraw)
+			{
+				if(direction.equals(Direction.RIGHT))
+				{
+					direction = Direction.LEFT;
 				}
 				else
-				{							
-					ais.get(currentPlayer - 2).turn(lastCard, wishColor, challenge);						
-					
-					if(ais.get(currentPlayer - 2).getDeckSize() == 0)
-					{
-						end(ais.get(currentPlayer - 2).getName());
-//						break;
-					}
+				{
+					direction = Direction.RIGHT;
 				}
-			}			
-		//}
+				//TODO show icon direction in UI
+			}	
+							
+			//TODO mark currentPlayer in UI
+			
+			if(currentPlayer == 1)
+			{			
+				controller.setLabelCurrentPlayer(player.getName() + " ist am Zug");
+				
+				controller.setValidPlayerDeck(player.getDeck(), player.getValidCards(lastCard, wishColor, challenge));					
+				
+				player.turn(lastCard, wishColor, challenge);
+				controller.setPlayerDeck(player.getDeck());							
+			}
+			else
+			{			
+				AI currentAI = ais.get(currentPlayer - 2);
+				
+				controller.setLabelCurrentPlayer(currentAI.getName() + " ist am Zug");
+				
+				currentAI.turn(lastCard, wishColor, challenge);
+				
+				switch(currentPlayer)
+				{
+					case 2:	controller.setAI1Deck(currentAI.getDeck());
+							break;
+//						case 3:	controller.setAI2Deck(currentAI.getDeck());
+//								break;
+//						case 4:	controller.setAI3Deck(currentAI.getDeck());
+//								break;
+					default: break;
+				}				
+			}
+		}
+		else
+		{				
+			if(!skipped)
+			{	
+				System.out.println("SKIPPED player " + currentPlayer);
+				skipped = true;				
+				run();
+			}					
+		}
+		counter++;		
+		
+		return null;
 	}
 	
 	private void determineNextPlayer()
@@ -153,7 +199,16 @@ public class Game
 	private void end(String name)
 	{
 		//TODO in UI
-		System.out.println("Player " + name + " wins!");
+		System.err.println("Player " + name + " wins!");
+		
+		if(currentPlayer == 1)
+		{
+			controller.setLabelCurrentPlayer(player.getName() + " gewinnt!");
+		}
+		else
+		{
+			controller.setLabelCurrentPlayer(ais.get(currentPlayer - 2).getName() + " gewinnt!");
+		}		
 	}
 
 	public Deck getDeck()
@@ -171,6 +226,20 @@ public class Game
 		return challengeCounter;
 	}
 	
+	public Player getPlayer()
+	{
+		return player;
+	}
+	
+	public void draw()
+	{		
+		challenge = false;
+		challengeCounter = 0;	
+		lastPlayerDraw = true;
+		
+		run();
+	}
+	
 	public void playCard(Card card, Color wishColor)
 	{
 		deadDeck.add(card);
@@ -187,12 +256,21 @@ public class Game
 			challenge = true;
 			challengeCounter += 4;			
 		}
+		else
+		{
+			challenge = false;
+			challengeCounter = 0;
+		}
 		
-		controller.setLastCard(lastCard);
+		lastPlayerDraw = false;
+		skipped = false;
+		controller.setLastCard(lastCard);		
 		
 		System.out.println("new lastCard: " + lastCard);
 		System.out.println("new wishColor: " + this.wishColor);
 		System.out.println("new challenge: " + challenge);
 		System.out.println("new challengeCounter: " + challengeCounter);
+		
+		run();
 	}
 }
\ No newline at end of file
diff --git a/src/logic/Player.java b/src/logic/Player.java
index c20df037be54a926a46f1ebeb24b74c3422fb2f8..57931d34bc75b602307354f62b77e4a08ff9a006 100644
--- a/src/logic/Player.java
+++ b/src/logic/Player.java
@@ -124,14 +124,14 @@ public class Player
 			if(challenge)
 			{
 				drawCards(game.getDeck().drawCards(game.getChallengeCounter(), game.getDeadDeck()));	
-				System.err.println("draw " + game.getChallengeCounter() + " cards");
-				System.out.println("deack after draw: " + deck);
+				System.out.println("draw " + game.getChallengeCounter() + " cards");
+				System.out.println("deack after draw: " + deck);				
 			}
 			else
 			{
 				drawCard(game.getDeck().drawCard(game.getDeadDeck()));	
-				System.err.println("draw one card");
-				System.out.println("deack after draw: " + deck);
+				System.out.println("draw one card");
+				System.out.println("deack after draw: " + deck);				
 			}		
 		}
 		else
@@ -139,18 +139,7 @@ public class Player
 			System.out.println("choose");
 			//playerInput (draw or turnCard)
 			
-			//DEBUG
-			Card playedCard = new Card(CardType.EIGHT, Color.RED, 0);
-			Color newWishColor = null;
-			
-			if(playedCard.getType().equals(CardType.WILD) || playedCard.getType().equals(CardType.DRAW_TWO))
-			{
-				//TODO choose color
-				//DEBUG
-				newWishColor = Color.BLUE;
-			}		
-			
-			game.playCard(playCard(playedCard), newWishColor);
+			//TODO add "draw" - Button
 		}	
 	}
 }
\ No newline at end of file