From 87d103e72128090cb1f11860bfd81ee91a34abfa Mon Sep 17 00:00:00 2001 From: deadlocker <deadlocker@gmx.de> Date: Tue, 12 Apr 2016 20:25:44 +0200 Subject: [PATCH] -fixed animations -added wishcolor to UI --- class/application/Controller$1.class | Bin 1482 -> 1482 bytes class/application/Controller$2.class | Bin 3337 -> 3337 bytes class/application/Controller$3.class | Bin 1310 -> 1586 bytes class/application/Controller$4.class | Bin 1297 -> 1578 bytes class/application/Controller.class | Bin 10738 -> 14429 bytes class/application/MainGUI.fxml | 10 +- class/logic/AI.class | Bin 5515 -> 5702 bytes class/logic/Card.class | Bin 3362 -> 3405 bytes class/logic/Color.class | Bin 1045 -> 1092 bytes class/logic/Game.class | Bin 6453 -> 6755 bytes src/application/ColorChooserController.java | 2 +- src/application/Controller.java | 306 +++++++++++++++----- src/application/MainGUI.fxml | 10 +- src/logic/AI.java | 16 +- src/logic/Color.java | 2 +- src/logic/Game.java | 22 +- 16 files changed, 273 insertions(+), 95 deletions(-) diff --git a/class/application/Controller$1.class b/class/application/Controller$1.class index 154ab12fbf846e42a90063e45e5a95853ff7e53a..5f739f9a5a101f6660e74bcd18fc309a2e51c369 100644 GIT binary patch delta 35 rcmX@beTsX-OcqAp$+K9d3I;JqGlVeMGlVh(Gej}OGQ>=FVC@0`y21%M delta 35 rcmX@beTsX-Ocq9~$+K9d3fePBGdMEXGdM8>Gq^LvGI&mQVC@0`v+fAU diff --git a/class/application/Controller$2.class b/class/application/Controller$2.class index 6a6a82ff33f514c2bb8a046e5a3be2ca0f72c852..a0aa43b035592b38636ea5ba4e940b4eadbfcad3 100644 GIT binary patch delta 104 zcmeB_>Xh1Wh>P*m=EGb%jG^Zlq!}(UC^1}SaALU55X^9sA)4V9Lkh!fhH{2G40Q~5 z8M+wmGt6Ol$gq^*5yJ+CCk#6no-*uXc*by;;RVAnhL;S-8D2A-W_ZhRj^P8tHHOa& MZy3H!cHub+0Ad3sz5oCK delta 104 zcmeB_>Xh1Wh>Nj#^I<L>#?TH1X@)KaC59dbCx!_O!3>iaq8TPLq%cfjC})_;P{%Nh zp^IS#!yJZL3`-eiGi+d(%dmrC9>YF{`3#2{7BU=TSj2FgVF|-&hGh)r7*;Y|V_3uR LhGG3=7oMX4D2^aq diff --git a/class/application/Controller$3.class b/class/application/Controller$3.class index 091fa891b3c63021ded8942c8403116b95207def..4110b5483de2867c4528fd4f6ee2bd18a4a22fed 100644 GIT binary patch delta 615 zcmbQowTXx8)W2Q(7#J8#7(ym;RZg6%Jh547;sI@e{G9wEYoDC_^vq;^=ft9viNDt{ za!p>rs2(U>oRMGdoLQ8dlNz2`oZ$>o$;cp}0aFa(TWf}KF(@#o@i3?}NH8)8XJn?N zqG{n|P+-vHVbEgGo_v;3LPD28pPfOEk%0?hrF&v-Di4DJgW=@AjEeQf45sW1CX5U` z5Xpd?#LCnn9tJZ8b4CXC^wbiU)Z}bN25}8dpRB~PME%l|%p85kqN2n~pUmPCYmiGU zc^Ir1tQi@2i&IM=+97%*G_Yy`Ip3JUmWRQP!Jd&}vK5mChc1I7i0d>ti^+|TH@GA* zIomg}AS5v<Cw1~VCK*PL$)}m*8NDXIW}3hp$PhHSj`?ssBPW9t0|NsO10w?ig9w8( zgA4-$10#bhgB$}R13v=;!!ibD1||juh5)TC3_`~k1huv>2!NQ|8042TaDjN+7*s(N z2ybD~*v6o<jlpOeg9VfirM5BXXl-E-*~VZ4(d@91fq{XU!C#VrfkBReoq>UokAa<0 zfI)~+kU^ADgh7T;jKP3WoWY+_0_;FBh$Em5WMBwjaAt5}U}SJ*U|?WjU=n2$aAc5W zaGQLPMTEtD8-wTMn=CS#-V6*3Obk8@zF^vq!5^$xfgyk)n1O+Ti-8gBYX$}e0Amk^ A&;S4c delta 365 zcmdnQGmnew)W2Q(7#J8#7+fZDRf=<zCFZCkCl;kJGVu81<fmsQ>pLeFrA%y4n|MHb zax;tQB*x{8oRe2Ds!vv85|dD4&|qg!XJp`lD0NTFP32+GWYC%%z@#Xp!=T5`pv%a> z1Cb2KNvupQ;$hHdFqr&~NsB{`!3e}Lo~*#^CM~Yvla*MOm{y^mT9%quqVEbKtu@2g z87wAGWR_>Nn!J&D0<$B7(_|Nx!%Pf^Cv&pO*GDigGcYkQFeqqkVG!8DAP=RsF{o;7 zVG!EJpslrqL1Y_);YJ1q1||kc1_lN$u=*1W@(d>#q!<_&#K3$725ANv1`tqSFkvud zU=(m<kYzAqU}WHDU|`T>U;?Y+)Y3k{V7`sP5@y`wudE`P)?l-37;M3`9fLgs0|N_# S0)qpCGuS>x21by<3=9B3EJvaM diff --git a/class/application/Controller$4.class b/class/application/Controller$4.class index 5200445f2fd0a8b6748aea9edda41cde39bc77c0..bccccc2fa9f7fb94a704391dfd153344a519d915 100644 GIT binary patch delta 672 zcmbQpwTg%9)W2Q(7#J8#7(ym;RZiTjGO<N};x#R4=lq=fB5R+V{PfIZeMe6i%Q>+q zWwJEmHf}Bk6$UkS231A|v55j=^*jvf3>u6K!o?Z+<<6N!$vLUvnZ+4kLl_wZG@#~y z`PQ0YAkA7l4B8Abj10mVnJKAgTDTZ=8T8p1^cWd9U=HA6FkmobWMEHEEpbUr&Sqo~ z*U<FIN-Rs%FD=Q;sn>TbDoU*M$t*6h1{rS5!(hT-%E-W3oLb`O3DKYga|OsZaGgjR zHN!X=R2a;87%Uhp85vm86LV7;8F-*hcTdbswFbG%nuo!L!IqJMqaY`-5)>Sa3{o1C zO_-!*>=_){85|fHxFBu@=>Vy9Vq}ofn7n{lc5(-kDj#ofNn&!gZ(>16Vp2}(<kd_v zj2@FuFv&A|O@6^NfjN*NXmT~PB(FM>V?8G?V4lUqXfxS{MZSI>12Y2?0|SGH))oel zV+?{?TNs2u%xw(H%Ne*pylo7cAWCZsgBS>JW6;^gU<4A`!e9mx(AvTvv5mnBqRDO} z0|NsygDe9BgB$}p0|TQY13RNLgAk(&gD9grgAAi5gC3(7gFB-)gB$|`gP0w}at3(@ z1qKlCU~pz|VPIr%Wnf@nVPFzv6L4fuWN>3(WDsOvV9;b>0;}iL(muf8zKy|i@);Hx mO>YJU1||j{2467k$KVgvtHKb#5X`{9z{SAGzz8y$fdK$%+?5&t delta 409 zcmZ3*Gm(qy)W2Q(7#J8#7+fZDRZd)HFtJ%>;&n}CM^Ed?xh%4i6&N>ib26wfsIfDs zGBSuw6cA(OVNhq#n0$~)LQIQ6hn+#2k%1#8KRq*9-_etYL6<>q@<S#q83P6*b_PR6 z1}=z{dtz=XNYa>*K}G{?unV)QoVbQhR$^IVT7`aUS!!O1zAK2d)(m53uwZ16nC!<a z!OF$J$Y3>j3-bgGM+PTG29ezSvQ$S;=ft9vkbIZa#1xm*<ZMO;H4Pt#JrHNlVq*9_ znUht%K8S&tfr){EK}u^2gU}WRWvwj?B3fG*#I`YLYHeYV*v6p0k%57Mi9wcufq@IG z@&|(?!%qe|1_lN(Fkgy6o<V^D1f&>D7)%)$1soX^8O#_M83Y*^7&IA}z^XX4v=1<t zZ)31T7{|uI$Y9REzz8-A<OUW7Yp`8547Om}j=`RRfq{iVg~5Tr8Eiiz10%>H1_l6V Ce@YYp diff --git a/class/application/Controller.class b/class/application/Controller.class index 6afc1b70e257b2fdf4f41c1bf254efe22010c1b2..5dd6d2b17b27bddd18875d2c7a9482104c43abe2 100644 GIT binary patch literal 14429 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 literal 10738 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 ULTE-EDBT97&oQ265^#_N0H&JZTmS$7 diff --git a/class/application/MainGUI.fxml b/class/application/MainGUI.fxml index 74c58d8..3d499e5 100644 --- a/class/application/MainGUI.fxml +++ b/class/application/MainGUI.fxml @@ -3,19 +3,23 @@ <?import javafx.scene.control.Label?> <?import javafx.scene.image.ImageView?> <?import javafx.scene.layout.AnchorPane?> -<?import javafx.scene.layout.HBox?> +<?import javafx.scene.shape.Circle?> <?import javafx.scene.text.Font?> <AnchorPane fx:id="mainPane" 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" alignment="CENTER" layoutX="85.0" layoutY="453.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="44.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> + <Circle fx:id="circleWishColor" fill="DODGERBLUE" layoutX="392.0" layoutY="275.0" radius="16.0" stroke="BLACK" strokeType="INSIDE" strokeWidth="0.0" /> + <Label fx:id="labelWishColor" layoutX="355.0" layoutY="230.0" text="Wunschfarbe"> + <font> + <Font name="System Bold" size="12.0" /> + </font> + </Label> </children> </AnchorPane> diff --git a/class/logic/AI.class b/class/logic/AI.class index cfd69f7bb8728c5a71b60f2deeaeb448adb0a207..68664ed635474773ba6a443f1bf0ad73a92f5fe3 100644 GIT binary patch literal 5702 zcmX^0Z`VEs1_l#GR(1v^Mh1?Y{PfIZeMe7r1{OvJfvm)`ME#t^ymWp4q^#8B5=I7= zyu{p8Mg}1tgj8@zQD$DcH6sI4W(p$%qbDN+OG;{THY0;5L{Vu;W{$pNQBh*0PiAq6 zH6sIOaAta5Vo7OHDkFn3HZ?Xr5N9|i7NuC*Su--QlxOA@GcvHGgDvNQO1mfKrdl&H zu-RnhWtP}6GAL<43<EnD>MBoUwVGj!3@pz1DXClx%nTwt3<3<Ij10^gnqiy_j11yD z46F=nAeJN#13Lo;JA*VMgD}{es6OCgkYW%4sgvVj;AG$eu@rb1co{fAEF~TWJ_de9 z27aH+yi~u^+@#c^ki?`MaFFFEC+37D7G;9?P(hZGjLc$21}>;89X+iX8Mr{+$xO`2 ztV(5MU@p(hV`N}YPb~=t2LZE&rY9o<YkF#lrwbzkM@ms*IVhAE8Td7zW`MZXnqeSU z>hmxdFc>m2Fej#@FfxcD2M;7Ztu>>#7>pTA*%?e28Mq*U4hmHs1~Ue8Mh4#W)Dq|X zypp2)oSf7mMg}PjO`pVqf}G6c#FEVXJbi?mH5Y>=gEc#Y6(fTfb`?AfHVn3m44lQO zC61mh;PjycbF!nSH6-Rx1KJuKU&)C@DU1xTI0yTVk%1HD@nS{>38=rYXja22g_gV^ zVdcWZ;L6~}$iSAElH!<?!^j|stk)S70?8mxTWdx!GO&UiRm{jB=7SQal?AELc;zU_ zNvs696%=SF5rfPD#gPvWgD)tK*osnf^UG2pfgYBalbHh2Ud+f~2n!_;-x{VpKPSJ) zI!Y63urV^&ld1<TNI(t?;$aA82w`O4$Sg@MN-W7QVq_50K(^2mDsIiq5XKO}&JfPX zAcV*+Fj*dkNQNj-xsh5?!pI;3GXb1Op^1>4AqJlMK%V4ch-Qf6VTfl)fTaA8$^uaS z(a?l>KCvhTBxcRYki?L}&XCN=zz0dYAl)Dt9)?tgG)4vvmmtUR_>gdaMg{?Ny<7}Q z3>iEOnc%QbEi6sUDFzvr&BKrb(#i?e>gFFB1aeIt4?{jf0V4wkI78%s!h#>+9B^E4 zF%&Umurm}hGH^rP0ulxVO(_pU8ACZE1A9hdu^%`Tm^Cz`K$cbVFjRpoV+r^40p;eL z#NrZ=7Z@2h%QK5JoIxfqGVsEj4&s7}&*Y56oSf9W^i)O$#wbPxt}>+5!kt`NRFs+r zHHJ61Br!SLH?aVkEV<KDOF(%qII}7h6vwSR3~dZrj0`Nr;KBw}%=m$eSk!oemZgx` z0O@CB5Qjx1TCQVcP{l5TmckerSV~HZ@)#Lp@g>zTPKJJliR=s$Q0k)K%HopLTpor= z43ildnDa|Z;8jg#zJ5SaW?o5fNl|KIt~EQuR7M7IaGC_CH;6x+N;7j(Qj0hkrZX~# zIOgOifHSi~ex5=`VqS`s0v8v<6o#3g+F=%2p$X9sE?lQD%;8~}%P<dAU=$Rj=A|$) z=t2t&uvO5c4b3lLA&73M?baYm7Vt1EWawaI;3&z5NOCbOW?0J3umo1|p!$c0VHv|L zMh5l*kQa0ExEL52R`4+RG5B*ZtYT!~MI-~TAB-8+@Gx{TtYu{2gC|u`+*yN4{PjEx z8$b~+3`)?j<m8-Rnpcuq1d`vx!?2lQ3nK$0!6c@DG%_*>AsGY_v*u#h#;}8(VLLnn zgH-Y`I56yFWYExn)xIvNQ036@Kua_rpX>%{a^zsx%gDeAD%=%70kj_!#s?S~WHdaX zI<bT#2g4yo1~y16f;1fgX*!A)ACU01#%IcLMh2mj)Wqa$g~YUy)FK6tE36bip>dLj z;S{K;zycBi`S=VEgAT)4Mg}=p;zjZxH1~s=E+BuM2PxI%V7SQ0zzfo@ke`<db}I+N zWkv?J<c$3M;#3ZXtBedhj-Cn-ZZXJOMuzJ=3^y2VGBSvyr<QnRre~xUmxLwel%|4f z21W*DXnI2nOypA1nw{Y`EbD-k1tsRC<mYlR++q*`5%+i)?lU}KWMI!rttj!#1GVoo zJT*Nz8HyMl@i07QsAXhei*)tz@ec<HJ>_9|1`=Wpa&-amU+^%z1o2s%d_rA80<U=( z-hc#H-Gf|R{Xil2j)&nrD4hv_(ix;=3dl*U1SK*{hL1c9pBO$fGKhdGK1WYb$rq9j z3rR)>by(m!dRoI05=aed9SCY8aDtOQDCIFSaDi%GSP=2#rIv>yN>a8Wu=nB3SEL}Z zW@O+<1{JX2P%y+Av}i>bN<f23(?2{6e;NKUGBBs7f{G;6Gz%>dxEP`t8F&~OL4g9Q zO~4V#$RL=38NXb?`K3k4scxB|)+4*4ryi&vV^CyZWMF1sU|?ln0<~8e7#Ns9tyM71 z$pA`m++a2j0~4rC3TE>$@G~$l@G&ql2rvjTFfs@+Ffg<*Ff*_)FfgcSZD$bH(%#A- zrX{nLK|*UcgH+^p2AQo4vRcer8RWHew=yVh1e>DFz`!8Kzz#Nvg+YLUlR=Pyk3on* zl0le3jzNS$nL(66g@J)V3t}#VDuWsW2&jPF$q2Fw>{2E$3*;td21W*T22rSstQbIi z1_mA^Hy~{0VgTurWZ-6y0^7pF05XvWY6~NS2HYG=s5#tPky{w#SrWD~$fFx0$H2uP zk7Nut+!##;EvR$!85qG<uxf2#kY5820XDFpGLmLixMppvnkCRRYhcx^!=MYbIh27J z;#sXN46@qW81%xmwlFAeV=&SJ32bAqKzN4_oECH$I2rU9BpCF;28%&7LtVwdAjx3I zU=Q|;1A`+269XiDIDu0^I+|6^*sNk^07X5-Dq{vt1``Ge22&hXxr39S2Ll5GB!VOv z+`%kH22TbrsQ;W9n7~ft26;z&8-sVa_6B(PLgLwyfs?@s$qHBmF)(n$edEXA5BE&~ z$Tv*?!Fhp!(GZ%5typAdGBks1*~SoP#kQOwOOkCTLntG|0fuNRR-NMvT9T~W7-Bau zByM9!pT!^u<z;PSNT11IC&>ch>xD08Fa|Mlb+$1S&V(z%riB}(1!PSLBg3r!la@0q z(K*hLh2(}nkR;3vV1u={G30JzD4fNh2ja$RZ)1oByGI_(-NaA<=ApU{)2h|W87z^k zQO2+a;(knxHzip>!OsGY<v0d$1_lOu22KV?23`hd22}=E22BQc23H18244nmh5!aX zh6;uNh6V;_hAxH>hF*qnhKUT33@aI;8Ll$KFg#|6V|dLF$?%mSk>LkJ3Zno+8lwzD z2BQi?3ZouF9ym&a7&sUh7!6?wl+lo(8k|5uVl@o4ptQkg$WX^n&%n&U$*955z`(`8 z!l23!&CtkT&%nyClEDeWViaHyfv^~0DGs8Zhk=EmiGhLP9RuHg21y2Xb_PavhG=$% zB1U!wDF$|iFb0PI4BBYoU=?8u3|x}D{~6fPBw?C(7+6saWBAX&k3+31nmEh?(oE+@ zGX>%j`Tq=@7*1heWN3yLK}O&#&%nR|Nfa&UrBE?AE+Dy-0~!~M4DAdZ&|HdK{)vGS z2opGgK+3-gB+ZEOualt*o+G<KIg$a{5Lt9XYOxy9!_W(H0n-TvRt8Q62F4ki82WZI zOo<elww+-H#5c3IG0fk_ut-Z=M|K;-aw`^?ij~_LW=OJZV}Qzom@Tsymdnm$NCp+2 zirW}gL(0;15NhK#hOOHecEPmofmoopjbYt3hJ8W@w=o=sSOimW45C05ZUe-a6U!OC zqME;P8^h^s4Cgj6^a)+q#;}O6{;eRTmyncR0a+!<vYp`?!ZI+|ij~od4NuV!x|`uv z<aUNTR_v1O?AsXbvLu*sh;pm~RmBVpwhRp53Jg^BD=;uHXfQA^7%(s}SZrc=2r3~Z zHZeQ_(E^(oo`YzPO$@KB*dV?H*FTEe7~V><O0sQZ_yDSgAf-kV1IVl<21$ly1|^0T z21|xk21kZ=23LkohD3%gh9-t?hS>}~42u|g8J03kVA#blk>L=-B!=4zlNlZ{Ol5e= zFoWSO!%RjFhB=G^409QU8Rj$UGc01XU|7uP#IS@hg<%<ECc|>Z9EKH)g$yehOBhx$ zRx+$+tYKKg*vPPvaXQ0ha9WCiq!(yvW?-BFFIi?Vz)F@G(2_-ov5eshsAORjU}$If z3MyF`g&A5HzA@A?urXRNcrtuv_`$%==)_>p@RNaqfdgK~Ky<>&7$pYIKcG&Vl>J`@ zPjD75`paO#&Txy7ot^zB1IteaQ3fVZLmr+reu1;bL2v_(fx%3hc^kv;0}Ro=+MrsB zWjTYiBnzyT^3&bM@Ly*e!~Z1=th&A+ad5TrPzRKkAYm`Xz{bG9u$_UEVF!aO!!8C5 zhCK{g3_BQ17!H8L1kxNcgM|r$8Q9m144e$Qj7$vn3``8N47}h{lo{?r2Cynn*#Ig< e#Tl6XGYCOT8!2{%Xh;zx&cMhBYKby2vH$>N{0q7O literal 5515 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 diff --git a/class/logic/Card.class b/class/logic/Card.class index e21b50bed056790848ca47787baacb679e226b56..9f06a7928ed6839bf8de65f7a53f7d0aaa9261fd 100644 GIT binary patch delta 325 zcmZ1^bykY&)W2Q(7#J8#7%p$*`o$W^?C9ge$q>YFn1|sA0|z4mtCNqTvo}cO7!Sj7 zkO+&DPpB(M;3N;jDUblGdyuQEA4ud355rlI2y>9D3y6Q7hvC9zS2k9*`WFn$42%p6 z45^zKc10dzVA&A9gJI9UJzU;en;7<QV+a&r^Iy)u60Wt0;m|gQKn@t^=r)ExxXg)d z41w%0nbX@C0$E|4bK4jKSs<Lq%?!IXFt9NQFi0`TGHhp%V^C+%VsP8epv_>yV9v0e z!Ggh&!G&QvgDZm{Lm<O;h9HJ$hB$`p49pBt3=9lxU{^9TNHZ`nFflMNcr!3C=rZtn curuuZ&mc1SCyzY8H#@_21_nlki(n;}0KBkF5C8xG delta 258 zcmX>rwMdHV)W2Q(7#J8#7%pt&`o-$V>g40-?9Is##Bi90;Rpi<BLj<*PpB(M;200X zagYG3dyuQEA4udR55p;t2y>9D3y6P)hvDqzP&QV!`m+qo42%p64B?v?c10dzVA&A9 zgJI9UJzU;en;7<QV+iE%U(Uc1uC<Bb&^CrZHW=sVHikfU80W+`hCo&r=kzv)Ko$rm zax=rO4GgRd0t}K2G7Q@pWEs>LG#R!tXfYTwm@#Z;FlTUJ;B;o#&fvn}%MdX62ahb5 e1_QSTJHyWZ48oJ;dF8nn7#YqnFfcGNoCg5Li9uEX diff --git a/class/logic/Color.class b/class/logic/Color.class index ba614dc211afed9fcd1e6a133b535bb1c33a9648..3f5928566b37a74f9c5e4545c3a55f6129582ad4 100644 GIT binary patch delta 580 zcmbQrafE~G)W2Q(7#J8#80;o;#j-Fv`uI#twPO?JVGv;uow!mhP@IQ>m4S_eft{0q zkwJ=wfgQx*0C8k_7&t&2P7p_dhk+Bs;R11#c^J4r9BvRtjfa7ofepmc;9=ll;GHbY zsLd!m*`85V&Va#)oxzZiK_Dx!EKxrvF)v*|xU#q;HJ69Mn89Rn6Js`;1rLKMgXQGU zjGc_^lWUnY>K!CO#xXDmNP!GvU|?Wj;9%fm;AdcD5MW?nn9sn%00Py!85kpl1ev!p z2yJE%19K!;z#K_1N17GPkpXk$*uWflFh`Lc%uxb!R5-vKRROlW42+S?n;7cFf+JZr zF-QhSvTkCK365mj#2_CW$-ap}DL9g26N75-W(M_*3=9lR44MoK3|tIM3=9mc41NsE z3|e4Okc<d}DAcuv49pD73=9nHTG}$(8MF}^*%%lZ7@(SXz-)E~9R@ZAhI$5023-a{ zsD3jBR<M4tO$_Rh-ppG2B5gqK^ktUb!Jx0R0c<149T4Lf;cnn$Fl8`<nxVzO1h#-n bh*4_?gZTjlM%?<C82GKghFUY&fN5I*2*gWc delta 533 zcmX@YF_nYs)W2Q(7#J8#7_268#ZJt%VH4tE5M~gWxL(agjE8}hfsKQKos)r)L6V1o z9mL@Pab$QHI6xdu5J#SeffK~x0&$dh7`PbNKr9s=25ttP$!d(+j6#!x7**wT81&c~ zbQu{0vJ%S@^>Y&Q()EKYi%U{-c^LE=3?@%y%w{v;VK8Jcoy^A6$;dW&0+U9)fE36O z1_lNe1`Y;Z20jKx27U$xhHeHH1`tT!&A=EbB*46#L2xsJD3~M80_I47IZ~`(jx?Af z%LeAifjJ87V2&ckUIxZU=1mNu!I3PR7$kxtSvN6A2S>7PVvq}tWUt@EpcuTFL3tws z0|OI-Dgy%p7XuRm0|P6ABLg#o8dwx0Bg`NIb(tXpGXpaN0|UF3w#;@0b%aJX21W)3 zs3smTo1H;}fsKKIfs;X#K?|zgjDZ!bU2GGBa-=tNk=DLQ8;}cqnWc9yXzOeM+X!+8 t#5hK{8#oyZ8H}KYXfZH>E#MMj)Y`#de1L%ww>~BYGq9QF3>IM85&+8uLy!Of diff --git a/class/logic/Game.class b/class/logic/Game.class index fa7e6721b5cbc646c4da8a106395a6fc9f946aef..8ae00fbb42cdc13ac97f064a4ffbb982b656d220 100644 GIT binary patch delta 4035 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 HF~$J^z9zrG delta 3857 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 E0EbhB8vp<R diff --git a/src/application/ColorChooserController.java b/src/application/ColorChooserController.java index bdb06d4..3dd0f96 100644 --- a/src/application/ColorChooserController.java +++ b/src/application/ColorChooserController.java @@ -57,6 +57,6 @@ public class ColorChooserController } }); - //TODO prevent closing without choosing a color + //TODO prevent closing without choosing a color --> but cancel button } } \ No newline at end of file diff --git a/src/application/Controller.java b/src/application/Controller.java index a63d076..1855243 100644 --- a/src/application/Controller.java +++ b/src/application/Controller.java @@ -26,7 +26,7 @@ import javafx.scene.image.ImageView; import javafx.scene.image.WritableImage; import javafx.scene.input.MouseEvent; import javafx.scene.layout.AnchorPane; -import javafx.scene.layout.HBox; +import javafx.scene.shape.Circle; import javafx.stage.Modality; import javafx.stage.Stage; import javafx.util.Duration; @@ -40,20 +40,39 @@ public class Controller { @FXML private ImageView iconLastCard; @FXML private ImageView iconDeck; - @FXML private HBox hboxPlayerDeck; - @FXML private HBox hboxAI1; @FXML private Label labelCurrentPlayer; @FXML private AnchorPane mainPane; - + @FXML private Label labelWishColor; + @FXML private Circle circleWishColor; + public Game game; public Color chosenWishColor; public Stage stage; public Image icon = new Image("images/icon.png"); private final ResourceBundle bundle = ResourceBundle.getBundle("application/", Locale.GERMANY); - + + private final double CARD_HEIGHT = 90.0; + private final double CARD_WIDTH = 57.0; + private final double CARD_SPACING_HORIZONTAL_LARGE = 14.0; + private final double CARD_SPACING_HORIZONTAL_MEDIUM = -3.0; + private final double CARD_SPACING_HORIZONTAL_SMALL = -25.0; + private final double CARD_SPACING_HORIZONTAL_ULTRA_SMALL = -35.0; + + private Point2D PLAYER_STARTING_POINT; + private final Point2D AI_1_STARTING_POINT = new Point2D(100.0, 30.0); + + private final javafx.scene.paint.Color COLOR_YELLOW = javafx.scene.paint.Color.web("#FFAA00"); + private final javafx.scene.paint.Color COLOR_RED = javafx.scene.paint.Color.web("#FF5555"); + private final javafx.scene.paint.Color COLOR_BLUE = javafx.scene.paint.Color.web("#5555FD"); + private final javafx.scene.paint.Color COLOR_GREEN = javafx.scene.paint.Color.web("#55AA55"); + private final javafx.scene.paint.Color COLOR_CARD_INVALID = javafx.scene.paint.Color.web("#CCCCCC"); + + public void init() { + PLAYER_STARTING_POINT = new Point2D(100.0, stage.getScene().getHeight() - 30.0 - CARD_HEIGHT); + iconDeck.setImage(createEmptyBackCard()); iconDeck.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() { @@ -73,16 +92,51 @@ public class Controller } }); - // DEBUG - game = new Game(this, 1); - game.newGame(5); + + startGame(); } public void setStage(Stage stage) { - this.stage = stage; + this.stage = stage; } + public void startGame() + { + hideCircleWishColor(); + + // DEBUG + game = new Game(this, 1); + game.newGame(5); + } + + public void showCircleWishColor(Color color) + { + switch(color) + { + case YELLOW: circleWishColor.setFill(COLOR_YELLOW); + break; + case RED: circleWishColor.setFill(COLOR_RED); + break; + case BLUE: circleWishColor.setFill(COLOR_BLUE); + break; + case GREEN: circleWishColor.setFill(COLOR_GREEN); + break; + case ALL: //TODO show quartered circle (all four colors) + break; + default: break; + } + + labelWishColor.setVisible(true); + circleWishColor.setVisible(true); + } + + public void hideCircleWishColor() + { + labelWishColor.setVisible(false); + circleWishColor.setVisible(false); + } + public void setLabelCurrentPlayer(String text) { labelCurrentPlayer.setText(text); @@ -101,8 +155,8 @@ public class Controller private ImageView createBackCard() { ImageView imageView = new ImageView(new Image("images/card-back.png")); - imageView.setFitHeight(90.0); - imageView.setFitWidth(57.0); + imageView.setFitHeight(CARD_HEIGHT); + imageView.setFitWidth(CARD_WIDTH); return imageView; } @@ -110,21 +164,38 @@ public class Controller 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.setFitHeight(CARD_HEIGHT); + imageView.setFitWidth(CARD_WIDTH); if(!valid) { WritableImage snapshot = imageView.snapshot(new SnapshotParameters(), null); - for(int x = 0; x < snapshot.getWidth(); x++) + + if(card.getType().equals(CardType.DRAW_FOUR) && card.getType().equals(CardType.WILD)) { - for(int y = 0; y < snapshot.getHeight(); y++) + for(int x = 0; x < snapshot.getWidth(); x++) { - javafx.scene.paint.Color oldColor = snapshot.getPixelReader().getColor(x, y); - snapshot.getPixelWriter().setColor(x, y, new javafx.scene.paint.Color(oldColor.getRed(), oldColor.getGreen(), oldColor.getBlue(), oldColor.getOpacity() * 0.3)); + for(int y = 0; y < snapshot.getHeight(); y++) + { + javafx.scene.paint.Color oldColor = snapshot.getPixelReader().getColor(x, y).desaturate().desaturate().brighter(); + snapshot.getPixelWriter().setColor(x, y, new javafx.scene.paint.Color(oldColor.getRed(), oldColor.getGreen(), oldColor.getBlue(), oldColor.getOpacity() * 1.0)); + } } + imageView.setImage(snapshot); } - imageView.setImage(snapshot); + else + { + for(int x = 0; x < snapshot.getWidth(); x++) + { + for(int y = 0; y < snapshot.getHeight(); y++) + { + javafx.scene.paint.Color oldColor = snapshot.getPixelReader().getColor(x, y).desaturate().desaturate().desaturate(); + snapshot.getPixelWriter().setColor(x, y, new javafx.scene.paint.Color(oldColor.getRed(), oldColor.getGreen(), oldColor.getBlue(), oldColor.getOpacity() * 1.0)); + } + } + imageView.setImage(snapshot); + } + } Controller main = this; @@ -169,7 +240,7 @@ public class Controller chosenWishColor = null; } - moveCardToDeadDeck(imageView, card, chosenWishColor); + moveCardToDeadDeck(imageView, card, chosenWishColor); } } } @@ -179,8 +250,7 @@ public class Controller } public void moveCardToDeadDeck(ImageView view, Card card, Color newWishColor) - { - Point2D cardPosition = view.localToScene(Point2D.ZERO); + { Point2D deckPosition = iconLastCard.localToScene(Point2D.ZERO); TranslateTransition translateTransition = new TranslateTransition(); @@ -190,46 +260,49 @@ public class Controller translateTransition.setAutoReverse(false); translateTransition.setFromX(0); translateTransition.setFromY(0); - translateTransition.setToX(- (cardPosition.getX() - deckPosition.getX())); - translateTransition.setToY(- (cardPosition.getY() - deckPosition.getY())); + translateTransition.setToX(- (view.getX() - deckPosition.getX())); + translateTransition.setToY(- (view.getY() - deckPosition.getY())); translateTransition.setOnFinished(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { - game.playCard(game.getPlayer().playCard(card), newWishColor); + if(newWishColor != null) + { + showCircleWishColor(newWishColor); + } + else + { + hideCircleWishColor(); + } + setPlayerDeck(game.getPlayer().getDeck()); + game.playCard(game.getPlayer().playCard(card), newWishColor); } }); translateTransition.play(); } - public void moveAICardToDeadDeck(AI ai, Card card, Color newWishColor) + public void moveAICardToDeadDeck(AI ai, int currentPlayer, Card card, Color newWishColor) { ObservableList<Node> nodes = mainPane.getChildren(); - Iterator<Node> iterator = nodes.iterator(); - ArrayList<Node> possibleNodes = new ArrayList<Node>(); - while(iterator.hasNext()) + ArrayList<Integer> possibleNodes = new ArrayList<Integer>(); + for(int i = 0; i < nodes.size(); i++) { - Node current = iterator.next(); - if(current.getId().equals("ai")) - { - possibleNodes.add(current); + Node current = nodes.get(i); + if(current.getId().contains("ai" + ai.getID())) + { + possibleNodes.add(i); } - } - - + } + Random random = new Random(); int viewNumber = random.nextInt(possibleNodes.size()); - ImageView view = (ImageView)possibleNodes.get(viewNumber); - view.setImage(new Image("images/" + card.getType() + "-" + card.getColor() + ".png")); - - Point2D cardPosition = view.localToScene(Point2D.ZERO); - Point2D deckPosition = iconLastCard.localToScene(Point2D.ZERO); + ImageView view = (ImageView)mainPane.getChildren().get(possibleNodes.get(viewNumber)); + view.setImage(new Image("images/" + card.getType() + "-" + card.getColor() + ".png")); - System.out.println(view.localToScene(Point2D.ZERO)); - //TODO cardPosition is always 0, 0 + Point2D deckPosition = iconLastCard.localToScene(Point2D.ZERO); TranslateTransition translateTransition = new TranslateTransition(); translateTransition.setDuration(Duration.millis(500)); @@ -238,21 +311,31 @@ public class Controller translateTransition.setAutoReverse(false); translateTransition.setFromX(0); translateTransition.setFromY(0); - translateTransition.setToX((deckPosition.getX() - cardPosition.getX())); - translateTransition.setToY((deckPosition.getY() - cardPosition.getY())); + translateTransition.setToX(- (view.getX() - deckPosition.getX())); + translateTransition.setToY(- (view.getY() - deckPosition.getY())); translateTransition.setOnFinished(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { + if(newWishColor != null) + { + showCircleWishColor(newWishColor); + } + else + { + hideCircleWishColor(); + } + setAIDeck(ai, ai.getDeck()); game.playCard(ai.playCard(card), newWishColor); } }); - translateTransition.play(); } - - public void setPlayerDeck(ArrayList<Card> deck) - { + translateTransition.play(); + } + + public void clearPlayerDeck() + { ObservableList<Node> nodes = mainPane.getChildren(); Iterator<Node> iterator = nodes.iterator(); while(iterator.hasNext()) @@ -262,6 +345,11 @@ public class Controller iterator.remove(); } } + } + + public void setPlayerDeck(ArrayList<Card> deck) + { + clearPlayerDeck(); int counter = 1; @@ -271,25 +359,38 @@ public class Controller current.setId("player"); mainPane.getChildren().add(current); - AnchorPane.setBottomAnchor(current, 30.0); - AnchorPane.setLeftAnchor(current, 100.0 + (counter * (57 + 14))); + if((deck.size() * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_LARGE)) > (stage.getScene().getWidth() - PLAYER_STARTING_POINT.getX() * 2)) + { + if((deck.size() * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_MEDIUM)) > (stage.getScene().getWidth() - PLAYER_STARTING_POINT.getX() * 2)) + { + if((deck.size() * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_SMALL)) > (stage.getScene().getWidth() - PLAYER_STARTING_POINT.getX() * 2)) + { + current.setX(PLAYER_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_ULTRA_SMALL))); + } + else + { + current.setX(PLAYER_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_SMALL))); + } + } + else + { + current.setX(PLAYER_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_MEDIUM))); + } + } + else + { + current.setX(PLAYER_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_LARGE))); + } + + current.setY(PLAYER_STARTING_POINT.getY()); - //TODO if larger then maxWidth counter++; } } public void setValidPlayerDeck(ArrayList<Card> deck, ArrayList<Card> validDeck) { - ObservableList<Node> nodes = mainPane.getChildren(); - Iterator<Node> iterator = nodes.iterator(); - while(iterator.hasNext()) - { - if(iterator.next().getId().equals("player")) - { - iterator.remove(); - } - } + clearPlayerDeck(); int counter = 1; @@ -309,26 +410,54 @@ public class Controller current.setId("player"); mainPane.getChildren().add(current); - AnchorPane.setBottomAnchor(current, 30.0); - AnchorPane.setLeftAnchor(current, 100.0 + (counter * (57 + 14))); - //TODO if larger then maxWidth + double maxWidth = stage.getScene().getWidth() - (PLAYER_STARTING_POINT.getX() * 2) - CARD_WIDTH; + + if((deck.size() * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_LARGE)) > maxWidth) + { + if((deck.size() * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_MEDIUM)) > maxWidth) + { + if((deck.size() * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_SMALL)) > maxWidth) + { + current.setX(PLAYER_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_ULTRA_SMALL))); + } + else + { + current.setX(PLAYER_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_SMALL))); + } + } + else + { + current.setX(PLAYER_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_MEDIUM))); + } + } + else + { + current.setX(PLAYER_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_LARGE))); + } + + current.setY(PLAYER_STARTING_POINT.getY()); + counter++; } } - - // TODO other AIs - public void setAI1Deck(ArrayList<Card> deck) + + public void clearAIDeck(AI ai) { ObservableList<Node> nodes = mainPane.getChildren(); Iterator<Node> iterator = nodes.iterator(); while(iterator.hasNext()) { - if(iterator.next().getId().equals("ai")) + if(iterator.next().getId().contains("ai" + ai.getID())) { iterator.remove(); } } + } + + public void setAIDeck(AI ai, ArrayList<Card> deck) + { + clearAIDeck(ai); int counter = 1; @@ -336,13 +465,46 @@ public class Controller { ImageView current = createBackCard(); - current.setId("ai"); + current.setId("ai" + ai.getID()); + + //TODO other AIs (vertical) --> flip imageViews by 90 degrees mainPane.getChildren().add(current); - AnchorPane.setTopAnchor(current, 30.0); - AnchorPane.setLeftAnchor(current, 100.0 + (counter * (57 + 14))); + double maxWidth = stage.getScene().getWidth() - (AI_1_STARTING_POINT.getX() * 2) - CARD_WIDTH; - //TODO if larger then maxWidth - counter++; + if((deck.size() * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_LARGE)) > maxWidth) + { + if((deck.size() * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_MEDIUM)) > maxWidth) + { + if((deck.size() * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_SMALL)) > maxWidth) + { + current.setX(AI_1_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_ULTRA_SMALL))); + } + else + { + current.setX(AI_1_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_SMALL))); + } + } + else + { + current.setX(AI_1_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_MEDIUM))); + } + } + else + { + current.setX(AI_1_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_LARGE))); + } + + counter++; + } + } + + public void clearAllDecks(ArrayList<AI> ais) + { + clearPlayerDeck(); + + for(AI currentAI : ais) + { + clearAIDeck(currentAI); } } diff --git a/src/application/MainGUI.fxml b/src/application/MainGUI.fxml index 74c58d8..3d499e5 100644 --- a/src/application/MainGUI.fxml +++ b/src/application/MainGUI.fxml @@ -3,19 +3,23 @@ <?import javafx.scene.control.Label?> <?import javafx.scene.image.ImageView?> <?import javafx.scene.layout.AnchorPane?> -<?import javafx.scene.layout.HBox?> +<?import javafx.scene.shape.Circle?> <?import javafx.scene.text.Font?> <AnchorPane fx:id="mainPane" 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" alignment="CENTER" layoutX="85.0" layoutY="453.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="44.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> + <Circle fx:id="circleWishColor" fill="DODGERBLUE" layoutX="392.0" layoutY="275.0" radius="16.0" stroke="BLACK" strokeType="INSIDE" strokeWidth="0.0" /> + <Label fx:id="labelWishColor" layoutX="355.0" layoutY="230.0" text="Wunschfarbe"> + <font> + <Font name="System Bold" size="12.0" /> + </font> + </Label> </children> </AnchorPane> diff --git a/src/logic/AI.java b/src/logic/AI.java index daa3659..b18d333 100644 --- a/src/logic/AI.java +++ b/src/logic/AI.java @@ -6,13 +6,15 @@ import java.util.Random; public class AI { private String name; + private int id; private ArrayList<Card> deck; private int wins; private Game game; - public AI(String name, Game game) + public AI(String name, int id, Game game) { this.name = name; + this.id = id; deck = new ArrayList<Card>(); wins = 0; this.game = game; @@ -32,17 +34,22 @@ public class AI { return wins; } + + public int getID() + { + return id; + } public void drawCard(Card card) { deck.add(card); - game.getController().setAI1Deck(deck); + game.getController().setAIDeck(this, deck); } public void drawCards(ArrayList<Card> cards) { deck.addAll(cards); - game.getController().setAI1Deck(deck); + game.getController().setAIDeck(this, deck); } public Card playCard(Card card) @@ -151,6 +158,7 @@ public class AI if(playedCard.getType().equals(CardType.WILD) || playedCard.getType().equals(CardType.DRAW_FOUR)) { + //TODO choose color that is mostly in deck (except black) Random random = new Random(); int colorInt = random.nextInt(4) + 1; switch(colorInt) @@ -166,7 +174,7 @@ public class AI } } - game.getController().moveAICardToDeadDeck(this ,playedCard, newWishColor); + game.getController().moveAICardToDeadDeck(this,game.getCurrentPlayer(), playedCard, newWishColor); } } diff --git a/src/logic/Color.java b/src/logic/Color.java index 09818fb..de174c5 100644 --- a/src/logic/Color.java +++ b/src/logic/Color.java @@ -2,5 +2,5 @@ package logic; public enum Color { - YELLOW, RED, BLUE, GREEN, BLACK + YELLOW, RED, BLUE, GREEN, BLACK, ALL } \ No newline at end of file diff --git a/src/logic/Game.java b/src/logic/Game.java index 16355aa..00969b3 100644 --- a/src/logic/Game.java +++ b/src/logic/Game.java @@ -33,7 +33,7 @@ public class Game ais = new ArrayList<AI>(); for(int i = 1; i <= numberOfAIs; i++) { - ais.add(new AI("AI " + i, this)); + ais.add(new AI("AI " + i, i-1, this)); } gameCount = 0; @@ -67,6 +67,12 @@ public class Game deadDeck.add(deck.drawCard(deadDeck)); lastCard = deadDeck.getCards().get(deadDeck.getCards().size()-1); controller.setLastCard(lastCard); + if(lastCard.getType().equals(CardType.DRAW_FOUR) || lastCard.getType().equals(CardType.WILD)) + { + wishColor = Color.ALL; + controller.chosenWishColor = wishColor; + controller.showCircleWishColor(wishColor); + } start(); } @@ -142,16 +148,7 @@ public class Game controller.setLabelCurrentPlayer(currentAI.getName() + " ist am Zug"); - 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; - } + controller.setAIDeck(currentAI, currentAI.getDeck()); currentAI.turn(lastCard, wishColor, challenge); } @@ -199,6 +196,9 @@ public class Game private void end(String name) { //TODO alert + + controller.clearAllDecks(ais); + System.err.println("Player " + name + " wins!"); running = false; -- GitLab