From 7920ff64626dab77e7bae03270918ad3a0959a3f Mon Sep 17 00:00:00 2001 From: deadlocker8 <goldi.96@gmx.de> Date: Mon, 11 Apr 2016 00:43:11 +0200 Subject: [PATCH] -UI -gameplay -oncClickListener detects UserInput --- class/application/Controller$1.class | Bin 0 -> 1595 bytes class/application/Controller.class | Bin 5112 -> 5977 bytes class/application/MainGUI.fxml | 10 +- class/logic/AI.class | Bin 5174 -> 5350 bytes class/logic/Game.class | Bin 4941 -> 6186 bytes class/logic/Player.class | Bin 4662 -> 4351 bytes src/application/Controller.java | 100 +++++++++++---- src/application/MainGUI.fxml | 10 +- src/logic/AI.java | 9 +- src/logic/Game.java | 174 +++++++++++++++++++-------- src/logic/Player.java | 21 +--- 11 files changed, 232 insertions(+), 92 deletions(-) create mode 100644 class/application/Controller$1.class diff --git a/class/application/Controller$1.class b/class/application/Controller$1.class new file mode 100644 index 0000000000000000000000000000000000000000..51b66919e71c48372e4c9fa9a1ea11909dccc0b2 GIT binary patch literal 1595 zcmX^0Z`VEs1_l#`7<L9GMh1z*f`XjP<iwK9{5*Z<{JfH){G6QBA{9e+1{OvJfvm)` zME#t^ymWp4q^#8B5_SeQMg~ccXj+ASYFTPtiM}g{^hnH0$w@6@WMC`F$ShVdU}TW+ z!EUlOBLinyVvb5#VoqiXBLia;BLfGBpPX2f!pOkmlarsGnXK=eSd?PT$iQZknU`5& z$H<_efy=lkWF4Aej0`N!`6;QK42%qdJPhm%93Yl34+AFy7l<Xw!@$kJ!^ObNAkM?U z%OJtXz^nn%#P5@tm+DuVo0M7<l9-f}%E%z(lb@WJ6P8$%3F1QqSwOyHWRSw)7!^a1 zn=`;+!N{Pb;R6k*;^fr4RQ=4ng3=Ow-~7_zRB)JCYld+#C@?6oGbl1La3TE7!=TKd z!pOj$o>~%8Spag1h9;6HL1NaN3~CG-><sFR415TUAQ>J8O$IGS29|J79~VXj0d##_ z3~CHIJPf)FdW;NgsfDG9ImL_&q7a87$FsF&6vzq#9tJ~@ahxtej^Xic{-Hsf48{zm z><lK13}V>hmxsZO!JLtSB|R}W6%n8AiMgrPTnv^B*6a*caNmMNc^GUMY#A9i(^E?V zauO>+X-EL>Ux<h`7lS>6BRhiwBLfe_w-9k21}6q*Mh1?8oWx2{f?;Hk(m?XCHFBtd zEq4X!aARbUK~V<NlAn`bWDQCTtl)&r$RJN3{umi}@>0vgGmA5vL3$Y(cu|aEWZ(@h zNlec6O)LN>A9e;`Mh0$(2cR0nAt8^Nm#j6z*ck#C8D#OM9xet(h9DjWSq3>q2Cm@z z(xT*4w@gsN<wxXVJ&*~E44lE4>3NAIrA4WX41Qogp+q%U1l0-9>}&&*!jXXOtQi^j zUGtK2@{2R`(tT4)GV)V+7$O;>7#X;di&7IyQX$czixS>ZnrO!6CZ?zAdxFTY%+zvg zMg|_wyu8#R=bXgi;?!aW1qMb2W(GzERt9DP0Z^7^U=R=jWoR(X&A`LJz`)GFz`)DE z$H2(I&%nUo#K6SB!oa{FqNTl+K|o7pD}#`h?p6j7t?dkA8yOfFm>47(7#O%1m>3wq zI{X==7#J9M7#Kl%7^E3wz~ZtDa$s2ohQ$obU>jVtwlE0IWUy!S)!M=!vW-E06NBnD z2JKl4f^fe6HU{l*tt|`!TNsR>)HVhSh_s!~HU<}v{mfwd#TZx_7#Knr*crkYI2j@s z)EQzKoEhT5Zc%{P2XzYrgA0Q@g9ig611EzOgC~O*0~3Qc0|Ns$1JfS{b#?}yUkuU$ zjtsI4eozN%GBANX$El@#fWdzoLm<djh_BhezGMX30`fl#Lohf*LKs59bQnW80|NsK SgE2z{Lo_&)7{NLi7#IL?h<~X7 literal 0 HcmV?d00001 diff --git a/class/application/Controller.class b/class/application/Controller.class index 9e09295f37fd6a40e3d5de34efcbe6a8cde20d4e..6266957965d0fc7670da3eab97f411957e16d2aa 100644 GIT binary patch literal 5977 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 delta 2721 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 bvW!s@l#dvt7^N8)7(k7@TMXA3WgH{{0GK{y diff --git a/class/application/MainGUI.fxml b/class/application/MainGUI.fxml index e92780c..a6a521c 100644 --- a/class/application/MainGUI.fxml +++ b/class/application/MainGUI.fxml @@ -1,13 +1,21 @@ <?xml version="1.0" encoding="UTF-8"?> +<?import javafx.scene.control.Label?> <?import javafx.scene.image.ImageView?> <?import javafx.scene.layout.AnchorPane?> <?import javafx.scene.layout.HBox?> +<?import javafx.scene.text.Font?> <AnchorPane prefHeight="600.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.Controller"> <children> - <HBox fx:id="hboxPlayerDeck" layoutX="83.0" layoutY="450.0" prefHeight="107.0" prefWidth="634.0" /> + <HBox fx:id="hboxPlayerDeck" alignment="CENTER" layoutX="83.0" layoutY="450.0" prefHeight="107.0" prefWidth="634.0" /> <ImageView fx:id="iconDeck" fitHeight="90.0" fitWidth="57.0" layoutX="447.0" layoutY="230.0" pickOnBounds="true" preserveRatio="true" /> <ImageView fx:id="iconLastCard" fitHeight="90.0" fitWidth="57.0" layoutX="277.0" layoutY="230.0" pickOnBounds="true" preserveRatio="true" /> + <HBox fx:id="hboxAI1" layoutX="246.0" layoutY="31.0" prefHeight="107.0" prefWidth="309.0" /> + <Label fx:id="labelCurrentPlayer" alignment="CENTER" contentDisplay="CENTER" layoutX="320.0" layoutY="377.0" prefHeight="31.0" prefWidth="162.0" textAlignment="CENTER"> + <font> + <Font name="System Bold" size="19.0" /> + </font> + </Label> </children> </AnchorPane> diff --git a/class/logic/AI.class b/class/logic/AI.class index 2244de046670dc6c2f863e8836304ceb02c3c410..653ed62e7299254dd07b0cfe2810c0db4bc913c5 100644 GIT binary patch delta 1589 zcmdm{@l2EJ)W2Q(7#J8#7`|@g%46kaPfsmzNlngXWDwWToXpQ8%EHK?sxjGyS%r&{ zfu*FhD36grcCsR~jA9rkLp?(yJ3|8_gFsedS)zVUVqUs_aAk2xYAz2$6GQXly{rn1 zt&{Ju$}qN1{>>`M(ZbNl!@$qbHCcvDilc?0hlin;p>MJsn{|B)!vr3Ni3}Bt3>+o- z!6ikRdFfmXlNqM6GfZJ*5C)r`nXeyEl$lo&TvC*pn9IX3jiHN?fxQ4El#|EBz{oIz zhry1)o`Yc)BLi<)Voqj?b7E0Sv6TWB7sDKedF%{x85y{8^3yYu_1zP5Q+XIF8Rj!G z@M&oJ<m4NJL_xl`2B}@h!?1`!osmH}J+;I+BQYl@H7`BYIlnZoB((@6zl4WjDZ{eK zrtGQ`D;QR>GpvLg3^Ia;!GK})<RW%`>9ruHAqT^HMh4cDqQr6qE`}C{jUZ2Nn!JZy zQDh4v1DirJ$dMq4Z6Jy5lRvT>8SZ3c5K2i+OwLwFOe;w(QUGbTQUF=Kn}=Z!g9sx7 z3rL8IVFklJ9tI7D{ga(JR2>h3n3^06hZz}oLDCBOd8uIIIT(&IGO#6Q<mVTsaxffc zWZ-f1RDf_n!Nb7FaFU1N6vOGsD>>}z&%$D}v?Mb}KPWLTB|n#o;S7T?h`7MRaFO8> zBLjP0YDI}>UI`-ui-xDBCnrM^!xbKes|>k}3~Z6EK0f~8Aff9#3^zbR%t5X$ApR{L zhT9-Mi<3{ND@foj55ql>0IPeDtE(R<4j%~dFjz8JfxP+%#CpugATwE!S!(iR&Th6h zJPdCc-c45FQeyeQ!|-vk7gshT@8)e>?^$)27&sXi7?>EU83Y*^81xw!85kKD7+AHo zFi33xODHffFtC9IOD4bP7Ok&gsAXUTDP}szzyi|DIB^q0-EM}KNTIgv3>_ei+ZejH zG4yX^n53nxBfE`Zx)lpd#mwyt9g-|?c@VQ?7Q=GcnGDHVT3Z<8wlU0xPzxZ`;%yAe zw=t}NX<xUUp&n#|+%|><+ZZ+oZQjPP6=D-i#SRQ7fKA=CoZ%g+1&g;a?A^w2U=u@~ z(4lP%lL+fy2U2=un+8JdF_2x7EZZ4Qz&)e|=322bTCq+3$SYkRx|`ul<aUO0R_v1O z?AsX5vm}^th;poA00UbF25`8tFfcHHLRo`>fx&=*fx%)E!(}VB<qQ&=7_Nb6flUlI zK{UrEhC5blpn%bmWZlMaUy^Mb!^4dX3=Aw_?M+~^l0lN8ib08?n!%Exrk=r(p^m|o zp@AWhp^>49p^0HOLo>r7h8BjU4DAfN7&;gZF?2HAX6Ryg#L&a=l%b#DEyDyx4u;8$ z0t{0ag&C$X>NCt>v|yOY=)^FKF@<3cV<y8~#vF!ujD-yI8A})zFjg`wWUOIW#MsEN zoN)rfN(My+28I|&s$fuJs8<GglyM?MHaKN5FivF1VaR1*VgRx781fmI8I&0F8J;k3 zFt9KRFf=ecWzc6}WfW$pWq8Jr%fQBH!Qjd8oZ$rnJEIeWJ;O@|9tI8u3kC)T9tK9J zPA&!(h9U+A1|<g0KMYIR8N}`XGI+8xc(XGk{bdL=VP`nQ$j;9GlY!+Y10MquD6=xa zlKd-BDrPvyz{J4Hz`$Up&Ag4_^#KNNU+rxSj#ezo8Kfmyb~3m!G8|y=_S4<Q@Lp#d z!~4lIgcU^BGH^1iV~}Ooz@Wjfi9w5D9fJwOw#jFO#koN~VPxQB&}H~E`Mt0-<CDqU MA}Z{k!5Qfb06(mrrvLx| delta 1471 zcmaE+xlM!X)W2Q(7#J8#7(Q&|%43~;gjJobhM|s~p?2~|R#E19hK9+UYzmA`leO4n zTv`|zL>zN+6p|B*Qi>Jw^As`?^HQu7xVRV^8QORl_!-(68ALUFvJ%S@^>Y&Q()EK& ziZb)ktu@0yDmr->x){1Acd=PZH!}3{F!V80FfwqI<U<s3F-%~X#Lh5r@&h)B`pF=Z z*b9m>^Gb5^xEL52rt&b@G1zl3OlM@^ElbSFOmPM|0c`b5hS}^4vltn;a`MwNll9#b zb5nU3<}l1<WMEHEEpbUr&Sqrb)6n#RNQ3y+TnsZA=JPNtU{Ggd5Kd1man4B0$w|#i zPj${O%_~VQ;sPmH#KW+dVaeojc2$XG3@g|fmcy+8nZd(gz_4=i7IuB<)gY!J2g6!M z2G*3K#Bv3YU)O{Dx?%D^c14j*j0|j$5CchU0ZD9~Y|LS#u$_@XC?z#9Ia?tytt7Qb z0i@YVfs0`o!%iLs4TfElr*Wt{?g241IT-daGVp>FDCFm*f=%OKIKarjmYk8FU!2Op zaEOtC$I(*(!Yu}w!pLxhhv6v0vB`fp?CVc3G6;ZUrL-h7M?WYrFC{;hi{UtfFo-zK z!*GV-EF%MZUTQ^&XI=>-1B-^IrY9#u62o~Oh6@b2j0|j%u0B5g;UJ+)JPemXLd-#~ zE+GC@9)@cmK8ur2s4Ga|1`oqckN~TDkgKa7DDrL#@i162Sb+ldE{JuHkwIp%BD2)w zXPn(^&v_VLFua^x&ZWfinup=d<hfkgj69n;x!<$aGcpJ=FfgrTU}4~7U|?+A#8ADP zp)pdZc{@X^))oe-Z44dT7<#rb^lNGB$ZlhpV#NYeF>O0Tt0W6t9>gq}#V}KLCPR#t z))of2Z45IY)I12aa2vzYZ49em+SfoVsF&NuFmD^fI-!l*7&b#}f~nXBQGsy6a)zg< zCNJE^uwxs;?oABULVLF{^yAUE2Bc;`lA41c!zEd^3o;yrdqGQ*Wjn*+$x%X5^?}<M z!e=rB?`Ak2xt-yp6}u!m`!<GCED2^Dq8zIj7#J9=85kHC85kH?7#JAj7#JAT7#JAz z7#JALHZh#DVq4B2v5Da#h!)tya0NtjY+|@>#RduqElJjG47ViNwlUn<2sS{0fq|h4 zY)A=%Btt2K5<^)%gC#>bgCj#FgDXQdLn1>BLlZ+S!)%5+hItH)44WC67<Mx>GhAV4 zWw_4J!Em3Uli?Rb4<i#pFC!~MKcgbUL`E%!NsJ~8lNm!8rZPq{Ok<2;n9i8UFoQ9L zVJ2fH!z{)ehS`jT3=0?=7#1-oGB7a2K%$>Pi9wlxfuWv(v5_I0K_BEr#zux5hFk_F zQ0idFW5{P<W>8{`XSmP6!N9`E#8AiZfI**um64U9n&BZsE(05*7K1y(BZkKe?2IN1 zwhT`gco;YsEEpIVco-O=I=L8F7>XDe7?c<||1ivBXArme%izh*;LXmE^q0Yio#D7I zBRf0$PX?Bs415espbW;q1acn(6T?$ba%DKkz{J1`3T<uXZ4A#2FnIfFZ)0$@Vp+~0 zEy=Qz!IhEW0E4%m?ly*3I@=gtP4*B`5M9Q=$*`P3mSH7>2E%FwEr#U`CJgH**NTX9 hgM7lsz{#M?@OJWi5oyNzlXr`#u)kwqU|?c+4*>byhCu)T diff --git a/class/logic/Game.class b/class/logic/Game.class index 2c08991143131323f6c047ab596d63d1fabdf01e..c148f6bd2cd1beeec9a4af410ccf6433248bb8e8 100644 GIT binary patch literal 6186 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 delta 3211 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 VS|GA8Fd1@7GcYoWfufyJ8~{Rk%a8y7 diff --git a/class/logic/Player.class b/class/logic/Player.class index bd82c537dc81df483d302da92a725af1f010820f..8f921401c014056841767dd73eb99de384d60a20 100644 GIT binary patch delta 409 zcmdm{@?Vkb)W2Q(7#J8#7>;e^dd@Dz!LXi@fi<Nlv0Q<Rp@m^14?{1*CPoGs4bRDm z95NzX7#Y|Uk`s$kib1m5K(gB>dvh2u?wnl5A<4Fzhe3m3&*Zrrs)qYOOid1k1B?v3 zVB_-hQo%Yo7!ENquq9{Y=NG3kGH{k9=47V0q$X!?Ud-9T#>Lpfz{0@Fz`*cevY|k7 zecf(`mPny>+Zj5vwlK(TV_2|_VS~`-Z46ttG4yX^n6!xjqF@I^fz&pJZivKk1{W=e zj@b}u@ivBC+Zgt4VyF|^k6$A<NX@}*43jo8FmN%jFeorEFxWBhPfifDPM^S_2o5W- z0~wSUlo>$a0Yf%}J_94j(F{2ZxeQETRvtq>12cmX!#;+?3>*wB3>FLw3_J{sP!W*H cMGPPtnEx=$V`mVzU}s=tIKsfdz{GGA01QNKV*mgE delta 750 zcmeybxJ`xY)W2Q(7#J8#818K3dd{xJ$xzR*o`+!rLo*`-b81l$2g4>t2G*3K#Bv2L zh8Bh`JPf@ITNxQ-G(0B<a>$5mXJlYgNKPzDDF(^z1j+82Y|UZBxMy-6ha}rR9tI7D z{gZn+RO=6dn3^06hZz}o!N%q1rGj;GFdSuMU`x)(&o55pWC&t7&ckqmA&ilM)z#D8 zBZQM7iQyCv!)b<GMh4~}R~Ie@Z-%ox4Ezk|7#S2bd~)*BGn4h56N^$pDhpDrVf_4@ z{32^l%`lMe3p@-L8FK3x8CaZrLS4BS7#S|}Fjz8JaWTwcxC&xj19=CgGqETI)fCMz zMh4EZ#GK3&m(=8JMh32eoW#o16p)pS3_N+M<>8sd8O|UJ85y{O^Gl18Q{6IiQW+Vz z13(Ik^s*Am5*ZXXai+6zF)=f+GO#l+Fe*<j<WH_&x0|6QQfT9Lh7PSQ4078T7HnhK zEVOMK!;WnX{o5EOZDObcE7%QDAhnI58zQlsp<N52V>X0Zyp3V+HiiS67}g0L!mrV9 z6GNTQk!=i<b~AYUMs8v_wu#{+^LB<aR;-LxY?7?o7<@M|WNc#ypT!^u<ppkI2%pKo zv5Dcl6&uJlEs*#nNw#eaS2i**Ft9KvFfcF#F^Ei#6|k=FXL!#rf#DOwBt|}lX^g@Q zGZ~c_W-}-<Ffe#P{LP@mpv=Gk3IT>}27LxbFe`^4mw^e)%45i9U}jKaWMsI`z`?-6 z@See#;Rb^~11rNP1_Oqh47m(!3>FLw3_J{sP*q$EEDS{q3=ContbZ6}=CLz~Tl{4( ZV`uPYXGmiC$-u|J$Z(5+fq{wPHUPC{$87)r diff --git a/src/application/Controller.java b/src/application/Controller.java index d048273..e889885 100644 --- a/src/application/Controller.java +++ b/src/application/Controller.java @@ -4,12 +4,15 @@ import java.util.ArrayList; import java.util.Locale; import java.util.ResourceBundle; +import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.geometry.Insets; import javafx.scene.control.Alert; import javafx.scene.control.Alert.AlertType; +import javafx.scene.control.Label; import javafx.scene.image.Image; import javafx.scene.image.ImageView; +import javafx.scene.input.MouseEvent; import javafx.scene.layout.HBox; import javafx.stage.Stage; import logic.Card; @@ -21,19 +24,22 @@ public class Controller { @FXML private ImageView iconLastCard; @FXML private ImageView iconDeck; - @FXML private HBox hboxPlayerDeck; - + @FXML private HBox hboxPlayerDeck; + @FXML private HBox hboxAI1; + @FXML private Label labelCurrentPlayer; + public Game game; - + public Stage stage; public Image icon = new Image("images/icon.png"); private final ResourceBundle bundle = ResourceBundle.getBundle("application/", Locale.GERMANY); public void init() { - iconDeck.setImage(createBackCard()); - - game = new Game(this, 3); + iconDeck.setImage(createBackCard()); + + // DEBUG + game = new Game(this, 1); game.newGame(5); } @@ -41,53 +47,97 @@ public class Controller { this.stage = stage; } - + + public void setLabelCurrentPlayer(String text) + { + labelCurrentPlayer.setText(text); + } + public void setLastCard(Card card) { iconLastCard.setImage(createCard(card, true).getImage()); } - + private Image createBackCard() - { - return new Image("images/card-back.png"); + { + return new Image("images/card-back.png"); } - + private ImageView createCard(Card card, boolean valid) - { + { ImageView imageView = new ImageView(new Image("images/" + card.getType() + "-" + card.getColor() + ".png")); imageView.setFitHeight(90.0); - imageView.setFitWidth(57.0); - + imageView.setFitWidth(57.0); + + if(!valid) + { + //TODO +// imageView.setImage(new Image("images/transparent/" + card.getType() + "-" + card.getColor() + ".png")); +// imageView.setStyle("-fx-background-color: transparent;"); + } + + imageView.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() + { + @Override + public void handle(MouseEvent event) + { + if(valid) + { + Color newWishColor = null; + + if(card.getType().equals(CardType.WILD) || card.getType().equals(CardType.DRAW_FOUR)) + { + // TODO chose wishColor + } + + game.playCard(game.getPlayer().playCard(card), newWishColor); + } + } + }); + return imageView; } - + public void setPlayerDeck(ArrayList<Card> deck) { - hboxPlayerDeck.getChildren().clear(); - + hboxPlayerDeck.getChildren().clear(); + for(Card currentCard : deck) { hboxPlayerDeck.getChildren().add(createCard(currentCard, true)); - HBox.setMargin(hboxPlayerDeck.getChildren().get(hboxPlayerDeck.getChildren().size() - 1), new Insets(0,15,0,0)); + HBox.setMargin(hboxPlayerDeck.getChildren().get(hboxPlayerDeck.getChildren().size() - 1), new Insets(0, 15, 0, 0)); } - } - + } + + // TODO other AIs + // TODO set Cards to back + public void setAI1Deck(ArrayList<Card> deck) + { + hboxAI1.getChildren().clear(); + + for(Card currentCard : deck) + { + hboxAI1.getChildren().add(createCard(currentCard, true)); + HBox.setMargin(hboxAI1.getChildren().get(hboxAI1.getChildren().size() - 1), new Insets(0, 15, 0, 0)); + } + } + public void setValidPlayerDeck(ArrayList<Card> deck, ArrayList<Card> validDeck) - { + { for(Card currentCard : deck) { if(validDeck.contains(currentCard)) { hboxPlayerDeck.getChildren().add(createCard(currentCard, true)); - } + } else { hboxPlayerDeck.getChildren().add(createCard(currentCard, false)); } - - HBox.setMargin(hboxPlayerDeck.getChildren().get(hboxPlayerDeck.getChildren().size() - 1), new Insets(0,15,0,0)); + + HBox.setMargin(hboxPlayerDeck.getChildren().get(hboxPlayerDeck.getChildren().size() - 1), new Insets(0, 15, 0, 0)); } - } + } public void about() { diff --git a/src/application/MainGUI.fxml b/src/application/MainGUI.fxml index e92780c..a6a521c 100644 --- a/src/application/MainGUI.fxml +++ b/src/application/MainGUI.fxml @@ -1,13 +1,21 @@ <?xml version="1.0" encoding="UTF-8"?> +<?import javafx.scene.control.Label?> <?import javafx.scene.image.ImageView?> <?import javafx.scene.layout.AnchorPane?> <?import javafx.scene.layout.HBox?> +<?import javafx.scene.text.Font?> <AnchorPane prefHeight="600.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.Controller"> <children> - <HBox fx:id="hboxPlayerDeck" layoutX="83.0" layoutY="450.0" prefHeight="107.0" prefWidth="634.0" /> + <HBox fx:id="hboxPlayerDeck" alignment="CENTER" layoutX="83.0" layoutY="450.0" prefHeight="107.0" prefWidth="634.0" /> <ImageView fx:id="iconDeck" fitHeight="90.0" fitWidth="57.0" layoutX="447.0" layoutY="230.0" pickOnBounds="true" preserveRatio="true" /> <ImageView fx:id="iconLastCard" fitHeight="90.0" fitWidth="57.0" layoutX="277.0" layoutY="230.0" pickOnBounds="true" preserveRatio="true" /> + <HBox fx:id="hboxAI1" layoutX="246.0" layoutY="31.0" prefHeight="107.0" prefWidth="309.0" /> + <Label fx:id="labelCurrentPlayer" alignment="CENTER" contentDisplay="CENTER" layoutX="320.0" layoutY="377.0" prefHeight="31.0" prefWidth="162.0" textAlignment="CENTER"> + <font> + <Font name="System Bold" size="19.0" /> + </font> + </Label> </children> </AnchorPane> diff --git a/src/logic/AI.java b/src/logic/AI.java index 182d1d2..6dbd96a 100644 --- a/src/logic/AI.java +++ b/src/logic/AI.java @@ -110,6 +110,11 @@ public class AI { return name; } + + public ArrayList<Card> getDeck() + { + return deck; + } public void turn(Card lastCard, Color wishColor, boolean challenge) { @@ -123,12 +128,14 @@ public class AI drawCards(game.getDeck().drawCards(game.getChallengeCounter(), game.getDeadDeck())); System.out.println("draw " + game.getChallengeCounter() + " cards"); System.out.println("deack after draw: " + deck); + game.draw(); } else { drawCard(game.getDeck().drawCard(game.getDeadDeck())); System.out.println("draw one card"); System.out.println("deack after draw: " + deck); + game.draw(); } } else @@ -140,7 +147,7 @@ public class AI Card playedCard = getHighestValuedCard(validDeck); Color newWishColor = null; - if(playedCard.getType().equals(CardType.WILD) || playedCard.getType().equals(CardType.DRAW_TWO)) + if(playedCard.getType().equals(CardType.WILD) || playedCard.getType().equals(CardType.DRAW_FOUR)) { Random random = new Random(); int colorInt = random.nextInt(4) + 1; diff --git a/src/logic/Game.java b/src/logic/Game.java index e4e4aae..26af135 100644 --- a/src/logic/Game.java +++ b/src/logic/Game.java @@ -19,6 +19,9 @@ public class Game private boolean challenge; private Direction direction; private Controller controller; + private boolean lastPlayerDraw; + private boolean skipped; + private int counter; public Game(Controller controller, int numberOfAIs) { @@ -27,7 +30,7 @@ public class Game deadDeck = new DeadDeck(); player = new Player("Spieler", this); ais = new ArrayList<AI>(); - for(int i = 0; i < numberOfAIs; i++) + for(int i = 1; i <= numberOfAIs; i++) { ais.add(new AI("AI " + i, this)); } @@ -47,6 +50,8 @@ public class Game wishColor = null; challenge = false; direction = Direction.RIGHT; + lastPlayerDraw = false; + skipped = false; player.initialize(); @@ -60,6 +65,9 @@ public class Game deadDeck.add(deck.drawCard(deadDeck)); lastCard = deadDeck.getCards().get(deadDeck.getCards().size()-1); + controller.setLastCard(lastCard); + + //TODO abfangen wenn +4 oder +2 oder wild am anfang kommt start(); } @@ -69,59 +77,97 @@ public class Game return gameCount; } - private void start() + public void start() { Random random = new Random(); - currentPlayer = random.nextInt(ais.size() + 1) + 1; + currentPlayer = random.nextInt(ais.size() + 1) + 1; - //while(true) - //{ - if(!lastCard.getType().equals(CardType.SKIP)) + counter = 1; + + run(); + } + + private String run() + { + if(player.getDeckSize() == 0) + { + end(player.getName()); + return null; + } + + for(AI winningAI : ais) { - if(lastCard.getType().equals(CardType.REVERSE)) + if(winningAI.getDeckSize() == 0) { - if(direction.equals(Direction.RIGHT)) - { - direction = Direction.LEFT; - } - else - { - direction = Direction.RIGHT; - } - //TODO show icon direction in UI - } - - determineNextPlayer(); - - //DEBUG - currentPlayer = 1; - //TODO mark currentPlayer in UI - - if(currentPlayer == 1) - { - controller.setValidPlayerDeck(player.getDeck(), player.getValidCards(lastCard, wishColor, challenge)); - - //player.turn(lastCard, wishColor, challenge); -// controller.setPlayerDeck(player.getDeck()); - - if(player.getDeckSize() == 0) - { - end(player.getName()); -// break; - } + end(winningAI.getName()); + return null; + } + } + + System.out.println("ROUND: " + counter / 4); + + determineNextPlayer(); + + System.out.println("Player " + currentPlayer + "'s turn"); + + if(skipped || !lastCard.getType().equals(CardType.SKIP)) + { + if(lastCard.getType().equals(CardType.REVERSE) && !lastPlayerDraw) + { + if(direction.equals(Direction.RIGHT)) + { + direction = Direction.LEFT; } else - { - ais.get(currentPlayer - 2).turn(lastCard, wishColor, challenge); - - if(ais.get(currentPlayer - 2).getDeckSize() == 0) - { - end(ais.get(currentPlayer - 2).getName()); -// break; - } + { + direction = Direction.RIGHT; } - } - //} + //TODO show icon direction in UI + } + + //TODO mark currentPlayer in UI + + if(currentPlayer == 1) + { + controller.setLabelCurrentPlayer(player.getName() + " ist am Zug"); + + controller.setValidPlayerDeck(player.getDeck(), player.getValidCards(lastCard, wishColor, challenge)); + + player.turn(lastCard, wishColor, challenge); + controller.setPlayerDeck(player.getDeck()); + } + else + { + AI currentAI = ais.get(currentPlayer - 2); + + controller.setLabelCurrentPlayer(currentAI.getName() + " ist am Zug"); + + currentAI.turn(lastCard, wishColor, challenge); + + switch(currentPlayer) + { + case 2: controller.setAI1Deck(currentAI.getDeck()); + break; +// case 3: controller.setAI2Deck(currentAI.getDeck()); +// break; +// case 4: controller.setAI3Deck(currentAI.getDeck()); +// break; + default: break; + } + } + } + else + { + if(!skipped) + { + System.out.println("SKIPPED player " + currentPlayer); + skipped = true; + run(); + } + } + counter++; + + return null; } private void determineNextPlayer() @@ -153,7 +199,16 @@ public class Game private void end(String name) { //TODO in UI - System.out.println("Player " + name + " wins!"); + System.err.println("Player " + name + " wins!"); + + if(currentPlayer == 1) + { + controller.setLabelCurrentPlayer(player.getName() + " gewinnt!"); + } + else + { + controller.setLabelCurrentPlayer(ais.get(currentPlayer - 2).getName() + " gewinnt!"); + } } public Deck getDeck() @@ -171,6 +226,20 @@ public class Game return challengeCounter; } + public Player getPlayer() + { + return player; + } + + public void draw() + { + challenge = false; + challengeCounter = 0; + lastPlayerDraw = true; + + run(); + } + public void playCard(Card card, Color wishColor) { deadDeck.add(card); @@ -187,12 +256,21 @@ public class Game challenge = true; challengeCounter += 4; } + else + { + challenge = false; + challengeCounter = 0; + } - controller.setLastCard(lastCard); + lastPlayerDraw = false; + skipped = false; + controller.setLastCard(lastCard); System.out.println("new lastCard: " + lastCard); System.out.println("new wishColor: " + this.wishColor); System.out.println("new challenge: " + challenge); System.out.println("new challengeCounter: " + challengeCounter); + + run(); } } \ No newline at end of file diff --git a/src/logic/Player.java b/src/logic/Player.java index c20df03..57931d3 100644 --- a/src/logic/Player.java +++ b/src/logic/Player.java @@ -124,14 +124,14 @@ public class Player if(challenge) { drawCards(game.getDeck().drawCards(game.getChallengeCounter(), game.getDeadDeck())); - System.err.println("draw " + game.getChallengeCounter() + " cards"); - System.out.println("deack after draw: " + deck); + System.out.println("draw " + game.getChallengeCounter() + " cards"); + System.out.println("deack after draw: " + deck); } else { drawCard(game.getDeck().drawCard(game.getDeadDeck())); - System.err.println("draw one card"); - System.out.println("deack after draw: " + deck); + System.out.println("draw one card"); + System.out.println("deack after draw: " + deck); } } else @@ -139,18 +139,7 @@ public class Player System.out.println("choose"); //playerInput (draw or turnCard) - //DEBUG - Card playedCard = new Card(CardType.EIGHT, Color.RED, 0); - Color newWishColor = null; - - if(playedCard.getType().equals(CardType.WILD) || playedCard.getType().equals(CardType.DRAW_TWO)) - { - //TODO choose color - //DEBUG - newWishColor = Color.BLUE; - } - - game.playCard(playCard(playedCard), newWishColor); + //TODO add "draw" - Button } } } \ No newline at end of file -- GitLab