From 7920ff64626dab77e7bae03270918ad3a0959a3f Mon Sep 17 00:00:00 2001
From: deadlocker8 <goldi.96@gmx.de>
Date: Mon, 11 Apr 2016 00:43:11 +0200
Subject: [PATCH] -UI -gameplay -oncClickListener detects UserInput

---
 class/application/Controller$1.class | Bin 0 -> 1595 bytes
 class/application/Controller.class   | Bin 5112 -> 5977 bytes
 class/application/MainGUI.fxml       |  10 +-
 class/logic/AI.class                 | Bin 5174 -> 5350 bytes
 class/logic/Game.class               | Bin 4941 -> 6186 bytes
 class/logic/Player.class             | Bin 4662 -> 4351 bytes
 src/application/Controller.java      | 100 +++++++++++----
 src/application/MainGUI.fxml         |  10 +-
 src/logic/AI.java                    |   9 +-
 src/logic/Game.java                  | 174 +++++++++++++++++++--------
 src/logic/Player.java                |  21 +---
 11 files changed, 232 insertions(+), 92 deletions(-)
 create mode 100644 class/application/Controller$1.class

diff --git a/class/application/Controller$1.class b/class/application/Controller$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..51b66919e71c48372e4c9fa9a1ea11909dccc0b2
GIT binary patch
literal 1595
zcmX^0Z`VEs1_l#`7<L9GMh1z*f`XjP<iwK9{5*Z<{JfH){G6QBA{9e+1{OvJfvm)`
zME#t^ymWp4q^#8B5_SeQMg~ccXj+ASYFTPtiM}g{^hnH0$w@6@WMC`F$ShVdU}TW+
z!EUlOBLinyVvb5#VoqiXBLia;BLfGBpPX2f!pOkmlarsGnXK=eSd?PT$iQZknU`5&
z$H<_efy=lkWF4Aej0`N!`6;QK42%qdJPhm%93Yl34+AFy7l<Xw!@$kJ!^ObNAkM?U
z%OJtXz^nn%#P5@tm+DuVo0M7<l9-f}%E%z(lb@WJ6P8$%3F1QqSwOyHWRSw)7!^a1
zn=`;+!N{Pb;R6k*;^fr4RQ=4ng3=Ow-~7_zRB)JCYld+#C@?6oGbl1La3TE7!=TKd
z!pOj$o>~%8Spag1h9;6HL1NaN3~CG-><sFR415TUAQ>J8O$IGS29|J79~VXj0d##_
z3~CHIJPf)FdW;NgsfDG9ImL_&q7a87$FsF&6vzq#9tJ~@ahxtej^Xic{-Hsf48{zm
z><lK13}V>hmxsZO!JLtSB|R}W6%n8AiMgrPTnv^B*6a*caNmMNc^GUMY#A9i(^E?V
zauO>+X-EL>Ux<h`7lS>6BRhiwBLfe_w-9k21}6q*Mh1?8oWx2{f?;Hk(m?XCHFBtd
zEq4X!aARbUK~V<NlAn`bWDQCTtl)&r$RJN3{umi}@>0vgGmA5vL3$Y(cu|aEWZ(@h
zNlec6O)LN>A9e;`Mh0$(2cR0nAt8^Nm#j6z*ck#C8D#OM9xet(h9DjWSq3>q2Cm@z
z(xT*4w@gsN<wxXVJ&*~E44lE4>3NAIrA4WX41Qogp+q%U1l0-9>}&&*!jXXOtQi^j
zUGtK2@{2R`(tT4)GV)V+7$O;>7#X;di&7IyQX$czixS>ZnrO!6CZ?zAdxFTY%+zvg
zMg|_wyu8#R=bXgi;?!aW1qMb2W(GzERt9DP0Z^7^U=R=jWoR(X&A`LJz`)GFz`)DE
z$H2(I&%nUo#K6SB!oa{FqNTl+K|o7pD}#`h?p6j7t?dkA8yOfFm>47(7#O%1m>3wq
zI{X==7#J9M7#Kl%7^E3wz~ZtDa$s2ohQ$obU>jVtwlE0IWUy!S)!M=!vW-E06NBnD
z2JKl4f^fe6HU{l*tt|`!TNsR>)HVhSh_s!~HU<}v{mfwd#TZx_7#Knr*crkYI2j@s
z)EQzKoEhT5Zc%{P2XzYrgA0Q@g9ig611EzOgC~O*0~3Qc0|Ns$1JfS{b#?}yUkuU$
zjtsI4eozN%GBANX$El@#fWdzoLm<djh_BhezGMX30`fl#Lohf*LKs59bQnW80|NsK
SgE2z{Lo_&)7{NLi7#IL?h<~X7

literal 0
HcmV?d00001

diff --git a/class/application/Controller.class b/class/application/Controller.class
index 9e09295f37fd6a40e3d5de34efcbe6a8cde20d4e..6266957965d0fc7670da3eab97f411957e16d2aa 100644
GIT binary patch
literal 5977
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

delta 2721
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
bvW!s@l#dvt7^N8)7(k7@TMXA3WgH{{0GK{y

diff --git a/class/application/MainGUI.fxml b/class/application/MainGUI.fxml
index e92780c..a6a521c 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
GIT binary patch
delta 1589
zcmdm{@l2EJ)W2Q(7#J8#7`|@g%46kaPfsmzNlngXWDwWToXpQ8%EHK?sxjGyS%r&{
zfu*FhD36grcCsR~jA9rkLp?(yJ3|8_gFsedS)zVUVqUs_aAk2xYAz2$6GQXly{rn1
zt&{Ju$}qN1{>>`M(ZbNl!@$qbHCcvDilc?0hlin;p>MJsn{|B)!vr3Ni3}Bt3>+o-
z!6ikRdFfmXlNqM6GfZJ*5C)r`nXeyEl$lo&TvC*pn9IX3jiHN?fxQ4El#|EBz{oIz
zhry1)o`Yc)BLi<)Voqj?b7E0Sv6TWB7sDKedF%{x85y{8^3yYu_1zP5Q+XIF8Rj!G
z@M&oJ<m4NJL_xl`2B}@h!?1`!osmH}J+;I+BQYl@H7`BYIlnZoB((@6zl4WjDZ{eK
zrtGQ`D;QR>GpvLg3^Ia;!GK})<RW%`>9ruHAqT^HMh4cDqQr6qE`}C{jUZ2Nn!JZy
zQDh4v1DirJ$dMq4Z6Jy5lRvT>8SZ3c5K2i+OwLwFOe;w(QUGbTQUF=Kn}=Z!g9sx7
z3rL8IVFklJ9tI7D{ga(JR2>h3n3^06hZz}oLDCBOd8uIIIT(&IGO#6Q<mVTsaxffc
zWZ-f1RDf_n!Nb7FaFU1N6vOGsD>>}z&%$D}v?Mb}KPWLTB|n#o;S7T?h`7MRaFO8>
zBLjP0YDI}>UI`-ui-xDBCnrM^!xbKes|>k}3~Z6EK0f~8Aff9#3^zbR%t5X$ApR{L
zhT9-Mi<3{ND@foj55ql>0IPeDtE(R<4j%~dFjz8JfxP+%#CpugATwE!S!(iR&Th6h
zJPdCc-c45FQeyeQ!|-vk7gshT@8)e>?^$)27&sXi7?>EU83Y*^81xw!85kKD7+AHo
zFi33xODHffFtC9IOD4bP7Ok&gsAXUTDP}szzyi|DIB^q0-EM}KNTIgv3>_ei+ZejH
zG4yX^n53nxBfE`Zx)lpd#mwyt9g-|?c@VQ?7Q=GcnGDHVT3Z<8wlU0xPzxZ`;%yAe
zw=t}NX<xUUp&n#|+%|><+ZZ+oZQjPP6=D-i#SRQ7fKA=CoZ%g+1&g;a?A^w2U=u@~
z(4lP%lL+fy2U2=un+8JdF_2x7EZZ4Qz&)e|=322bTCq+3$SYkRx|`ul<aUO0R_v1O
z?AsX5vm}^th;poA00UbF25`8tFfcHHLRo`>fx&=*fx%)E!(}VB<qQ&=7_Nb6flUlI
zK{UrEhC5blpn%bmWZlMaUy^Mb!^4dX3=Aw_?M+~^l0lN8ib08?n!%Exrk=r(p^m|o
zp@AWhp^>49p^0HOLo>r7h8BjU4DAfN7&;gZF?2HAX6Ryg#L&a=l%b#DEyDyx4u;8$
z0t{0ag&C$X>NCt>v|yOY=)^FKF@<3cV<y8~#vF!ujD-yI8A})zFjg`wWUOIW#MsEN
zoN)rfN(My+28I|&s$fuJs8<GglyM?MHaKN5FivF1VaR1*VgRx781fmI8I&0F8J;k3
zFt9KRFf=ecWzc6}WfW$pWq8Jr%fQBH!Qjd8oZ$rnJEIeWJ;O@|9tI8u3kC)T9tK9J
zPA&!(h9U+A1|<g0KMYIR8N}`XGI+8xc(XGk{bdL=VP`nQ$j;9GlY!+Y10MquD6=xa
zlKd-BDrPvyz{J4Hz`$Up&Ag4_^#KNNU+rxSj#ezo8Kfmyb~3m!G8|y=_S4<Q@Lp#d
z!~4lIgcU^BGH^1iV~}Ooz@Wjfi9w5D9fJwOw#jFO#koN~VPxQB&}H~E`Mt0-<CDqU
MA}Z{k!5Qfb06(mrrvLx|

delta 1471
zcmaE+xlM!X)W2Q(7#J8#7(Q&|%43~;gjJobhM|s~p?2~|R#E19hK9+UYzmA`leO4n
zTv`|zL>zN+6p|B*Qi>Jw^As`?^HQu7xVRV^8QORl_!-(68ALUFvJ%S@^>Y&Q()EK&
ziZb)ktu@0yDmr->x){1Acd=PZH!}3{F!V80FfwqI<U<s3F-%~X#Lh5r@&h)B`pF=Z
z*b9m>^Gb5^xEL52rt&b@G1zl3OlM@^ElbSFOmPM|0c`b5hS}^4vltn;a`MwNll9#b
zb5nU3<}l1<WMEHEEpbUr&Sqrb)6n#RNQ3y+TnsZA=JPNtU{Ggd5Kd1man4B0$w|#i
zPj${O%_~VQ;sPmH#KW+dVaeojc2$XG3@g|fmcy+8nZd(gz_4=i7IuB<)gY!J2g6!M
z2G*3K#Bv3YU)O{Dx?%D^c14j*j0|j$5CchU0ZD9~Y|LS#u$_@XC?z#9Ia?tytt7Qb
z0i@YVfs0`o!%iLs4TfElr*Wt{?g241IT-daGVp>FDCFm*f=%OKIKarjmYk8FU!2Op
zaEOtC$I(*(!Yu}w!pLxhhv6v0vB`fp?CVc3G6;ZUrL-h7M?WYrFC{;hi{UtfFo-zK
z!*GV-EF%MZUTQ^&XI=>-1B-^IrY9#u62o~Oh6@b2j0|j%u0B5g;UJ+)JPemXLd-#~
zE+GC@9)@cmK8ur2s4Ga|1`oqckN~TDkgKa7DDrL#@i162Sb+ldE{JuHkwIp%BD2)w
zXPn(^&v_VLFua^x&ZWfinup=d<hfkgj69n;x!<$aGcpJ=FfgrTU}4~7U|?+A#8ADP
zp)pdZc{@X^))oe-Z44dT7<#rb^lNGB$ZlhpV#NYeF>O0Tt0W6t9>gq}#V}KLCPR#t
z))of2Z45IY)I12aa2vzYZ49em+SfoVsF&NuFmD^fI-!l*7&b#}f~nXBQGsy6a)zg<
zCNJE^uwxs;?oABULVLF{^yAUE2Bc;`lA41c!zEd^3o;yrdqGQ*Wjn*+$x%X5^?}<M
z!e=rB?`Ak2xt-yp6}u!m`!<GCED2^Dq8zIj7#J9=85kHC85kH?7#JAj7#JAT7#JAz
z7#JALHZh#DVq4B2v5Da#h!)tya0NtjY+|@>#RduqElJjG47ViNwlUn<2sS{0fq|h4
zY)A=%Btt2K5<^)%gC#>bgCj#FgDXQdLn1>BLlZ+S!)%5+hItH)44WC67<Mx>GhAV4
zWw_4J!Em3Uli?Rb4<i#pFC!~MKcgbUL`E%!NsJ~8lNm!8rZPq{Ok<2;n9i8UFoQ9L
zVJ2fH!z{)ehS`jT3=0?=7#1-oGB7a2K%$>Pi9wlxfuWv(v5_I0K_BEr#zux5hFk_F
zQ0idFW5{P<W>8{`XSmP6!N9`E#8AiZfI**um64U9n&BZsE(05*7K1y(BZkKe?2IN1
zwhT`gco;YsEEpIVco-O=I=L8F7>XDe7?c<||1ivBXArme%izh*;LXmE^q0Yio#D7I
zBRf0$PX?Bs415espbW;q1acn(6T?$ba%DKkz{J1`3T<uXZ4A#2FnIfFZ)0$@Vp+~0
zEy=Qz!IhEW0E4%m?ly*3I@=gtP4*B`5M9Q=$*`P3mSH7>2E%FwEr#U`CJgH**NTX9
hgM7lsz{#M?@OJWi5oyNzlXr`#u)kwqU|?c+4*>byhCu)T

diff --git a/class/logic/Game.class b/class/logic/Game.class
index 2c08991143131323f6c047ab596d63d1fabdf01e..c148f6bd2cd1beeec9a4af410ccf6433248bb8e8 100644
GIT binary patch
literal 6186
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

delta 3211
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
VS|GA8Fd1@7GcYoWfufyJ8~{Rk%a8y7

diff --git a/class/logic/Player.class b/class/logic/Player.class
index bd82c537dc81df483d302da92a725af1f010820f..8f921401c014056841767dd73eb99de384d60a20 100644
GIT binary patch
delta 409
zcmdm{@?Vkb)W2Q(7#J8#7>;e^dd@Dz!LXi@fi<Nlv0Q<Rp@m^14?{1*CPoGs4bRDm
z95NzX7#Y|Uk`s$kib1m5K(gB>dvh2u?wnl5A<4Fzhe3m3&*Zrrs)qYOOid1k1B?v3
zVB_-hQo%Yo7!ENquq9{Y=NG3kGH{k9=47V0q$X!?Ud-9T#>Lpfz{0@Fz`*cevY|k7
zecf(`mPny>+Zj5vwlK(TV_2|_VS~`-Z46ttG4yX^n6!xjqF@I^fz&pJZivKk1{W=e
zj@b}u@ivBC+Zgt4VyF|^k6$A<NX@}*43jo8FmN%jFeorEFxWBhPfifDPM^S_2o5W-
z0~wSUlo>$a0Yf%}J_94j(F{2ZxeQETRvtq>12cmX!#;+?3>*wB3>FLw3_J{sP!W*H
cMGPPtnEx=$V`mVzU}s=tIKsfdz{GGA01QNKV*mgE

delta 750
zcmeybxJ`xY)W2Q(7#J8#818K3dd{xJ$xzR*o`+!rLo*`-b81l$2g4>t2G*3K#Bv2L
zh8Bh`JPf@ITNxQ-G(0B<a>$5mXJlYgNKPzDDF(^z1j+82Y|UZBxMy-6ha}rR9tI7D
z{gZn+RO=6dn3^06hZz}o!N%q1rGj;GFdSuMU`x)(&o55pWC&t7&ckqmA&ilM)z#D8
zBZQM7iQyCv!)b<GMh4~}R~Ie@Z-%ox4Ezk|7#S2bd~)*BGn4h56N^$pDhpDrVf_4@
z{32^l%`lMe3p@-L8FK3x8CaZrLS4BS7#S|}Fjz8JaWTwcxC&xj19=CgGqETI)fCMz
zMh4EZ#GK3&m(=8JMh32eoW#o16p)pS3_N+M<>8sd8O|UJ85y{O^Gl18Q{6IiQW+Vz
z13(Ik^s*Am5*ZXXai+6zF)=f+GO#l+Fe*<j<WH_&x0|6QQfT9Lh7PSQ4078T7HnhK
zEVOMK!;WnX{o5EOZDObcE7%QDAhnI58zQlsp<N52V>X0Zyp3V+HiiS67}g0L!mrV9
z6GNTQk!=i<b~AYUMs8v_wu#{+^LB<aR;-LxY?7?o7<@M|WNc#ypT!^u<ppkI2%pKo
zv5Dcl6&uJlEs*#nNw#eaS2i**Ft9KvFfcF#F^Ei#6|k=FXL!#rf#DOwBt|}lX^g@Q
zGZ~c_W-}-<Ffe#P{LP@mpv=Gk3IT>}27LxbFe`^4mw^e)%45i9U}jKaWMsI`z`?-6
z@See#;Rb^~11rNP1_Oqh47m(!3>FLw3_J{sP*q$EEDS{q3=ContbZ6}=CLz~Tl{4(
ZV`uPYXGmiC$-u|J$Z(5+fq{wPHUPC{$87)r

diff --git a/src/application/Controller.java b/src/application/Controller.java
index d048273..e889885 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 e92780c..a6a521c 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 182d1d2..6dbd96a 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 e4e4aae..26af135 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 c20df03..57931d3 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
-- 
GitLab