From 647d708b50ff7aef63abae65011e4dffaad5120a Mon Sep 17 00:00:00 2001 From: deadlocker <deadlocker@gmx.de> Date: Wed, 13 Apr 2016 17:52:01 +0200 Subject: [PATCH] -fixed design of non-valid cards -added functionality for 3 AIs -added animation on card draw -added icon "direction" in UI -added "challengeCounter" in UI -... --- .../ColorChooserController$1.class | Bin 1356 -> 1356 bytes .../ColorChooserController$2.class | Bin 1353 -> 1353 bytes .../ColorChooserController$3.class | Bin 1354 -> 1354 bytes .../ColorChooserController$4.class | Bin 1355 -> 1355 bytes .../ColorChooserController$5.class | Bin 0 -> 1020 bytes .../application/ColorChooserController.class | Bin 1283 -> 1455 bytes class/application/Controller$1.class | Bin 1482 -> 1610 bytes class/application/Controller$2.class | Bin 3337 -> 1112 bytes class/application/Controller$3.class | Bin 1586 -> 1256 bytes class/application/Controller$4.class | Bin 1578 -> 3337 bytes class/application/Controller$5.class | Bin 0 -> 1580 bytes class/application/Controller$6.class | Bin 0 -> 1498 bytes class/application/Controller$7.class | Bin 0 -> 2481 bytes class/application/Controller$8.class | Bin 0 -> 2452 bytes class/application/Controller.class | Bin 14429 -> 20703 bytes class/application/Main.class | Bin 1861 -> 1861 bytes class/application/MainGUI.fxml | 61 +- class/application/Settings.fxml | 70 ++ class/images/DIRECTION_LEFT.png | Bin 0 -> 9096 bytes class/images/DIRECTION_RIGHT.png | Bin 0 -> 8649 bytes class/images/circle-all.png | Bin 0 -> 8410 bytes class/logic/AI.class | Bin 5702 -> 6027 bytes class/logic/Deck.class | Bin 3661 -> 3057 bytes class/logic/Game.class | Bin 6755 -> 9067 bytes class/logic/Player.class | Bin 4412 -> 4581 bytes src/application/ColorChooserController.java | 10 +- src/application/Controller.java | 710 ++++++++++++++---- src/application/Main.java | 3 +- src/application/MainGUI.fxml | 61 +- src/application/Settings.fxml | 70 ++ src/images/DIRECTION_LEFT.png | Bin 0 -> 9096 bytes src/images/DIRECTION_RIGHT.png | Bin 0 -> 8649 bytes src/images/circle-all.png | Bin 0 -> 8410 bytes src/logic/AI.java | 58 +- src/logic/Deck.java | 27 +- src/logic/Game.java | 113 ++- src/logic/Player.java | 32 +- 37 files changed, 988 insertions(+), 227 deletions(-) create mode 100644 class/application/ColorChooserController$5.class create mode 100644 class/application/Controller$5.class create mode 100644 class/application/Controller$6.class create mode 100644 class/application/Controller$7.class create mode 100644 class/application/Controller$8.class create mode 100644 class/application/Settings.fxml create mode 100644 class/images/DIRECTION_LEFT.png create mode 100644 class/images/DIRECTION_RIGHT.png create mode 100644 class/images/circle-all.png create mode 100644 src/application/Settings.fxml create mode 100644 src/images/DIRECTION_LEFT.png create mode 100644 src/images/DIRECTION_RIGHT.png create mode 100644 src/images/circle-all.png diff --git a/class/application/ColorChooserController$1.class b/class/application/ColorChooserController$1.class index 85395f688ebd45b8f0700226b84bc5c7cf105513..1c74f38cb7e934d7b98bdfd7a02d5b30867b2c5c 100644 GIT binary patch delta 27 icmX@Zb%tw06$_*2<Z2dAPALX125AOC2ARocS?U33I0mEu delta 27 icmX@Zb%tw06$_)t<Z2dAPDutX1}O$X2I<LXS?U333I?D6 diff --git a/class/application/ColorChooserController$2.class b/class/application/ColorChooserController$2.class index fc6c75929efa6cda63727bb7e002f61112616edc..e993f20f323a2112ddccc48f8d6cf74a25cf095b 100644 GIT binary patch delta 27 icmX@fb&_jCISZrw<O&u~P89|&22}<@2DQnjSn2_2>IS_4 delta 27 icmX@fb&_jCISZrQ<O&u~PGtrz1{DTD2Gz-@Sn2_2yau@d diff --git a/class/application/ColorChooserController$3.class b/class/application/ColorChooserController$3.class index 5230175f9388b5b1ab8302573a7f15d4ca958bd8..484b5d94df7df823b4b43eb0e6b17709ff07a4d1 100644 GIT binary patch delta 27 icmX@bb&6|41q-9*<VqG#PCW)L27LxW27}3`S?U366b9-5 delta 27 icmX@bb&6|41q-9b<VqG#PF)5r20aEr2K~vWS?U35<_6{f diff --git a/class/application/ColorChooserController$4.class b/class/application/ColorChooserController$4.class index a3193630ce7f52340aabead89fafc6e35d77d3e1..f34045217f30e2017f9c3e5af9ff8c033bf52a91 100644 GIT binary patch delta 27 icmX@jb((8KB@3hR<SG_VP74Mu21^D(2CK<uSn2_7J_i>7 delta 27 icmX@jb((8KB@3g`<SG_VPICq>1`7s32FuB3Sn2_75C;<g diff --git a/class/application/ColorChooserController$5.class b/class/application/ColorChooserController$5.class new file mode 100644 index 0000000000000000000000000000000000000000..aa0538e290b67fff8b8ac17023452860e8e0cb5e GIT binary patch literal 1020 zcmX^0Z`VEs1_l!b9d-sLMh2C{f`XjP<iwK9{5*Z<{G9wE=ZyUP;?yGN{JfH){G6QB zA{A411{OvJfvm)`ME#t^ymWp4q^#8B5_SeQMg~ccXj+ASYFTPtiM}g{^hnH0$w@6@ zWMC`F$ShVdU}RA7A#95^BLkaFW?p8A9V3If1~D2m!x$M@obyvsIT;ukczGDu892BY zm>Kwa7&sXO7#Wx~KnnPMGV@aXN^_G^i$W5Ua#9%?gnaUo6LZ26i!wocs2~f-sf-M2 zMA)lh3UX=&*prM5vKl_n5GXE5Oi$Gh&&*57F9(N%wPqL>g9L*VJA))6g9I*BJPgtx z*Rm()=M|UcrZO_Hf`gKgK?=9Qj11y%Yr(1^0S~s2kwJlnL6kv^k%22XzqBYh)h!d` zYiaCps|RuxBLin}W_n&?Noi3kBZDW{UgU_j28&>gWE+?irtj^n85#Ip^OAG&i!<}m zeN#&^@>AFu)EOC+2qy*}22BPnMg|s8dSGPGhkF)cOE4&;t<j<imRhYrvCiX}mzP@P zoRe5woLbDFz`)4B%)rRN%D^Zf07@nd3=GT+3=EtMTnvm1+zbp177R=bObiSRTw2;& z8F;j|Gw^L>U|?Wk5Cn;VWk9-Z8H5-Z7<d>M!J@(pA`A=+jG(ZFnqteq2v*Cgy^TQ} z-2f*B76xaq0b&qE3=jht7+4u(7-Sh31soYf8RVcwX+j;usil2@L1G(&Ji<6Ou>Fi+ nqd;zEVNe9SRf$0vOsg=cGB7Z(FsLzTFld8a$_UoMz`y_iuFd)x literal 0 HcmV?d00001 diff --git a/class/application/ColorChooserController.class b/class/application/ColorChooserController.class index ba11f7c2f89e2ed9473d440537ec127f2ec99b69..1378dc08149456c94e4e45105791504745ea56aa 100644 GIT binary patch delta 277 zcmZqXTF=dO>ff$?3=9k=3@#hFc$k^l8B8W`WKt6_<zg^qFymq1VK8T8P}lI8D4=9% ztr^C}V98+3&S1sJAe5C@mY7zdUtE%yo~j=VB6%2W7?c?q1dCHk{PUc1@{3c0QVUB{ zi%T|(F|#u=a!;0Hk>^~@z{bGLz`zhV*^R}eUVAr#airFE2GeZ}78@BD7?>CY85kI( z7}yvX7(^Ka8RQw17&IA-8H^cR7;G5=7+e{I7#J87ASN&fGl(#NKp=xHgB=4S$W#V< u1_uTv1||kauxU;V&I}9;S`4fVk|2c)3=C>eS{p=z3^M>R7#J9gAv6Fya46US delta 164 zcmZ3_-OR;x>ff$?3=9k=3|1Stc$hb@VrFO5<YEwFU|`^3U}RumU}X?y5Mf|oU}O+w z5My9u;A3E5n9RV&z|6qF;5zvhi%aB21_lNu20;b}1~CR!1_lNZ20;cn1|<d!24e;z z1{VffuxSbq9Z=I47+e{Q8BD-7xH6bBm@zOhFfo{eO|oFHWME)WVqlrv&Z+<a;y)2R diff --git a/class/application/Controller$1.class b/class/application/Controller$1.class index 5f739f9a5a101f6660e74bcd18fc309a2e51c369..1e159b04bcc10e758a54a6ad35ca4ba9fa4b5df2 100644 GIT binary patch delta 693 zcmX@beTs+c)W2Q(7#J8#7$P@vone$#Vr1aWEDp}dFVD<N_smPn=VFj!(B@&#VbGn# zB+sVL!(hN*I9ZiRRl=CTl%2tZk%22GKRq*9-z7CUn}@-S!F+NOlTJN5gC!$_a8_bj zqJC*fW{$pNQBh*0PiAom7lQ=@KZvm5VX$SeV`N}XOi5v65Y_MjE6z#GOV{^L%1TWx zvDS>@Vvt~P;9+oNaAIVT$jvWHbxtfwaVyHt1z8r7ACQw+nOeliAOY2kuxT<MGy7yU zW}SMjl%mA))D)0DMg|@qh*Lp4Yeoi+#GD)uvzU=V6k<EV0FYCy85zWU@{<#D!V-%z z6O(dMLn;eWLqH5h24!p-Y>>^jvu0%AogB=p$>=w^mRW@{VDcj7sf^*1Em#s6lPAw& zk*~kNz{J49z`zi$wS|Fa3xoJJ2HBYmK5&jQ%K`>FI8S{RgCU%w1!w7PV=(gF&0rC^ zox#daS7#f8HP|%WZ4CAs85kH?7z7y@7^E237#J8b7&I8N7#tX~89W$r82lLOa~Z-I z@)?8}7#Or5?qCpR5Mcm;a0X`v7Y0TK2L>?)R|Yo*CI$}%J_dIN4+driPX-1C9tK9J zh!+DhgEs>M11kgLZ-y`dM+Q*_9|lGSZUzPhO$H_gCI$uuPA%;N48GeK{6P+40y~I} wfsuj1jDZnsIY<o)Lm&eK0~13KLok>QVF(4gUV<TvA%cN{fs26=qy^+Q0JVXZF#rGn delta 582 zcmX@bbBdem)W2Q(7#J8#7$P=uonh3{Vr1Y<Pb~?^NvupQVq_4|(Dcd4PtQ!&hlp5n zF~~9K@G$5y=uQ5}D9>iV!(hl@G+B&ERl<b9jGe)hk%0@M-X%3Tn}@-i!D4bSlTJMs zgB61fJA*YN0}n(RVjM_;Eh7WJ2GkPg#G({y%`lK^dypj#j11x$nm$>HWr_NwC7C(; zjzvX@l|GrpCDvRF5)4i}49*NLj10WRFc*VtWn_@hK+`h$FB69h$mwo84DJj9j0`L( zMTzB%46LbTsd*)g4Dyo|8RaLhW!7QwWn_?@EXXX&%EiFQ;6M34^Hj#L$x~Sp8GR>z zXOXX8%fQUQ#K6E1r?rKFXA6V)HU`<548d@YGRp!6S2#}{&eDdn^tUk>Z)30o@j)1D zg!(oHyKM}PaK7tC1_lOZ20;b}1~CR!1_p*825E*62789kdWK+zD27;u7zQD*B-kko z!VDq|AP~pk!Qjcj$l%4mz`)AD_?sbCz>z_e!JC1Rft!JWL6d<A>~>Bq?E?%x+Zg;n z)-ZvsVPjxqU|?Vbn+h_Mg&}}}fq{u3kRb?62Q!2)Ffgz%2um=8GK4cQFn~e_q=kWj F0RWo%bL{{C diff --git a/class/application/Controller$2.class b/class/application/Controller$2.class index a0aa43b035592b38636ea5ba4e940b4eadbfcad3..8772805082f719d2f4069e28ab38c667cdc86f64 100644 GIT binary patch literal 1112 zcmX^0Z`VEs1_l!bYjy@EMh1z*f`XjP<iwK9{5*Z<{JfH){G6QBA{8Tc1{OvJfvm)` zME#t^ymWp4q^#8B5_SeQMg~ccXj+ASYFTPtiM}g{^hnH0$w@6@WMC`F$ShVdU}TW+ z!EUlOBLkaFW?p8A9V3IZ1};UKVT=qc&iN^+oD7T%ygUr-3>;hx%nbZI44e!Cj10^g zAO-wBnR%&xrMXF|MInhvIjM{cLO%J)i8*13MVTNzRFDPaBt`})9CoP~ft-{9_5dS; ztcDMY?;MjsAp`cKwPqL>g9L*VJA))6gBW(-@i0g;$S^W+Bqk@P7K6jV9Je1~HWeqQ z=B4T<LjqslskEddKhK(rL5@Lzok5<FK^p2HY|3~T6d9Bl8Mum5OTsdXGr@ttq7kJT z#>pVTpu)qT%Am%`z>=Pro65+*<CBx0o|&xgo|v0z&BdU>pvBIh$;iNk5anUe28Awb zaY<rP2_pk5ID$bT2Xz6Mua6ugj11yv0R{^yb_P%)z@?Fkfsw(8he4D<jFEvWIKQ+g zIn^x_6odSTG^hvC%*enQoSB}NSW;S)%E;ge4l?8fX$=;^niy?RrI4L%XU)jK@0ypK zlV6;fm+qTdl98Xn!(a*WJSW)mpfF-&;PK4MOD%HFNh~f-EoM+)U}RusU}RurU=$Dl zrAP(_24)5Z22KW$Z@3v47%Ui=7?>Cs7`U{ww=(c(ZD-)y$iTqB#2^R~1IvJPPhb#Y zU|`^3U<8W_Gl(!SFff9Gf`O3%WJ(a!6fvzW3_Lp+#F@7-$by(#7?ig$s3T0|1KU28 zftz6(gDAsvu&H8TTf`V3rZO;yG3YSpGB64_GKezhLCx2Mn$M}FeSkrK8-pRjNH(ye p7{Nw?Ji@|Y4EBHtgDIFcV=!l6U|?a8V6b4Y0z01(tb>7p0RX>F2J!#^ literal 3337 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 diff --git a/class/application/Controller$3.class b/class/application/Controller$3.class index 4110b5483de2867c4528fd4f6ee2bd18a4a22fed..5af37a53a20cac3ee4c586dd3c0da87139da798f 100644 GIT binary patch delta 756 zcmdnQ^MaG>)W2Q(7#J8#7+fcERr0XeWaed-*fBClYxqnQ5R<dk3}a+qan4Uk<z!%F z;N@XpXW-ysU}oUwVc=vCn5@fK#lguS!63!XAUSzGqcpQLgUn<FCW(4E1_gEoc}51V zoc#36WPSI<+*BS0MFu5C2KMyS5|`BEY(@q?4NV`2G>C7_#URI^!o#4-pvK4`oSs_Z zoROH5lbV;F>YQJiSCU%9$iS?j=?PM$!NZ`*pvB0*4K^w<1*DykK?upXdWfJk7lRIi z9y^0B+#w*PJPi5_28;}xDMg9p&WS}S#f%IZ8lG^cK(%W6WF?j*>X(*e=IA>X6(v^s zWEPiLb1_IT81XO|Gng<kNaW_1rGgA_E6UFW861)ykds&ma_QvLOp=rBnboDmHNeKC zRp_UdrRJ6ByMjn-%`kQb%gGa&<=L!x7(^MwCU0Zzu6JT^W@O+f&d4wK%uCB>WDtXB z)z3-HOV<xBDay=CxAp`@2aji7UTTqZPGWI!YB7TX10w@710w?~1EYWdD0&ze7?>Ft z7&sZY7#JD285kHW7?>EC7#JA1w6wP}@Mvvk;M>T+z`(>H2oeL!fOOY?W)NavVBle3 z1Pco@h%hiPFoIkMH71dP1*}+8YYPJp2ybB!-^L&dXDP#3>f0E!w=o!^+wy}!gW)IG z5;2HD3=m5g7&IA78Pd!c7zG>|L>bJX_Gv<$&8ek*fWcxLgB8L&Hn1ZZ!DfMc#=>9& g_K_`v9hkOfaA06yU}2D8aAa@+dxsIMgMono0Gj@c*Z=?k literal 1586 zcmX^0Z`VEs1_l#`5OxM8Mh1z*f`XjP<iwK9{5*Z<{JfH){G6QBA{AqH1{OvJfvm)` zME#t^ymWp4q^#8B5_SeQMg~ccXj+ASYFTPtiM}g{^hnH0$w@6@WMC`F$ShVdU}TW+ z!EUlOBZEL$Vvb5)YI%5OafWk#PJR(11Fug`etKrIKA3CG$iM+olAKtS!pOh_lS(W~ zv1Vjov&qcMEU{x`Fwwwe155+RXlob;q+2tLk%7fIKP8oufssLwhk>1e1H=;MVc=xo z0<lDS7`PdDxEPoj#CaHa86+4Pm^DC}_<b_-QvFJElTwR95|eUL85x9p@{<#D!V-%z zL42qn3&`_~3{p58reX|oe+D?H7#U<Wd{DyCF&PvG;Lx<z4C7)@U{GRbP-J8f!yb-2 z49W~Dj10oX8TsYTnMKJtsYt;opaJtXI1C`hsqrwVgS;f1k(rW;riGJ1fkBgpL5o3~ zk%1*WF*g+v?(T`Xsn%Q!x(xd440?<VT#$$YiSjTQFc>m2aHgl01mq-Ef}&qQLlbH< zM8ukl!I;66oxy~Wfd`@yBF@8L#$e9Kz@DC3;*y%2&B!3Gp$QHS{nC=m9DT>4qQpv{ z%;FMjP&iofFjz5IGcxcN!z_a6k${9Cx)zXcjTvlt80;AA85uYVauO?@!6``!9xC9( z0Cgxx4(vZikPatC1{oA(FjdfiWMp6kCwovV<BUE=2HxP3#N=$>!~$r_5QjJwHPcvY zhOskvFfvHsGKh<Tk->|HL6$*|k%22XzqBYh)h!d0`uGt!RS%?@k%2QfGd(Y{q_ilN zk--xZl1SOs8Z3fpJ2cDMph_X9LOW|l27cGP<edEC%)E5p)RK(+6dr~^h9E`;q1^nk zR8Yu;<h!IMra<Du3hv3`<kY-W{mk6N^i+LM5E+)4T8@$xF@lxHGcPZ-$T=smxHz?# zL4kphfti7kft7(-Kme3a85jhFK)Do5b2IQTFfcGPFfi~k@G&ql@G~$lI599WurM$% zh-hhVWf0KP*~%cKrMs0uL~A>P*hU5h1||kc1_lN$1||jukPb#p1}O#x1|9}RkRAqU z1{tupEQ1_KmVtp`83Qv|ZGhGm2BBjNf?8V`1VGGf4D!nvxInyZ45}asgtstgY-7;b z#$dFK!2-&MQrj4Gw6-vaY-6y2Xm$X(g&FJ?IR<tH21Y&xc18gPAx1$4QAQC48AdS% z14eNMe?|$g`@|q_fVz)?A%MY|!G(d5!Igo5frWudluf{qL6*S{>Sj#_Ca`)=E$ssg y?%NnVL6$*0&Ia}<BiK+-5U?<Kg9F8f!52*XG5CXxRA2~T2nGifBUlFm0|NkutAU&V diff --git a/class/application/Controller$4.class b/class/application/Controller$4.class index bccccc2fa9f7fb94a704391dfd153344a519d915..83d0a0d6d7d5d44b27d64481536e0e22438f65a6 100644 GIT binary patch literal 3337 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 literal 1578 zcmX^0Z`VEs1_l#`5OxM8Mh1z*f`XjP<iwK9{5*Z<{JfH){G6QBA{7&M1{OvJfvm)` zME#t^ymWp4q^#8B5_SeQMg~ccXj+ASYFTPtiM}g{^hnH0$w@6@WMC`F$ShVdU}TW+ z!EUlOBZEL$Vvb5)YI%5OafWk#PJR(11Fug`etKrIKA3CG$iN0tl9<WJzy+0X^t5JV z-~fpxCl;kJGVnmfofC^vK<aHW^D;~97#Zv|aM=sf0J6{;%5n6BvB2hNhA}d*IOnIN zaxyS72=g$oGjM=dqC5<o3|t_VI1d9i0}qHL$-}_Qz{kbF%plFfz|SDV$iS=t($4Rb znV0HUnwykb6q1;flgh{-<ddJAm=l&*lnLTP1zAAB#K<6p!?7wRAU|b*1C^0MR>KD+ z#2u4Cu>}ryYt1k&1{DT1b_P{O1~Kd*&cmS2puxx>T%3_#?wnbaoRf+a@B$jppn!xt z#5gS;25pd+gflWzQqi<<G3YYrvoq*1GH^hm%+ZsF!GOV#k%2uuwZtVgIh&C|TtgG= zV*S#R%p85kqN2n~pUmPCYmifoc^FI>Oc@zCi&IM+Jt69qV2%LA2gs}F8a2Z>8B`d| zc^E7hEEySC(i3x25lO&3F*ns3<Sc6*1{(%jMh1?8oWx2{gfcQn!Au5mtu<kO1tl6T z273lab_NGV1}=z4K<0o<aAIVTLD2@&1x`7jNM;46d{Fd(91G70$nnC+z#CkWn4ImK zSOAT3akN;3#UDF^2P1<7E`zuj7#X~H7!(<l7#X;N^Gl18Q{6H_$%-G5S@l4g85uZ( zGt=`DOG=AU85ukw;g6Jat-&I2w}Nel=2{z6DP(WhSu-;5yXGb5<QHe=rTeCqWaOvt zFa$CLF*1nc=9i^9dV&HrB;O@9F$EHr>ad`5^tASbg&ZinVQhFP@_6Rur4~8oBo-H^ z7BeU?FfuSRFfy<*um}i%avlSNfDkC(foX0A9x%<zz{kMAz|6qFz|SDSz{nuTz`)?a zz{J4Hz`!7-rM;CwNK0ocgNT;yRt7OGNtUe)5?b3Cq&6}zFfcL5GB7Z3F)%SOFfcNR zGTJc6F)%RjFff92GRQM1fW;LVl%S^0V_*iW_0ZbFAaaaBP-_c=5Qw>rL3ud?7l^lw zK@&u2ZD9}t;cW~$+Zc>MB3l^DKmuA@7$mkaSV1(|f!x3hc7q%PI|BowBLh35GlLML z3xg=5JA(|PCxafN7lS*aH`rZb5WAu70{PLI!G(d5!Igo5frWudluf{qL6N}?>Q+q# zCa`)=E$ssg?%NnVL6$*0%m(%#BiK-o*I5|6!GYn!;0vbx82rITsxSmF1cL*J5v+rO GfdK#~l6pV@ diff --git a/class/application/Controller$5.class b/class/application/Controller$5.class new file mode 100644 index 0000000000000000000000000000000000000000..50f44e4cf0791a6e12b8034d9836a60254a4090e GIT binary patch literal 1580 zcmX^0Z`VEs1_l#`5OxM8Mh1z*f`XjP<iwK9{5*Z<{JfH){G6QBA{A411{OvJfvm)` zME#t^ymWp4q^#8B5_SeQMg~ccXj+ASYFTPtiM}g{^hnH0$w@6@WMC`F$ShVdU}TW+ z!EUlOBZEL$Vvb5)YI%5OafWk#PJR(11Fug`etKrIKA3CG$iM+olAKtS!pOh_lS(W~ zv1Vjov&qcMEU{x`Fwwwe155+RXlob;q+2tLk%7fIKP8oufssLwhk>1e1H=;MVc=xo z0<lDS7`PdDxEPoj#CaHa86+4Pm^DC}_<b_-QvFJElTwR95|eUL85x9p@{<#D!V-%z zL42qn3&`_~3{p58reX?me+D?H7#U<Wd{DyCF&PvG;Lx<z4C7)@U{GRbP-J8f!yb-2 z49W~Dj10oX8TsYTnMKJtsYt;opaJtXI1C`hsqrwVgS^C>k(q)}%*mj@pvl9a#h}f| zz>=Prn~Df=_r%;(Yc2*|27Pu0Jw^sDNECrYc^C{B3>g_X(^E?VauO>+5ig*j3AGa< zV$H>1%wWpSV8Y121JMW(=V35oFlS_7PfsmzNlngXWDwWT1P6qEX-Q^|zGG2QVx>=J zafvl31T1+NtQf2r8F-6f7D4n#K*A1P3&@|w47NNBb`1863>*bHiIvXaG$aKN4{$Po zIus-a_Man2hZ7@%42m+CDrgWgGO&UZJScu~MjRspZ*WOsa<*?`0W?jBL!645U92_3 z*cm(+86<ES#KpkK;Kjor%OJ<dz!jWdT9lmXmI+FC{D?fN2hz;Qz!{vGo|jlsT9nGj z;0Xyyqzr2f7D2Tgnptg7rI6E~oi!r^ziVD{PJVG_Ub=5;Nk)DO4?`eB5F>+7Zhl!R zDC9!&T~ZTMAn{=Z_hfN$YF?^-W^Q77s=g<P49iR{N6Ca3!OG*AmzP@PoRe5woLbDF zz`)4B%)rRN%D^lj0Lq~Z3<5%+{0XMH8F&~N7?>Ft7<d`@7#JD&85kIx7?>DX7#J8t zw6wP}2x#eSWf0QR-O3=MwVgq1BLf2i6N4lJ0|OTW69WTC2jdh5DFy}x9tK8`9tLR! z8L+r4gB(bffq`Ke12b4{fYufUp<@h!T3Z+dK+J6n^2-^xK)h`Xsvru4w=igIW6;^g zV6=_F0?LO{+Zc4TwlIinW3Yi}b^y7B8SEB026hGp#+eN4jI$Yp80RpEGR|j^VO+>y zz_^IPpK&qRePR$dK;6f{5WwKf;KIPj;L5<jz{0>J$|m5*Aj{web+aY|6IeZ`mi7S# y_iYTGAj=>gX9Ihb5o{<Z2v``r!GYq#;0vbx82rITDlh~v1cL*L5v+rOfdK$WD1)E? literal 0 HcmV?d00001 diff --git a/class/application/Controller$6.class b/class/application/Controller$6.class new file mode 100644 index 0000000000000000000000000000000000000000..3bf96ae40a12298d8a832db127f13f189970680a GIT binary patch literal 1498 zcmX^0Z`VEs1_l#`0Col@Mh1z*f`XjP<iwK9{5*Z<{JfH){G6QBA{8@s1{OvJfvm)` zME#t^ymWp4q^#8B5_SeQMg~ccXj+ASYFTPtiM}g{^hnH0$w@6@WMC`F$ShVdU}TW+ z!EUlOBZEL$Vvb5)YI%5OafWk#PJR(11Fug`etKrIKA3CG$iN0tl9<WJzy+0X^t5JV z-~fpxCl;kJGVnmfofC^vK<aHW^D;~97#Zv|aM=sf0J6{;%5n6BvB2hNhA}d*IOnIN zaxyS72=g$oGjM=dqC5<o3|t_VI1d9i0}qHL$-}_Qz{kbF%plFfz|SDV$iS=t($4Rb znV0HUnwykb6q1;flgh{-<ddJAm=l&*lnLTP1zAAB#K<6p!?7x6AU|b*1C^0MR>KD+ z#2u4Cu>}ryYt1k&1{DT1b_P{O1~Kd*&cmS2puxx>T%3_#?wnbaoRf+a@B$jppn!xt z#5gS;25pd+cr!9n5Q;$->GCk>G3YZga2BVQIC{FICTBA;@WPC6^t9Ft<77}_Fyvt{ zVlZZ8U`bERO-00&dtz>?H5Y>^gE>2c86yJ+B+4B<c^E7hEEyR%3UU%FLGi%IAO$lL z#I@FhIS~}sTnyF>w(JZxj0{{5{UB38CfG4D$e?J0=>kVMC~jE62^JLUID?asfj77$ zF*(~eu>cxV;%I>n3wCw}7e)pNTn2G5FfzFDFeox8F*0xk=a&{Gr@Cc=QUgCCkLiIl zGcs@nXQt;RmXsEyGBS9ABN{owS%XEeW;PpCDdbdPXU)jK@0ypKlV6;fm+qTdl98Xn z!{E!{$H*X(n_rgd=m`qgkbIZa#1u#*s>6cL(bL)!7IL8QhOyzH$m5xpms;eUlUQ7w zTFjupz{tSNz{tSLz#<?3$}kKJ0z#nd0;ahcc)&C-10Mqe12Y2y13!ZR10#bV0|SEx z0}}%)0|SGUmiAT#AuXM)3?f>(TN%W(Bw4mHNN8<mklM(=z`(>H%fP_E#lXbCz`)2L z%6ObXj)8%Jhk+5KlR=(A0W7Y_paeB_Is-FUt)tc!29aY7f?8V`gh0$~49d$HxInyZ z44NQHYYT(eHU=FKa|?q3h^MuML1G(&2}HFO$Z}?|<#G({3=E8C7}y!lF$gi9XAot) z#2~|Xg+ZP1DuV;#HL!!kAeKTM#K7RlV9(&dz{udpz`(%5z$D5h;K-oJ-~@G~CIb^# zJ*SrT0S4!746Y!{AU<US`-~B6D9Fz&4DR4i@L=!+(_ReTU?Wu+d>H(}A;SpP!N9-( E0JX1W;s5{u literal 0 HcmV?d00001 diff --git a/class/application/Controller$7.class b/class/application/Controller$7.class new file mode 100644 index 0000000000000000000000000000000000000000..2eaef6fcc54693b6cfbb760248ece358e8144d99 GIT binary patch literal 2481 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 VU|?a8VJKvn0FHM?unq<W1^{0Qh%f*E literal 0 HcmV?d00001 diff --git a/class/application/Controller$8.class b/class/application/Controller$8.class new file mode 100644 index 0000000000000000000000000000000000000000..f0bab148e9474b147897c65235e50a0deb680447 GIT binary patch literal 2452 zcmX^0Z`VEs1_l#`K6VBsMh1z*f`XjP<iwK9{5*Z<{JfH){G6QBA{7gE1{OvJfvm)` zME#t^ymWp4q^#8B5_SeQMg~ccXj+ASYFTPtiM}g{^hnH0$w@6@WMC`F$ShVdU}TW+ z!EUlOBLiDmVvb5;CL;rvPfmV%X0pDcr!^x3CrC6ou_&dOkwMf4WQBfdNoJ0|V^L9J zrB7yY2}q|+W?p8A9V3I41}@_fMq)KXGmMde#W_DEm6L&yL6C=moq+?y66RsxWZ(j^ zM0psv8F;uDm>I-*7<d^Z7#Wx~K$`e{GV@aXN^_G^i$W5Ua#9%?gnaUo6LZ26i!woc zs2~f-|BMV$IGm?q0rEu#IJ6iUWHrEUga@T#GAJ6r0cx!o#>Jq(pv2Cg$jBguJt%n? zlo?bQ88{M?lT(X}RgCZjizdvb;^fr4RQ;U9%KXw2eaF1yjQpa2#Jp5%E(SFQ4R!`~ zMg}=h*r!$K<50=Npvj=c$iSVRTH>6MnUhkKn#ahXssXnk8I*v)9x2xMPby9=Dgy-% zI0CsDbQtv58FU#L6rpzDR?Neo&tSmFz>!&!T9jClU&P2D2DJl{EIgs&*4zw63?}Rh z#*7R?AVX1Qc^FI?%orJ1@=_~G7#T!hCLpC~Yjy?;Mg~EUR=A)2@>5c|7|a>0co?i1 zY#13>(^E@4Q_%GXmlS2@rCW0_*fBEjrW7TXJLYBPf-@2qg9C#TJA)%i27)N(VQ^+} zVPs%SEi6sU0i|?E5<t#l)|ycuKe_QRxPy`(TTyCmepxC=$diY`i@}?bfjuL!*bnR@ zW)00KP6h=AUmgZO27g8dZjd{i^GoweK$(%zlZzpcA()*Zh><}U<U>f{z;hH2LkL4C zBLj1KY6&BQsD>vb4pH2~&JfPXzy-;s&WS}STnv#6(d-OSj0_wQK}Sy>h8TueMg|VB z)rmzZj12r5&|C=80ZqyAJPZj8iHr=K#i=EZo-V1$*^CUlFm;ZeU{!$($vg}x45^F^ zEXA2sso<>V3CafPJPa8OnT!k~ppXC=>Q<DW3o;`l-_etiK?%tma5_ixr?qAnD3G#w z7;+eL85vm86LV7;8F-+MbWh9$CI5VeLUx7%xMxA4JPbt)#f%Jm#i=F18TsXzdFh^c zY59x{EE-Xe>{-ggPzH)4j*QHdRFE7OLq0<V4?`tLkOdSVj0~*cViHs&fMNh^UT0)r z&C5?oEoNj;20K5kLLYa=ux4Zs0jq*|5}pqj8N^Tvq{@O+XrW{QR*%<I8<-MEt_S4+ zYddR3256E1m&7ouaH-`DE=f$z_Dw8+S}P7o+i)+#3O06zRz?O1T%p0mz{t?f!ywBb z$H>4HoL^d$oa&YdDsTA_)sr4bGb00MaAta5Vo7OHDkFm@*aIkO7c7EmJG7pH`v4p_ z`pD%j$kY6;dC58X#hH2OzNsY{`6-MHJf3-ZsYT8?iN(dK#S97zj10^Sj0~&{%mM<S zDujVSKnPTUfN5?99tH*mW(EcZUIsn}Mh1Qc1_mbvCI%J;1_lu=?X3&~S~^=9gtT<G zGKgqxXAs-Sz`(%7Aj!bMz{SACzyQ+0)XN~nz`(%6zzEXAAk82H7MEp^1IaQlFlI3@ zgU#EZwS_@o2ZQ`J23233oebKH41UWQWOa8k7&0;(U@+gtU@2s~jlq5<1E=mz23JM~ z-JJ{`j105>KhWC3Af&a0K?J0K3xm%#hJXVMVcQrYKzxwgHikG5Gja=q4@<&U1|JY- z3z!nw#*nm#K@=naQV23+8$;T126d3g7KSY5Z47xJ<~D{B5XB7FoVAUi9OPFPuwUI6 z1Q{5ZCNXd`O=b{cn!+H;G>t)%X$FHn(-Z~^ra24&Omi8cndUKMFfCxHWLm_~!L*p6 zn`s%tG^XVYbD35!EM;2Bu%2l(IGnT~VF3*%28Im`RSeY(j11fiOBreyY8jXqgc#;A z=rhzYFf-IMFffQQFhS)S;Bt)&%nVHo3=9GcEPok9*%@@$8H^-<Gej#3I5NmGG(*Cj zL6d<A97mj5+6Nd~wlTDUJOqh6HgIGyf*k~kMizz+aKv^pbb;w^h8_k61{MYdhIEEr NaAY%rbuch6001qTdvgE) literal 0 HcmV?d00001 diff --git a/class/application/Controller.class b/class/application/Controller.class index 5dd6d2b17b27bddd18875d2c7a9482104c43abe2..02b838e5e9596bac1ddb95e100477043cbca5fd7 100644 GIT binary patch literal 20703 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 FNdOyY>#hI* literal 14429 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 diff --git a/class/application/Main.class b/class/application/Main.class index 1f8389d7ab360c6c97e78972a18cef74c369315b..08935e4292693a679681f849b984d2e497e64a36 100644 GIT binary patch delta 51 zcmX@gca(1f4-->Mz-B(CDi%?BhC~JhhExVch71NJhD-((hFk`<$#dD-S+y8g7_=vA HvdaJfF8vBy delta 51 zcmX@gca(1f4--?<fz5nORV<=%42cZ#45<tX3>gfH44Dkd47m)dljpLvvuZN1FlbHI HWS0Q|Kw}EQ diff --git a/class/application/MainGUI.fxml b/class/application/MainGUI.fxml index 3d499e5..e4034b7 100644 --- a/class/application/MainGUI.fxml +++ b/class/application/MainGUI.fxml @@ -1,25 +1,74 @@ <?xml version="1.0" encoding="UTF-8"?> +<?import javafx.geometry.Insets?> +<?import javafx.scene.control.Button?> <?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"> +<AnchorPane fx:id="mainPane" prefHeight="650.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.Controller"> <children> - <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" /> - <Label fx:id="labelCurrentPlayer" alignment="CENTER" contentDisplay="CENTER" layoutX="320.0" layoutY="377.0" prefHeight="31.0" prefWidth="162.0" textAlignment="CENTER"> + <ImageView fx:id="iconDeck" fitHeight="90.0" fitWidth="57.0" layoutX="447.0" layoutY="253.0" pickOnBounds="true" preserveRatio="true" /> + <ImageView fx:id="iconLastCard" fitHeight="90.0" fitWidth="57.0" layoutX="277.0" layoutY="253.0" pickOnBounds="true" preserveRatio="true" /> + <Label fx:id="labelCurrentPlayer" alignment="CENTER" contentDisplay="CENTER" layoutX="250.0" layoutY="420.0" prefHeight="31.0" prefWidth="286.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"> + <Circle fx:id="circleWishColor" fill="DODGERBLUE" layoutX="392.0" layoutY="298.0" radius="16.0" stroke="BLACK" strokeType="INSIDE" strokeWidth="0.0" /> + <Label fx:id="labelWishColor" layoutX="355.0" layoutY="253.0" text="Wunschfarbe"> <font> <Font name="System Bold" size="12.0" /> </font> </Label> + <ImageView fx:id="imageViewWishColor" fitHeight="40.0" fitWidth="40.0" layoutX="372.0" layoutY="278.0" pickOnBounds="true" preserveRatio="true" /> + <HBox fx:id="hboxInfo" alignment="CENTER" layoutX="207.0" layoutY="611.0" prefHeight="25.0" prefWidth="338.0"> + <children> + <Label fx:id="labelInfo" alignment="CENTER" contentDisplay="CENTER" prefHeight="30.0" prefWidth="255.0" text="Du kannst nicht kontern. Ziehe xx Karten." textAlignment="CENTER"> + <font> + <Font name="System Bold" size="13.0" /> + </font> + </Label> + <Button fx:id="buttonInfo" mnemonicParsing="false" text="OK"> + <HBox.margin> + <Insets left="15.0" /> + </HBox.margin> + </Button> + </children> + </HBox> + <Label fx:id="labelChallengeCounter" alignment="CENTER" contentDisplay="CENTER" layoutX="297.0" layoutY="352.0" prefHeight="17.0" prefWidth="190.0" text="Verlierer zieht 12 Karten" textAlignment="CENTER"> + <font> + <Font name="System Bold" size="14.0" /> + </font> + </Label> + <ImageView fx:id="imageViewDirection" fitHeight="30.0" fitWidth="30.0" layoutX="543.0" layoutY="282.0" pickOnBounds="true" preserveRatio="true" /> + <Label fx:id="labelDirection" layoutX="520.0" layoutY="252.0" text="Spielrichtung:"> + <font> + <Font name="System Bold" size="12.0" /> + </font> + </Label> + <Label fx:id="labelAI2Name" alignment="CENTER" contentDisplay="CENTER" layoutX="661.0" layoutY="95.0" prefHeight="19.0" prefWidth="106.0" text="Computer 2" textAlignment="CENTER"> + <font> + <Font name="System Bold" size="13.0" /> + </font> + </Label> + <Label fx:id="labelAI3Name" alignment="CENTER" contentDisplay="CENTER" layoutX="36.0" layoutY="95.0" prefHeight="19.0" prefWidth="106.0" text="Computer 3" textAlignment="CENTER"> + <font> + <Font name="System Bold" size="13.0" /> + </font> + </Label> + <Label fx:id="labelAI1Name" alignment="CENTER" contentDisplay="CENTER" layoutX="340.0" layoutY="16.0" prefHeight="19.0" prefWidth="106.0" text="Computer 1" textAlignment="CENTER"> + <font> + <Font name="System Bold" size="13.0" /> + </font> + </Label> + <Button fx:id="buttonStart" layoutX="360.0" layoutY="390.0" mnemonicParsing="false" text="START"> + <font> + <Font name="System Bold" size="14.0" /> + </font> + </Button> </children> </AnchorPane> diff --git a/class/application/Settings.fxml b/class/application/Settings.fxml new file mode 100644 index 0000000..e8b4a5e --- /dev/null +++ b/class/application/Settings.fxml @@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.geometry.Insets?> +<?import javafx.scene.control.Label?> +<?import javafx.scene.control.Slider?> +<?import javafx.scene.layout.AnchorPane?> +<?import javafx.scene.layout.HBox?> +<?import javafx.scene.layout.VBox?> +<?import javafx.scene.text.Font?> + + +<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.65"> + <children> + <VBox layoutX="45.0" layoutY="40.0" prefHeight="320.0" prefWidth="511.0"> + <children> + <HBox prefHeight="44.0" prefWidth="412.0"> + <children> + <Label alignment="TOP_RIGHT" contentDisplay="TOP" prefHeight="20.0" prefWidth="150.0" text="Gegner:" textAlignment="RIGHT"> + <font> + <Font name="System Bold" size="14.0" /> + </font> + </Label> + <Slider blockIncrement="1.0" majorTickUnit="1.0" max="3.0" min="1.0" minorTickCount="0" prefHeight="44.0" prefWidth="230.0" showTickLabels="true" showTickMarks="true" snapToTicks="true"> + <HBox.margin> + <Insets left="50.0" /> + </HBox.margin> + </Slider> + </children> + </HBox> + <HBox prefHeight="44.0" prefWidth="412.0"> + <children> + <Label alignment="TOP_RIGHT" contentDisplay="TOP" prefHeight="20.0" prefWidth="150.0" text="Startkarten:"> + <font> + <Font name="System Bold" size="14.0" /> + </font> + </Label> + <Slider blockIncrement="1.0" majorTickUnit="1.0" max="10.0" min="3.0" minorTickCount="0" prefHeight="44.0" prefWidth="233.0" showTickLabels="true" showTickMarks="true" snapToTicks="true"> + <HBox.margin> + <Insets left="50.0" /> + </HBox.margin> + </Slider> + </children> + <VBox.margin> + <Insets top="25.0" /> + </VBox.margin> + </HBox> + <HBox prefHeight="44.0" prefWidth="412.0"> + <children> + <Label alignment="TOP_RIGHT" contentDisplay="TOP" prefHeight="20.0" prefWidth="150.0" text="Gegner Schnelligkeit:"> + <font> + <Font name="System Bold" size="14.0" /> + </font> + <HBox.margin> + <Insets /> + </HBox.margin> + </Label> + <Slider blockIncrement="1.0" majorTickUnit="1.0" max="4.0" min="1.0" minorTickCount="0" prefHeight="44.0" prefWidth="233.0" showTickLabels="true" showTickMarks="true" snapToTicks="true"> + <HBox.margin> + <Insets left="50.0" /> + </HBox.margin> + </Slider> + </children> + <VBox.margin> + <Insets top="25.0" /> + </VBox.margin> + </HBox> + </children> + </VBox> + </children> +</AnchorPane> diff --git a/class/images/DIRECTION_LEFT.png b/class/images/DIRECTION_LEFT.png new file mode 100644 index 0000000000000000000000000000000000000000..706648400fff06bf709c5d7043d0ad5110883dea GIT binary patch literal 9096 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 literal 0 HcmV?d00001 diff --git a/class/images/DIRECTION_RIGHT.png b/class/images/DIRECTION_RIGHT.png new file mode 100644 index 0000000000000000000000000000000000000000..40ed3602ff3ff41be31c8decdd24ebdde5f3c1f5 GIT binary patch literal 8649 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%0Dk*BRQG(3y$ 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 literal 0 HcmV?d00001 diff --git a/class/images/circle-all.png b/class/images/circle-all.png new file mode 100644 index 0000000000000000000000000000000000000000..52aaf07c8cb4b4e6963f47c806155d9b3078b52e GIT binary patch literal 8410 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 KpUXO@geCxUYTxJp literal 0 HcmV?d00001 diff --git a/class/logic/AI.class b/class/logic/AI.class index 68664ed635474773ba6a443f1bf0ad73a92f5fe3..df353ee3ae663b8b959e6662320e38974158bf54 100644 GIT binary patch delta 2631 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 delta 2281 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 OP7{}72h|Hqj4S})`u{or diff --git a/class/logic/Deck.class b/class/logic/Deck.class index 99c39a2a9fc6e052f2d75d33bbdc907f736e4020..284a93fb80529382331825a609ac3c30afdc8008 100644 GIT binary patch literal 3057 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 ZQj~!q25cqBYYYsmP%9Z37Jy6Ig#bMUn-Bm1 literal 3661 zcmX^0Z`VEs1_l#`<LnGfj0{{k`RSR-`Yx%-+3XA~j0^%<iDilUIf;4c`u<5-smUdb z46MnCMJdIM41zvjxzdu%9R1*u#N=#iMh4E{%=Em(lG377Mh1Cwc^e;y;m(OgDb{w@ zj0|ixnR%Hdc8m<n8k%8@3@pz1DXClx%nZCd44e#H><s*j4E$(za53;P@NzORG6?Z7 zurjc5F^DjTu``G=GH^r9&d<p&;$aYHkYHqBD@)8NO)X|*5YW(!hS?30x8`IJVUXfs zkY<o!WMFmjadh@(WZ*?n!OkED4-AldIT;ifl-L;*85#JX79|#?gj5!!@-Qefs4z0H zM7aj}GcpLk41vm8b1}#=sDZqr&d8vsfi4T<gB|6m83yv5CJ%!agEk`rb7D#gBZH_0 zBovWiz*;j3<QiQb20f6?%>I6^Aie<)gCUq767CP;8}l%jfcUH-9zm{P6=pmP<{%Lk zH~-KekP=HC1}lhwXBb$84G)7YNPs!mGXkW*o`=B!#Agk54RiGai8%2vID<u8J>5M* zKq9U@3~nG17C%pjLp*pGJV65NL9Su0LBU{yy?GdXKw>Px-kt#<U4A?a{vZJkmmtUR zc&L*Dc^HB~f}CJMm@7kg7(zj!Ea9F$E{qKPKACx`ex<odsYM})Nja&E3_?En$%#2( ziA9+pK2(sUBqOt!k%0#q#GnLi&B(x$Tv}9=npffs3UNjT#!N;AMo&ftUU2&LO)LOw zW@m_JWZ*+hF^mlC#Tlh(X*sD}3`q<r><r0_45Em%>71XFlbT$TnV(n8!;rv`%E%xL zjW}@j@X0JLu?8h^j+COra!`6=WRQcU2A9;t6tMF&p>74qTZ589CJ#dvLpCD=OL1mZ zDma&Tf`oH<81fkM85x)h@(UOlL^L!plL!|BBSRq%LlHwUBLiDeYFcJa4%kVMw2QDY zjFEvO1!_Mc^}^*D88~4ME@ouV(C~!15Uv1fHQ1AmMMa5~V4pHFm=UQItw>;JsA6Og zMg%L|NG^s-240Y-YIzva7}7ypO-2UZJa97bPXmQmF(U&v$g!y@P@X6xSTNishMHU| z3sS+c&d8vQO#_+>xfog*+SwV};N<`;D0mn;7&;jlIMP!~p!SQyA_mO`Ajfy}F!V6= zGBR*vmZTOXmgE;PGKirl_k@aDb2IcaOk`)6z{ntk2p5<v55pu-LSV^DttbI0oWjE} zm0=nq1A9hdv0rLM2{_F}fx>MDC|PnbGH}B(Kw?n}B6omXYz;~v$ngoz6V{+&3quqw zP#76lauYN2Kz@jZgdw=N3N9(i%uBZh6>E&3LVF>@Vs?f_D0ND3WpPPrE)T;JhNX-Q z%=x7yj116d%gomgD9X$$2`(v0P0Y0h`C&OIjAwH(tYlct&aeuWP*4@}Fsxx%%gDf9 z0MeV2hob-u0~xX&q?QX5p}ZjOCJ=WsBLj;DxFBw2*a|9$w=pvC!!jy3lr+OYmB$Vq zhMl0wgE`361yscE=3&^wu$Pg6Ew!*TF{c<qQxwRC{U93-fNY2Yl?5z`Md`(i48mA~ zjFEvQB{eylk%2ug6<S<y1?QI*C8xS&f=WD2P<f#TN)HT*42%rS3=9m63{0R3k%5tc zoq>UYiGhQGoq-WljWRGYa5FG4J!N2HU}Iol{Gqj-fk$gM17GBJ27#>%f;$+5Bdu8W z*)iKLXH=DBkumbo-ozlelu=A;3xnWp2HD6>4D#B{+Zj~1F=&J{o3Sou_=b?tfy*Go z^s$H;VG%RMB4&X_%o>ZB9TqW1EMhKL#N4%6puR!4*$a!9uQn@GT?;FtC@bs2|6DCh zj54wd|J^}o4A{gVDZm9)M`hvQO$?G87)FyTx{-l_ftewUfq|inL6(7mft!JaftP`w zfuBK<L6AX%L72gYL6pIXL7X9sL4qNRL6V`4L5g7#gEYf31{sE346+R87~~ipF~~D~ zV^Cz|Vo+j~V^C%^Vi0AtX5eRZX3$`aV$ftPWYA*lV9;iq&!Ee=l|hg3G=o0lLk0uJ z?+k_v;S3B63ZS&g_=6#WA(DZCL6K34A&NnUfsw(U;SWPJLkt5eLo5RWgCzs&e+C%_ zR!|CNWMpTEV_^8tpvu6;&cMjdAOaR)WMKHs@aaDTD~c*621bSi22feS&A`B5#=ywH z$iTqB0g9L%42hs1U;+mL7XuRm1A{38JA)b6Sv(MRP-iiMsu)PNVaQ`(0;^R8nX!!_ zV;%z^gq3rEL3V?d_BMtBBtAThg&0^E7#OS=xWJ+6z#zro2)0NJVi?pS1_o7z5{6O+ zMzF7$85l(w7#YeK${CoTnYaR!bs3g3Ff*_+Ffb_ZW~hwZ&QR^gY{s&jK|ohaXB$J! zHio+J78XWP7U_lmKj>~?U|?VYdr=Im#hrnJ!GnR1!HYqH!Gl4O!58cb6R?~z+!e|U z^$aoKAW#Oo2UL1UGc+(XGB7i6Gl+p>hJ~Stfq?-OP#g>(xn>4tu&cQknEo>Gu`^UM zg5-)AilG5Fg@Fki20Gf?7+SV5boni35Yyes(8tJdfI-$56lOZ05=D0>!(>K=S^uAF zZDW`YiXccDg}6S5L6jkcL5?AaL7gF-L7O20?0Rq-V$gxRUI*-EMg~y^PKKEbvly7b z?h;{O`VUIv;55_9z|PRmz#zoH$k4$s8y>uKz`?5zO(v`$M}Yzml1A9T0TKhY667@o z23Dw*oD6dr=0Uv4$jrbF4$QpW42+T68Rq+JVpyQPjbYg~h7~BRZ4B#nGqgr-XV~D& zY`2`jdK1F}*=-CPwLwv6#iAq0vW;QOCWZwd8l+K@1yc0-ZerLDDSUTrW7yZi%qT06 zz3~50L_nD_@G>wkBr$L>Br^yxq%z1bq%kNlWH4wkWHIP7<S>{q<T2PX<TE%k6fk%* z6fvYQWHID2l!1K(Nd|cg2N@25atT8k!(oO<21W)g1{ZLUGBM~dID#XenZcGpo#6<> cECv>E;PNss{bSIF1TCXE10%yxaGi4u0GfU<Z2$lO diff --git a/class/logic/Game.class b/class/logic/Game.class index 8ae00fbb42cdc13ac97f064a4ffbb982b656d220..96d0da5970d79a85319aa8ca68ad9face9bcbbc4 100644 GIT binary patch literal 9067 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 literal 6755 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 Y4cS85F{}*ChH{(?jEtZb2@_)+0QbmKKL7v# diff --git a/class/logic/Player.class b/class/logic/Player.class index a991580beea6eb679688e8daee102f1c1ff3f109..64d765b10b80130190a1a0418170d1fa24fbc3e7 100644 GIT binary patch delta 2335 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 delta 2214 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 RRH2G<u`@6-oCL?;DFEe3-An)g diff --git a/src/application/ColorChooserController.java b/src/application/ColorChooserController.java index 3dd0f96..4bf9af6 100644 --- a/src/application/ColorChooserController.java +++ b/src/application/ColorChooserController.java @@ -5,6 +5,7 @@ import javafx.fxml.FXML; import javafx.scene.input.MouseEvent; import javafx.scene.shape.Rectangle; import javafx.stage.Stage; +import javafx.stage.WindowEvent; import logic.Color; public class ColorChooserController @@ -57,6 +58,13 @@ public class ColorChooserController } }); - //TODO prevent closing without choosing a color --> but cancel button + stage.setOnCloseRequest(new EventHandler<WindowEvent>() + { + @Override + public void handle(WindowEvent event) + { + event.consume(); + } + }); } } \ No newline at end of file diff --git a/src/application/Controller.java b/src/application/Controller.java index 1855243..510ebe8 100644 --- a/src/application/Controller.java +++ b/src/application/Controller.java @@ -20,12 +20,14 @@ import javafx.scene.Scene; import javafx.scene.SnapshotParameters; import javafx.scene.control.Alert; import javafx.scene.control.Alert.AlertType; +import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.image.Image; 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; @@ -34,7 +36,9 @@ import logic.AI; import logic.Card; import logic.CardType; import logic.Color; +import logic.Direction; import logic.Game; +import logic.Player; public class Controller { @@ -44,99 +48,233 @@ public class Controller @FXML private AnchorPane mainPane; @FXML private Label labelWishColor; @FXML private Circle circleWishColor; + @FXML private ImageView imageViewWishColor; + @FXML private HBox hboxInfo; + @FXML private Label labelInfo; + @FXML private Button buttonInfo; + @FXML private Label labelChallengeCounter; + @FXML private ImageView imageViewDirection; + @FXML private Label labelDirection; + @FXML private Label labelAI1Name; + @FXML private Label labelAI2Name; + @FXML private Label labelAI3Name; + @FXML private Button buttonStart; + public Game game; public Color chosenWishColor; + public int drawCounter; 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 final double CARD_WIDTH = 57.0; + private final double CARD_SPACING_LARGE = 14.0; + private final double CARD_SPACING_MEDIUM = - 3.0; + private final double CARD_SPACING_SMALL = - 25.0; + private final double CARD_SPACING_ULTRA_SMALL = - 35.0; + private Point2D PLAYER_STARTING_POINT; - private final Point2D AI_1_STARTING_POINT = new Point2D(100.0, 30.0); - + private final Point2D AI_1_STARTING_POINT = new Point2D(100.0, 50.0); + private Point2D AI_2_STARTING_POINT; + private Point2D AI_3_STARTING_POINT; + 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"); - - + private final javafx.scene.paint.Color COLOR_GREEN = javafx.scene.paint.Color.web("#55AA55"); + public void init() { - PLAYER_STARTING_POINT = new Point2D(100.0, stage.getScene().getHeight() - 30.0 - CARD_HEIGHT); - + imageViewWishColor.setImage(new Image("/images/circle-all.png")); + + PLAYER_STARTING_POINT = new Point2D(100.0, stage.getScene().getHeight() - 60.0 - CARD_HEIGHT); + AI_2_STARTING_POINT = new Point2D(stage.getScene().getWidth() - CARD_HEIGHT - 30, 50.0); + AI_3_STARTING_POINT = new Point2D(60.0, 50.0); + iconDeck.setImage(createEmptyBackCard()); iconDeck.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent event) { - if(game.isRunning() && game.getCurrentPlayer() == 1) + if(game.isRunning() && game.getCurrentPlayer() == 1 && !game.isShowingInfo()) { - game.getPlayer().drawCard(game.getDeck().drawCard(game.getDeadDeck())); - setPlayerDeck(game.getPlayer().getDeck()); - - // TODO move card toPlayerDeck moveCardToDeadDeck(imageView, - // card, newWishColor); - // --> in "onFinish" - game.draw(); + Card drawedCard = game.getDeck().drawCard(game.getDeadDeck()); + ArrayList<Card> allCards = new ArrayList<Card>(); + allCards.add(drawedCard); + moveCardFromDeckToPlayer(allCards); } } }); + + hideWishColor(); + hideInfo(); + hideLabelChallengeCounter(); + setImageViewDirection(Direction.RIGHT); + labelAI1Name.setVisible(false); + labelAI2Name.setVisible(false); + labelAI3Name.setVisible(false); + buttonStart.setVisible(false); - startGame(); } public void setStage(Stage stage) { - this.stage = stage; + this.stage = stage; } public void startGame() { - hideCircleWishColor(); + hideWishColor(); + hideInfo(); + hideLabelChallengeCounter(); - // DEBUG - game = new Game(this, 1); + drawCounter = 0; + + // DEBUG + game = new Game(this, 3); + setLabelNames(game.getPlayer(), game.getAIs()); game.newGame(5); + + buttonStart.setOnAction(new EventHandler<ActionEvent>() + { + @Override + public void handle(ActionEvent event) + { + buttonStart.setVisible(false); + game.start(); + } + }); + buttonStart.setVisible(true); } + public void setLabelNames(Player player, ArrayList<AI> ais) + { + labelAI2Name.setVisible(false); + labelAI3Name.setVisible(false); + + labelAI1Name.setText(ais.get(0).getName()); + labelAI1Name.setVisible(true); + + if(ais.size() >= 2) + { + labelAI2Name.setText(ais.get(1).getName()); + labelAI2Name.setVisible(true); + } + + if(ais.size() == 3) + { + labelAI3Name.setText(ais.get(2).getName()); + labelAI3Name.setVisible(true); + } + } + + public void showCircleWishColor(Color color) { + hideImageViewWishColor(); + 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; + case YELLOW: + circleWishColor.setFill(COLOR_YELLOW); + circleWishColor.setVisible(true); + break; + case RED: + circleWishColor.setFill(COLOR_RED); + circleWishColor.setVisible(true); + break; + case BLUE: + circleWishColor.setFill(COLOR_BLUE); + circleWishColor.setVisible(true); + break; + case GREEN: + circleWishColor.setFill(COLOR_GREEN); + circleWishColor.setVisible(true); + break; + case ALL: + showImageViewWishColor(); + break; + default: + break; } - + labelWishColor.setVisible(true); - circleWishColor.setVisible(true); } - + + public void showImageViewWishColor() + { + hideCircleWishColor(); + + imageViewWishColor.setVisible(true); + } + public void hideCircleWishColor() { labelWishColor.setVisible(false); - circleWishColor.setVisible(false); + circleWishColor.setVisible(false); + } + + public void hideImageViewWishColor() + { + imageViewWishColor.setVisible(false); + circleWishColor.setVisible(false); + } + + public void hideWishColor() + { + hideCircleWishColor(); + hideImageViewWishColor(); + } + + public void hideInfo() + { + hboxInfo.setVisible(false); + } + + public void showInfo(String text, int numberOfCards) + { + labelInfo.setText(text); + buttonInfo.setOnAction(new EventHandler<ActionEvent>() + { + @Override + public void handle(ActionEvent event) + { + moveCardFromDeckToPlayer(game.getDeck().drawCards(game.getChallengeCounter(), game.getDeadDeck())); + } + }); + + hboxInfo.setVisible(true); } + public void hideLabelChallengeCounter() + { + labelChallengeCounter.setVisible(false); + } + + public void showLabelChallengeCounter(String text) + { + labelChallengeCounter.setText(text); + labelChallengeCounter.setVisible(true); + } + + public void setImageViewDirection(Direction direction) + { + if(direction.equals(Direction.RIGHT)) + { + imageViewDirection.setImage(new Image("/images/DIRECTION_RIGHT.png")); + } + else + { + imageViewDirection.setImage(new Image("/images/DIRECTION_LEFT.png")); + } + } + public void setLabelCurrentPlayer(String text) { labelCurrentPlayer.setText(text); @@ -169,14 +307,16 @@ public class Controller if(!valid) { - WritableImage snapshot = imageView.snapshot(new SnapshotParameters(), null); - + SnapshotParameters parameters = new SnapshotParameters(); + parameters.setFill(javafx.scene.paint.Color.TRANSPARENT); + WritableImage snapshot = imageView.snapshot(parameters, null); + if(card.getType().equals(CardType.DRAW_FOUR) && card.getType().equals(CardType.WILD)) { 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().brighter(); snapshot.getPixelWriter().setColor(x, y, new javafx.scene.paint.Color(oldColor.getRed(), oldColor.getGreen(), oldColor.getBlue(), oldColor.getOpacity() * 1.0)); } @@ -188,14 +328,13 @@ public class Controller 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(); + { + javafx.scene.paint.Color oldColor = snapshot.getPixelReader().getColor(x, y).darker().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; @@ -240,7 +379,7 @@ public class Controller chosenWishColor = null; } - moveCardToDeadDeck(imageView, card, chosenWishColor); + moveCardToDeadDeck(imageView, card, chosenWishColor); } } } @@ -250,18 +389,18 @@ public class Controller } public void moveCardToDeadDeck(ImageView view, Card card, Color newWishColor) - { - Point2D deckPosition = iconLastCard.localToScene(Point2D.ZERO); - + { + Point2D deckPosition = iconLastCard.localToScene(Point2D.ZERO); + TranslateTransition translateTransition = new TranslateTransition(); translateTransition.setDuration(Duration.millis(500)); translateTransition.setNode(view); translateTransition.setCycleCount(1); - translateTransition.setAutoReverse(false); + translateTransition.setAutoReverse(false); translateTransition.setFromX(0); translateTransition.setFromY(0); - translateTransition.setToX(- (view.getX() - deckPosition.getX())); - translateTransition.setToY(- (view.getY() - deckPosition.getY())); + translateTransition.setToX( - (view.getX() - deckPosition.getX())); + translateTransition.setToY( - (view.getY() - deckPosition.getY())); translateTransition.setOnFinished(new EventHandler<ActionEvent>() { @Override @@ -273,10 +412,10 @@ public class Controller } else { - hideCircleWishColor(); + hideWishColor(); } setPlayerDeck(game.getPlayer().getDeck()); - game.playCard(game.getPlayer().playCard(card), newWishColor); + game.playCard(game.getPlayer().playCard(card), newWishColor); } }); @@ -286,33 +425,33 @@ public class Controller public void moveAICardToDeadDeck(AI ai, int currentPlayer, Card card, Color newWishColor) { ObservableList<Node> nodes = mainPane.getChildren(); - ArrayList<Integer> possibleNodes = new ArrayList<Integer>(); - for(int i = 0; i < nodes.size(); i++) + ArrayList<Integer> possibleNodes = new ArrayList<Integer>(); + for(int i = 0; i < nodes.size(); i++) { - Node current = nodes.get(i); + Node current = nodes.get(i); if(current.getId().contains("ai" + ai.getID())) - { - possibleNodes.add(i); + { + possibleNodes.add(i); } - } - + } + Random random = new Random(); - int viewNumber = random.nextInt(possibleNodes.size()); + int viewNumber = random.nextInt(possibleNodes.size()); - ImageView view = (ImageView)mainPane.getChildren().get(possibleNodes.get(viewNumber)); - view.setImage(new Image("images/" + card.getType() + "-" + card.getColor() + ".png")); + ImageView view = (ImageView)mainPane.getChildren().get(possibleNodes.get(viewNumber)); + view.setImage(new Image("images/" + card.getType() + "-" + card.getColor() + ".png")); + + Point2D deckPosition = iconLastCard.localToScene(Point2D.ZERO); - Point2D deckPosition = iconLastCard.localToScene(Point2D.ZERO); - TranslateTransition translateTransition = new TranslateTransition(); translateTransition.setDuration(Duration.millis(500)); translateTransition.setNode(view); translateTransition.setCycleCount(1); - translateTransition.setAutoReverse(false); + translateTransition.setAutoReverse(false); translateTransition.setFromX(0); translateTransition.setFromY(0); - translateTransition.setToX(- (view.getX() - deckPosition.getX())); - translateTransition.setToY(- (view.getY() - deckPosition.getY())); + translateTransition.setToX( - (view.getX() - deckPosition.getX())); + translateTransition.setToY( - (view.getY() - deckPosition.getY())); translateTransition.setOnFinished(new EventHandler<ActionEvent>() { @Override @@ -324,21 +463,234 @@ public class Controller } else { - hideCircleWishColor(); + hideWishColor(); } - setAIDeck(ai, ai.getDeck()); + setAIDeck(ai); game.playCard(ai.playCard(card), newWishColor); } }); - translateTransition.play(); + translateTransition.play(); } + public void moveCardFromDeckToPlayer(ArrayList<Card> cards) + { + Point2D deckPosition = iconDeck.localToScene(Point2D.ZERO); + + ImageView view = createCard(cards.get(drawCounter), true); + view.setId("drawAnimation"); + view.setX(deckPosition.getX()); + view.setY(deckPosition.getY()); + mainPane.getChildren().add(view); + + TranslateTransition translateTransition = new TranslateTransition(); + translateTransition.setDuration(Duration.millis(500)); + translateTransition.setNode(view); + translateTransition.setCycleCount(1); + translateTransition.setAutoReverse(false); + translateTransition.setFromX(0); + translateTransition.setFromY(0); + translateTransition.setToX( - (view.getX() - getPositionOfRightCard(null))); + translateTransition.setToY( - (view.getY() - PLAYER_STARTING_POINT.getY())); + translateTransition.setOnFinished(new EventHandler<ActionEvent>() + { + @Override + public void handle(ActionEvent event) + { + ObservableList<Node> nodes = mainPane.getChildren(); + Iterator<Node> iterator = nodes.iterator(); + while(iterator.hasNext()) + { + if(iterator.next().getId().equals("drawAnimation")) + { + iterator.remove(); + } + } + + game.getPlayer().drawCard(cards.get(drawCounter)); + setPlayerDeck(game.getPlayer().getDeck()); + drawCounter++; + + if(drawCounter < cards.size()) + { + moveCardFromDeckToPlayer(cards); + } + else + { + game.setShowingInfo(false); + hideInfo(); + drawCounter = 0; + game.draw(); + } + } + }); + + translateTransition.play(); + } + + private double getPositionOfRightCard(AI ai) + { + if(ai == null) + { + double maxWidth = stage.getScene().getWidth() - (PLAYER_STARTING_POINT.getX() * 2) - CARD_WIDTH; + int deckSize = game.getPlayer().getDeckSize(); + if((deckSize * (CARD_WIDTH + CARD_SPACING_LARGE)) > maxWidth) + { + if((deckSize * (CARD_WIDTH + CARD_SPACING_MEDIUM)) > maxWidth) + { + if((deckSize * (CARD_WIDTH + CARD_SPACING_SMALL)) > maxWidth) + { + return (PLAYER_STARTING_POINT.getX() + ((deckSize + 1) * (CARD_WIDTH + CARD_SPACING_ULTRA_SMALL))); + } + else + { + return (PLAYER_STARTING_POINT.getX() + ((deckSize + 1) * (CARD_WIDTH + CARD_SPACING_SMALL))); + } + } + else + { + return (PLAYER_STARTING_POINT.getX() + ((deckSize + 1) * (CARD_WIDTH + CARD_SPACING_MEDIUM))); + } + } + else + { + return (PLAYER_STARTING_POINT.getX() + ((deckSize + 1) * (CARD_WIDTH + CARD_SPACING_LARGE))); + } + } + //AI 1 (Above Player) + else + { + double maxWidth = stage.getScene().getWidth() - (AI_1_STARTING_POINT.getX() * 2) - CARD_WIDTH; + int deckSize = ai.getDeckSize(); + if((deckSize * (CARD_WIDTH + CARD_SPACING_LARGE)) > maxWidth) + { + if((deckSize * (CARD_WIDTH + CARD_SPACING_MEDIUM)) > maxWidth) + { + if((deckSize * (CARD_WIDTH + CARD_SPACING_SMALL)) > maxWidth) + { + return (AI_1_STARTING_POINT.getX() + ((deckSize + 1) * (CARD_WIDTH + CARD_SPACING_ULTRA_SMALL))); + } + else + { + return (AI_1_STARTING_POINT.getX() + ((deckSize + 1) * (CARD_WIDTH + CARD_SPACING_SMALL))); + } + } + else + { + return (AI_1_STARTING_POINT.getX() + ((deckSize + 1) * (CARD_WIDTH + CARD_SPACING_MEDIUM))); + } + } + else + { + return (AI_1_STARTING_POINT.getX() + ((deckSize + 1) * (CARD_WIDTH + CARD_SPACING_LARGE))); + } + } + } + + private double getPositionOfBottomCard(AI ai) + { + double maxHeight = stage.getScene().getHeight() - ((AI_2_STARTING_POINT.getY() + 50.0) * 2) - CARD_WIDTH; + int deckSize = ai.getDeckSize(); + + if((deckSize * (CARD_WIDTH + CARD_SPACING_LARGE)) > maxHeight) + { + if((deckSize * (CARD_WIDTH + CARD_SPACING_MEDIUM)) > maxHeight) + { + if((deckSize * (CARD_WIDTH + CARD_SPACING_SMALL)) > maxHeight) + { + return AI_2_STARTING_POINT.getY() + ((deckSize + 1) * (CARD_WIDTH + CARD_SPACING_ULTRA_SMALL)); + } + else + { + return AI_2_STARTING_POINT.getY() + ((deckSize + 1) * (CARD_WIDTH + CARD_SPACING_SMALL)); + } + } + else + { + return AI_2_STARTING_POINT.getY() + ((deckSize + 1) * (CARD_WIDTH + CARD_SPACING_MEDIUM)); + } + } + else + { + return AI_2_STARTING_POINT.getY() + ((deckSize + 1) * (CARD_WIDTH + CARD_SPACING_LARGE)); + } + } + + public void moveCardFromDeckToAI(AI ai, ArrayList<Card> cards) + { + Card card = game.getDeck().drawCard(game.getDeadDeck()); + + Point2D deckPosition = iconDeck.localToScene(Point2D.ZERO); + + ImageView view = createBackCard(); + view.setId("drawAnimation"); + view.setX(deckPosition.getX()); + view.setY(deckPosition.getY()); + mainPane.getChildren().add(view); + + TranslateTransition translateTransition = new TranslateTransition(); + translateTransition.setDuration(Duration.millis(500)); + translateTransition.setNode(view); + translateTransition.setCycleCount(1); + translateTransition.setAutoReverse(false); + translateTransition.setFromX(0); + translateTransition.setFromY(0); + + switch(ai.getID()) + { + case 1: translateTransition.setToX( - (view.getX() - getPositionOfRightCard(ai))); + translateTransition.setToY( - (view.getY() - AI_1_STARTING_POINT.getY())); + break; + case 2: translateTransition.setToX( - (view.getX() - AI_2_STARTING_POINT.getX())); + translateTransition.setToY( - (view.getY() - getPositionOfBottomCard(ai))); + break; + case 3: translateTransition.setToX( - (view.getX() - AI_3_STARTING_POINT.getX())); + translateTransition.setToY( - (view.getY() - getPositionOfBottomCard(ai))); + break; + default: break; + } + + translateTransition.setOnFinished(new EventHandler<ActionEvent>() + { + @Override + public void handle(ActionEvent event) + { + ObservableList<Node> nodes = mainPane.getChildren(); + Iterator<Node> iterator = nodes.iterator(); + while(iterator.hasNext()) + { + if(iterator.next().getId().equals("drawAnimation")) + { + iterator.remove(); + } + } + + ai.drawCard(cards.get(drawCounter)); + setAIDeck(ai); + drawCounter++; + + if(drawCounter < cards.size()) + { + moveCardFromDeckToAI(ai, cards); + } + else + { + game.setShowingInfo(false); + hideInfo(); + drawCounter = 0; + game.draw(); + } + } + }); + + translateTransition.play(); + } + public void clearPlayerDeck() { ObservableList<Node> nodes = mainPane.getChildren(); Iterator<Node> iterator = nodes.iterator(); - while(iterator.hasNext()) + while(iterator.hasNext()) { if(iterator.next().getId().equals("player")) { @@ -348,42 +700,44 @@ public class Controller } public void setPlayerDeck(ArrayList<Card> deck) - { + { clearPlayerDeck(); - + int counter = 1; - + for(Card currentCard : deck) { ImageView current = createCard(currentCard, true); - + current.setId("player"); mainPane.getChildren().add(current); - if((deck.size() * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_LARGE)) > (stage.getScene().getWidth() - PLAYER_STARTING_POINT.getX() * 2)) + + double maxWidth = stage.getScene().getWidth() - (PLAYER_STARTING_POINT.getX() * 2) - CARD_WIDTH; + if((deck.size() * (CARD_WIDTH + CARD_SPACING_LARGE)) > maxWidth) { - if((deck.size() * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_MEDIUM)) > (stage.getScene().getWidth() - PLAYER_STARTING_POINT.getX() * 2)) + if((deck.size() * (CARD_WIDTH + CARD_SPACING_MEDIUM)) > maxWidth) { - if((deck.size() * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_SMALL)) > (stage.getScene().getWidth() - PLAYER_STARTING_POINT.getX() * 2)) + if((deck.size() * (CARD_WIDTH + CARD_SPACING_SMALL)) > maxWidth) { - current.setX(PLAYER_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_ULTRA_SMALL))); + current.setX(PLAYER_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_ULTRA_SMALL))); } else { - current.setX(PLAYER_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_SMALL))); + current.setX(PLAYER_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_SMALL))); } } else { - current.setX(PLAYER_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_MEDIUM))); + current.setX(PLAYER_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_MEDIUM))); } } else { - current.setX(PLAYER_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_LARGE))); + current.setX(PLAYER_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_LARGE))); } - - current.setY(PLAYER_STARTING_POINT.getY()); - + + current.setY(PLAYER_STARTING_POINT.getY()); + counter++; } } @@ -391,62 +745,62 @@ public class Controller public void setValidPlayerDeck(ArrayList<Card> deck, ArrayList<Card> validDeck) { clearPlayerDeck(); - + int counter = 1; - + for(Card currentCard : deck) { ImageView current; - + if(validDeck.contains(currentCard)) { current = createCard(currentCard, true); + current.setY(PLAYER_STARTING_POINT.getY() - CARD_HEIGHT/4); } else { current = createCard(currentCard, false); + current.setY(PLAYER_STARTING_POINT.getY()); } - + current.setId("player"); mainPane.getChildren().add(current); - + 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_LARGE)) > maxWidth) { - if((deck.size() * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_MEDIUM)) > maxWidth) + if((deck.size() * (CARD_WIDTH + CARD_SPACING_MEDIUM)) > maxWidth) { - if((deck.size() * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_SMALL)) > maxWidth) + if((deck.size() * (CARD_WIDTH + CARD_SPACING_SMALL)) > maxWidth) { - current.setX(PLAYER_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_ULTRA_SMALL))); + current.setX(PLAYER_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_ULTRA_SMALL))); } else { - current.setX(PLAYER_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_SMALL))); + current.setX(PLAYER_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_SMALL))); } } else { - current.setX(PLAYER_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_MEDIUM))); + current.setX(PLAYER_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_MEDIUM))); } } else { - current.setX(PLAYER_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_LARGE))); + current.setX(PLAYER_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_LARGE))); } - current.setY(PLAYER_STARTING_POINT.getY()); - counter++; } } - + public void clearAIDeck(AI ai) { ObservableList<Node> nodes = mainPane.getChildren(); Iterator<Node> iterator = nodes.iterator(); - while(iterator.hasNext()) + while(iterator.hasNext()) { if(iterator.next().getId().contains("ai" + ai.getID())) { @@ -454,59 +808,135 @@ public class Controller } } } - - public void setAIDeck(AI ai, ArrayList<Card> deck) + + public void setAIDeck(AI ai) { clearAIDeck(ai); + ArrayList<Card> deck = ai.getDeck(); + int counter = 1; - + for(Card currentCard : deck) { ImageView current = createBackCard(); - + current.setId("ai" + ai.getID()); - //TODO other AIs (vertical) --> flip imageViews by 90 degrees mainPane.getChildren().add(current); - double maxWidth = stage.getScene().getWidth() - (AI_1_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(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 + double maxWidth; + double maxHeight; + int deckSize; + + switch(ai.getID()) { - current.setX(AI_1_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_HORIZONTAL_LARGE))); - } + case 1: maxWidth = stage.getScene().getWidth() - ((AI_1_STARTING_POINT.getX() + 25.0) * 2) - CARD_WIDTH; + deckSize = ai.getDeckSize(); + + if((deckSize * (CARD_WIDTH + CARD_SPACING_LARGE)) > maxWidth) + { + if((deckSize * (CARD_WIDTH + CARD_SPACING_MEDIUM)) > maxWidth) + { + if((deckSize * (CARD_WIDTH + CARD_SPACING_SMALL)) > maxWidth) + { + current.setX(AI_1_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_ULTRA_SMALL))); + } + else + { + current.setX(AI_1_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_SMALL))); + } + } + else + { + current.setX(AI_1_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_MEDIUM))); + } + } + else + { + current.setX(AI_1_STARTING_POINT.getX() + (counter * (CARD_WIDTH + CARD_SPACING_LARGE))); + } + + current.setY(AI_1_STARTING_POINT.getY()); + break; + + case 2: maxHeight = stage.getScene().getHeight() - ((AI_2_STARTING_POINT.getY() + 50.0) * 2) - CARD_WIDTH; + deckSize = ai.getDeckSize(); + + current.setRotate(90.0); + + if((deckSize * (CARD_WIDTH + CARD_SPACING_LARGE)) > maxHeight) + { + if((deckSize * (CARD_WIDTH + CARD_SPACING_MEDIUM)) > maxHeight) + { + if((deckSize * (CARD_WIDTH + CARD_SPACING_SMALL)) > maxHeight) + { + current.setY(AI_2_STARTING_POINT.getY() + (counter * (CARD_WIDTH + CARD_SPACING_ULTRA_SMALL))); + } + else + { + current.setY(AI_2_STARTING_POINT.getY() + (counter * (CARD_WIDTH + CARD_SPACING_SMALL))); + } + } + else + { + current.setY(AI_2_STARTING_POINT.getY() + (counter * (CARD_WIDTH + CARD_SPACING_MEDIUM))); + } + } + else + { + current.setY(AI_2_STARTING_POINT.getY() + (counter * (CARD_WIDTH + CARD_SPACING_LARGE))); + } + + current.setX(AI_2_STARTING_POINT.getX()); + break; + + case 3: maxHeight = stage.getScene().getHeight() - ((AI_3_STARTING_POINT.getY() + 50.0) * 2) - CARD_WIDTH; + deckSize = ai.getDeckSize(); + + current.setRotate(90.0); + + if((deckSize * (CARD_WIDTH + CARD_SPACING_LARGE)) > maxHeight) + { + if((deckSize * (CARD_WIDTH + CARD_SPACING_MEDIUM)) > maxHeight) + { + if((deckSize * (CARD_WIDTH + CARD_SPACING_SMALL)) > maxHeight) + { + current.setY(AI_3_STARTING_POINT.getY() + (counter * (CARD_WIDTH + CARD_SPACING_ULTRA_SMALL))); + } + else + { + current.setY(AI_3_STARTING_POINT.getY() + (counter * (CARD_WIDTH + CARD_SPACING_SMALL))); + } + } + else + { + current.setY(AI_3_STARTING_POINT.getY() + (counter * (CARD_WIDTH + CARD_SPACING_MEDIUM))); + } + } + else + { + current.setY(AI_3_STARTING_POINT.getY() + (counter * (CARD_WIDTH + CARD_SPACING_LARGE))); + } + + current.setX(AI_3_STARTING_POINT.getX()); + break; + default: break; + } - counter++; - } + counter++; + } } - + public void clearAllDecks(ArrayList<AI> ais) { clearPlayerDeck(); - + for(AI currentAI : ais) { clearAIDeck(currentAI); - } - } + } + } public void about() { diff --git a/src/application/Main.java b/src/application/Main.java index 3729b32..0199cb4 100644 --- a/src/application/Main.java +++ b/src/application/Main.java @@ -17,7 +17,7 @@ public class Main extends Application FXMLLoader loader = new FXMLLoader(getClass().getResource("MainGUI.fxml")); Parent root = (Parent)loader.load(); - Scene scene = new Scene(root, 800, 600); + Scene scene = new Scene(root, 800, 650); stage.setResizable(true); stage.setTitle("UNO"); @@ -27,6 +27,7 @@ public class Main extends Application controller.setStage(stage); controller.init(); + //TODO set minWidth and Height stage.getIcons().add(new Image("images/icon.png")); stage.show(); } diff --git a/src/application/MainGUI.fxml b/src/application/MainGUI.fxml index 3d499e5..e4034b7 100644 --- a/src/application/MainGUI.fxml +++ b/src/application/MainGUI.fxml @@ -1,25 +1,74 @@ <?xml version="1.0" encoding="UTF-8"?> +<?import javafx.geometry.Insets?> +<?import javafx.scene.control.Button?> <?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"> +<AnchorPane fx:id="mainPane" prefHeight="650.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.Controller"> <children> - <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" /> - <Label fx:id="labelCurrentPlayer" alignment="CENTER" contentDisplay="CENTER" layoutX="320.0" layoutY="377.0" prefHeight="31.0" prefWidth="162.0" textAlignment="CENTER"> + <ImageView fx:id="iconDeck" fitHeight="90.0" fitWidth="57.0" layoutX="447.0" layoutY="253.0" pickOnBounds="true" preserveRatio="true" /> + <ImageView fx:id="iconLastCard" fitHeight="90.0" fitWidth="57.0" layoutX="277.0" layoutY="253.0" pickOnBounds="true" preserveRatio="true" /> + <Label fx:id="labelCurrentPlayer" alignment="CENTER" contentDisplay="CENTER" layoutX="250.0" layoutY="420.0" prefHeight="31.0" prefWidth="286.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"> + <Circle fx:id="circleWishColor" fill="DODGERBLUE" layoutX="392.0" layoutY="298.0" radius="16.0" stroke="BLACK" strokeType="INSIDE" strokeWidth="0.0" /> + <Label fx:id="labelWishColor" layoutX="355.0" layoutY="253.0" text="Wunschfarbe"> <font> <Font name="System Bold" size="12.0" /> </font> </Label> + <ImageView fx:id="imageViewWishColor" fitHeight="40.0" fitWidth="40.0" layoutX="372.0" layoutY="278.0" pickOnBounds="true" preserveRatio="true" /> + <HBox fx:id="hboxInfo" alignment="CENTER" layoutX="207.0" layoutY="611.0" prefHeight="25.0" prefWidth="338.0"> + <children> + <Label fx:id="labelInfo" alignment="CENTER" contentDisplay="CENTER" prefHeight="30.0" prefWidth="255.0" text="Du kannst nicht kontern. Ziehe xx Karten." textAlignment="CENTER"> + <font> + <Font name="System Bold" size="13.0" /> + </font> + </Label> + <Button fx:id="buttonInfo" mnemonicParsing="false" text="OK"> + <HBox.margin> + <Insets left="15.0" /> + </HBox.margin> + </Button> + </children> + </HBox> + <Label fx:id="labelChallengeCounter" alignment="CENTER" contentDisplay="CENTER" layoutX="297.0" layoutY="352.0" prefHeight="17.0" prefWidth="190.0" text="Verlierer zieht 12 Karten" textAlignment="CENTER"> + <font> + <Font name="System Bold" size="14.0" /> + </font> + </Label> + <ImageView fx:id="imageViewDirection" fitHeight="30.0" fitWidth="30.0" layoutX="543.0" layoutY="282.0" pickOnBounds="true" preserveRatio="true" /> + <Label fx:id="labelDirection" layoutX="520.0" layoutY="252.0" text="Spielrichtung:"> + <font> + <Font name="System Bold" size="12.0" /> + </font> + </Label> + <Label fx:id="labelAI2Name" alignment="CENTER" contentDisplay="CENTER" layoutX="661.0" layoutY="95.0" prefHeight="19.0" prefWidth="106.0" text="Computer 2" textAlignment="CENTER"> + <font> + <Font name="System Bold" size="13.0" /> + </font> + </Label> + <Label fx:id="labelAI3Name" alignment="CENTER" contentDisplay="CENTER" layoutX="36.0" layoutY="95.0" prefHeight="19.0" prefWidth="106.0" text="Computer 3" textAlignment="CENTER"> + <font> + <Font name="System Bold" size="13.0" /> + </font> + </Label> + <Label fx:id="labelAI1Name" alignment="CENTER" contentDisplay="CENTER" layoutX="340.0" layoutY="16.0" prefHeight="19.0" prefWidth="106.0" text="Computer 1" textAlignment="CENTER"> + <font> + <Font name="System Bold" size="13.0" /> + </font> + </Label> + <Button fx:id="buttonStart" layoutX="360.0" layoutY="390.0" mnemonicParsing="false" text="START"> + <font> + <Font name="System Bold" size="14.0" /> + </font> + </Button> </children> </AnchorPane> diff --git a/src/application/Settings.fxml b/src/application/Settings.fxml new file mode 100644 index 0000000..e8b4a5e --- /dev/null +++ b/src/application/Settings.fxml @@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.geometry.Insets?> +<?import javafx.scene.control.Label?> +<?import javafx.scene.control.Slider?> +<?import javafx.scene.layout.AnchorPane?> +<?import javafx.scene.layout.HBox?> +<?import javafx.scene.layout.VBox?> +<?import javafx.scene.text.Font?> + + +<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.65"> + <children> + <VBox layoutX="45.0" layoutY="40.0" prefHeight="320.0" prefWidth="511.0"> + <children> + <HBox prefHeight="44.0" prefWidth="412.0"> + <children> + <Label alignment="TOP_RIGHT" contentDisplay="TOP" prefHeight="20.0" prefWidth="150.0" text="Gegner:" textAlignment="RIGHT"> + <font> + <Font name="System Bold" size="14.0" /> + </font> + </Label> + <Slider blockIncrement="1.0" majorTickUnit="1.0" max="3.0" min="1.0" minorTickCount="0" prefHeight="44.0" prefWidth="230.0" showTickLabels="true" showTickMarks="true" snapToTicks="true"> + <HBox.margin> + <Insets left="50.0" /> + </HBox.margin> + </Slider> + </children> + </HBox> + <HBox prefHeight="44.0" prefWidth="412.0"> + <children> + <Label alignment="TOP_RIGHT" contentDisplay="TOP" prefHeight="20.0" prefWidth="150.0" text="Startkarten:"> + <font> + <Font name="System Bold" size="14.0" /> + </font> + </Label> + <Slider blockIncrement="1.0" majorTickUnit="1.0" max="10.0" min="3.0" minorTickCount="0" prefHeight="44.0" prefWidth="233.0" showTickLabels="true" showTickMarks="true" snapToTicks="true"> + <HBox.margin> + <Insets left="50.0" /> + </HBox.margin> + </Slider> + </children> + <VBox.margin> + <Insets top="25.0" /> + </VBox.margin> + </HBox> + <HBox prefHeight="44.0" prefWidth="412.0"> + <children> + <Label alignment="TOP_RIGHT" contentDisplay="TOP" prefHeight="20.0" prefWidth="150.0" text="Gegner Schnelligkeit:"> + <font> + <Font name="System Bold" size="14.0" /> + </font> + <HBox.margin> + <Insets /> + </HBox.margin> + </Label> + <Slider blockIncrement="1.0" majorTickUnit="1.0" max="4.0" min="1.0" minorTickCount="0" prefHeight="44.0" prefWidth="233.0" showTickLabels="true" showTickMarks="true" snapToTicks="true"> + <HBox.margin> + <Insets left="50.0" /> + </HBox.margin> + </Slider> + </children> + <VBox.margin> + <Insets top="25.0" /> + </VBox.margin> + </HBox> + </children> + </VBox> + </children> +</AnchorPane> diff --git a/src/images/DIRECTION_LEFT.png b/src/images/DIRECTION_LEFT.png new file mode 100644 index 0000000000000000000000000000000000000000..706648400fff06bf709c5d7043d0ad5110883dea GIT binary patch literal 9096 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 literal 0 HcmV?d00001 diff --git a/src/images/DIRECTION_RIGHT.png b/src/images/DIRECTION_RIGHT.png new file mode 100644 index 0000000000000000000000000000000000000000..40ed3602ff3ff41be31c8decdd24ebdde5f3c1f5 GIT binary patch literal 8649 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%0Dk*BRQG(3y$ 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 literal 0 HcmV?d00001 diff --git a/src/images/circle-all.png b/src/images/circle-all.png new file mode 100644 index 0000000000000000000000000000000000000000..52aaf07c8cb4b4e6963f47c806155d9b3078b52e GIT binary patch literal 8410 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 KpUXO@geCxUYTxJp literal 0 HcmV?d00001 diff --git a/src/logic/AI.java b/src/logic/AI.java index b18d333..30414e2 100644 --- a/src/logic/AI.java +++ b/src/logic/AI.java @@ -43,13 +43,13 @@ public class AI public void drawCard(Card card) { deck.add(card); - game.getController().setAIDeck(this, deck); + game.getController().setAIDeck(this); } public void drawCards(ArrayList<Card> cards) { deck.addAll(cards); - game.getController().setAIDeck(this, deck); + game.getController().setAIDeck(this); } public Card playCard(Card card) @@ -59,19 +59,25 @@ public class AI } public ArrayList<Card> getValidCards(Card lastCard, Color wishColor, boolean challenge) - { - ArrayList<Card> validCards = new ArrayList<Card>(); - + { + ArrayList<Card> validCards = new ArrayList<Card>(); if(challenge) { for(Card currentCard : deck) - { + { if(wishColor == null) { if(currentCard.getType().equals(CardType.DRAW_TWO) || currentCard.getType().equals(CardType.DRAW_FOUR)) { validCards.add(currentCard); } + } + else if(wishColor.equals(Color.ALL)) + { + if(currentCard.getType().equals(CardType.DRAW_TWO) || currentCard.getType().equals(CardType.DRAW_FOUR)) + { + validCards.add(currentCard); + } } else { @@ -85,14 +91,23 @@ public class AI else { if(wishColor == null) + { + for(Card currentCard : deck) + { + if(currentCard.getColor().equals(lastCard.getColor()) || currentCard.getType().equals(lastCard.getType()) || currentCard.getType().equals(CardType.WILD) || currentCard.getType().equals(CardType.DRAW_FOUR)) + { + validCards.add(currentCard); + } + } + } + else if(wishColor.equals(Color.ALL)) { for(Card currentCard : deck) - { - if(currentCard.getColor().equals(lastCard.getColor()) || currentCard.getType().equals(lastCard.getType()) || currentCard.getType().equals(CardType.WILD) - || currentCard.getType().equals(CardType.DRAW_FOUR)) + { + if(!currentCard.getType().equals(CardType.WILD) && !currentCard.getType().equals(CardType.DRAW_FOUR)) { validCards.add(currentCard); - } + } } } else @@ -102,11 +117,11 @@ public class AI if(currentCard.getColor().equals(wishColor)) { validCards.add(currentCard); - } + } } - } - } - + } + } + return validCards; } @@ -134,17 +149,18 @@ public class AI { if(challenge) { - drawCards(game.getDeck().drawCards(game.getChallengeCounter(), game.getDeadDeck())); System.out.println("draw " + game.getChallengeCounter() + " cards"); - System.out.println("deack after draw: " + deck); - game.draw(); + ArrayList<Card> drawedCards = game.getDeck().drawCards(game.getChallengeCounter(), game.getDeadDeck()); + game.getController().moveCardFromDeckToAI(this, drawedCards); + System.out.println("deack after draw: " + deck); } else { - drawCard(game.getDeck().drawCard(game.getDeadDeck())); System.out.println("draw one card"); - System.out.println("deack after draw: " + deck); - game.draw(); + ArrayList<Card> drawedCards = new ArrayList<Card>(); + drawedCards.add(game.getDeck().drawCard(game.getDeadDeck())); + game.getController().moveCardFromDeckToAI(this, drawedCards); + System.out.println("deack after draw: " + deck); } } else @@ -174,7 +190,7 @@ public class AI } } - game.getController().moveAICardToDeadDeck(this,game.getCurrentPlayer(), playedCard, newWishColor); + game.getController().moveAICardToDeadDeck(this, game.getCurrentPlayer(), playedCard, newWishColor); } } diff --git a/src/logic/Deck.java b/src/logic/Deck.java index df00708..766c0a3 100644 --- a/src/logic/Deck.java +++ b/src/logic/Deck.java @@ -14,7 +14,7 @@ public class Deck for(Color currentColor : Color.values()) { - if(currentColor != Color.BLACK) + if(currentColor != Color.BLACK && currentColor != Color.ALL) { cards.add(new Card(CardType.ZERO, currentColor, 0)); @@ -92,28 +92,5 @@ public class Deck return cards; } - //TODO --> refill should let newest card of deadDeck in deadDeck - public static void main(String[] args) - { - Deck deck = new Deck(); - System.out.println(deck.getCards()); - // deck.shuffle(); - System.out.println(deck.getCards()); - System.out.println(); - - DeadDeck deadDeck = new DeadDeck(); - - for(int i = 0; i < 107; i++) - { - System.out.println(i); - - Card newCard = deck.drawCard(deadDeck); - deadDeck.add(newCard); - System.out.println(newCard); - - System.out.println(newCard.equals(new Card(CardType.DRAW_TWO, Color.RED, 0))); - } - - - } + //TODO --> refill should let newest card of deadDeck in deadDeck } \ No newline at end of file diff --git a/src/logic/Game.java b/src/logic/Game.java index 00969b3..dca0ec9 100644 --- a/src/logic/Game.java +++ b/src/logic/Game.java @@ -3,6 +3,9 @@ package logic; import java.util.ArrayList; import java.util.Random; +import javafx.scene.control.Alert; +import javafx.scene.control.Alert.AlertType; +import javafx.stage.Stage; import application.Controller; public class Game @@ -23,6 +26,7 @@ public class Game private boolean skipped; private int counter; private boolean running; + private boolean showingInfo; public Game(Controller controller, int numberOfAIs) { @@ -31,10 +35,22 @@ public class Game deadDeck = new DeadDeck(); player = new Player("Spieler", this); ais = new ArrayList<AI>(); - for(int i = 1; i <= numberOfAIs; i++) + + if(numberOfAIs == 1) + { + ais.add(new AI("Computer 1", 1, this)); + } + else if(numberOfAIs == 2) { - ais.add(new AI("AI " + i, i-1, this)); + ais.add(new AI("Computer 1", 1, this)); + ais.add(new AI("Computer 2", 2, this)); } + else if(numberOfAIs == 3) + { + ais.add(new AI("Computer 3", 3, this)); + ais.add(new AI("Computer 1", 1, this)); + ais.add(new AI("Computer 2", 2, this)); + } gameCount = 0; challengeCounter = 0; @@ -42,7 +58,7 @@ public class Game public void newGame(int numberOfStartingCards) { - deck = new Deck(); + deck = new Deck(); deck.shuffle(); deadDeck = new DeadDeck(); gameCount++; @@ -51,8 +67,10 @@ public class Game wishColor = null; challenge = false; direction = Direction.RIGHT; + controller.setImageViewDirection(Direction.RIGHT); lastPlayerDraw = false; skipped = false; + showingInfo = false; player.initialize(); @@ -65,16 +83,28 @@ public class Game } deadDeck.add(deck.drawCard(deadDeck)); - lastCard = deadDeck.getCards().get(deadDeck.getCards().size()-1); + lastCard = deadDeck.getCards().get(deadDeck.getCards().size()-1); + controller.setLastCard(lastCard); - if(lastCard.getType().equals(CardType.DRAW_FOUR) || lastCard.getType().equals(CardType.WILD)) + if(lastCard.getType().equals(CardType.WILD)) { wishColor = Color.ALL; controller.chosenWishColor = wishColor; controller.showCircleWishColor(wishColor); } - - start(); + else if(lastCard.getType().equals(CardType.DRAW_FOUR)) + { + wishColor = Color.ALL; + controller.chosenWishColor = wishColor; + controller.showCircleWishColor(wishColor); + challenge = true; + challengeCounter = 4; + } + else if(lastCard.getType().equals(CardType.DRAW_TWO)) + { + challenge = true; + challengeCounter = 2; + } } public int getGameCount() @@ -123,15 +153,15 @@ public class Game if(direction.equals(Direction.RIGHT)) { direction = Direction.LEFT; + controller.setImageViewDirection(Direction.LEFT); + } else { direction = Direction.RIGHT; - } - //TODO show icon direction in UI - } - - //TODO mark currentPlayer in UI + controller.setImageViewDirection(Direction.RIGHT); + } + } if(currentPlayer == 1) { @@ -148,7 +178,17 @@ public class Game controller.setLabelCurrentPlayer(currentAI.getName() + " ist am Zug"); - controller.setAIDeck(currentAI, currentAI.getDeck()); + controller.setAIDeck(currentAI); + + try + { + Thread.sleep(500); + } + catch(InterruptedException e) + { + //ERRORHANDLING + e.printStackTrace(); + } currentAI.turn(lastCard, wishColor, challenge); } @@ -194,9 +234,7 @@ public class Game } private void end(String name) - { - //TODO alert - + { controller.clearAllDecks(ais); System.err.println("Player " + name + " wins!"); @@ -206,11 +244,31 @@ public class Game if(currentPlayer == 1) { controller.setLabelCurrentPlayer(player.getName() + " gewinnt!"); + + Alert alert = new Alert(AlertType.INFORMATION); + alert.setTitle("Sieg!"); + alert.setHeaderText(""); + alert.setContentText("Du gewinnst"); + alert.initOwner(controller.stage); + Stage dialogStage = (Stage)alert.getDialogPane().getScene().getWindow(); + dialogStage.getIcons().add(controller.icon); + alert.show(); } else { controller.setLabelCurrentPlayer(ais.get(currentPlayer - 2).getName() + " gewinnt!"); - } + + Alert alert = new Alert(AlertType.INFORMATION); + alert.setTitle("Niederlage!"); + alert.setHeaderText(""); + alert.setContentText(ais.get(currentPlayer - 2).getName() + " hat gewonnen."); + alert.initOwner(controller.stage); + Stage dialogStage = (Stage)alert.getDialogPane().getScene().getWindow(); + dialogStage.getIcons().add(controller.icon); + alert.show(); + } + + } public Deck getDeck() @@ -233,6 +291,11 @@ public class Game return player; } + public ArrayList<AI> getAIs() + { + return ais; + } + public boolean isRunning() { return running; @@ -248,11 +311,22 @@ public class Game return controller; } + public boolean isShowingInfo() + { + return showingInfo; + } + + public void setShowingInfo(boolean showingInfo) + { + this.showingInfo = showingInfo; + } + public void draw() { challenge = false; challengeCounter = 0; lastPlayerDraw = true; + controller.hideLabelChallengeCounter(); run(); } @@ -267,16 +341,19 @@ public class Game { challenge = true; challengeCounter += 2; + controller.showLabelChallengeCounter("Verlierer zieht " + challengeCounter + " Karten"); } else if(card.getType().equals(CardType.DRAW_FOUR)) { challenge = true; - challengeCounter += 4; + challengeCounter += 4; + controller.showLabelChallengeCounter("Verlierer zieht " + challengeCounter + " Karten"); } else { challenge = false; challengeCounter = 0; + controller.hideLabelChallengeCounter(); } lastPlayerDraw = false; diff --git a/src/logic/Player.java b/src/logic/Player.java index 3ce4543..df490f3 100644 --- a/src/logic/Player.java +++ b/src/logic/Player.java @@ -42,6 +42,7 @@ public class Player { deck.addAll(cards); game.getController().setPlayerDeck(deck); + game.getController().hideInfo(); } public Card playCard(Card card) @@ -52,8 +53,7 @@ public class Player public ArrayList<Card> getValidCards(Card lastCard, Color wishColor, boolean challenge) { - ArrayList<Card> validCards = new ArrayList<Card>(); - + ArrayList<Card> validCards = new ArrayList<Card>(); if(challenge) { for(Card currentCard : deck) @@ -64,6 +64,13 @@ public class Player { validCards.add(currentCard); } + } + else if(wishColor.equals(Color.ALL)) + { + if(currentCard.getType().equals(CardType.DRAW_TWO) || currentCard.getType().equals(CardType.DRAW_FOUR)) + { + validCards.add(currentCard); + } } else { @@ -86,6 +93,16 @@ public class Player } } } + else if(wishColor.equals(Color.ALL)) + { + for(Card currentCard : deck) + { + if(!currentCard.getType().equals(CardType.WILD) && !currentCard.getType().equals(CardType.DRAW_FOUR)) + { + validCards.add(currentCard); + } + } + } else { for(Card currentCard : deck) @@ -124,11 +141,9 @@ public class Player if(validDeck.size() == 0) { if(challenge) - { - //TODO notification - drawCards(game.getDeck().drawCards(game.getChallengeCounter(), game.getDeadDeck())); - System.out.println("You can't challenge --> please draw " + game.getChallengeCounter() + " cards"); - game.draw(); + { + game.setShowingInfo(true); + game.getController().showInfo("Du kannst nicht kontern. Ziehe " + game.getChallengeCounter() + " Karten.", game.getChallengeCounter()); } else { @@ -137,8 +152,7 @@ public class Player } else { - System.out.println("choose"); - //playerInput (draw or turnCard) + System.out.println("choose"); } } } \ No newline at end of file -- GitLab