From 2f8f9bc2a8761b48a23cf0895675c429c5ed0368 Mon Sep 17 00:00:00 2001 From: simon Date: Fri, 17 Jul 2020 00:46:26 +0200 Subject: [PATCH] perfected the tic tac toe game --- TicTacToe - MinMax/src/Board.java | 13 ++--- TicTacToe - MinMax/src/Game.java | 54 +++++++++++++----- .../TicTacToe - MinMax/Board$1.class | Bin 812 -> 812 bytes .../TicTacToe - MinMax/Board$2.class | Bin 1723 -> 1705 bytes out/production/TicTacToe - MinMax/Board.class | Bin 3444 -> 3403 bytes out/production/TicTacToe - MinMax/Game.class | Bin 2740 -> 2863 bytes .../TicTacToe - MinMax/Minmax.class | Bin 247 -> 0 bytes out/production/TicTacToe - MinMax/Test.class | Bin 1045 -> 0 bytes 8 files changed, 47 insertions(+), 20 deletions(-) delete mode 100644 out/production/TicTacToe - MinMax/Minmax.class delete mode 100644 out/production/TicTacToe - MinMax/Test.class diff --git a/TicTacToe - MinMax/src/Board.java b/TicTacToe - MinMax/src/Board.java index 694f605..e7746ad 100644 --- a/TicTacToe - MinMax/src/Board.java +++ b/TicTacToe - MinMax/src/Board.java @@ -15,9 +15,7 @@ public class Board extends JPanel implements ActionListener { private final int DELAY = 50; private boolean ended = false; - private boolean gameWon = false; - private boolean initialized = false; int[] oldPlayfield; @@ -75,7 +73,7 @@ public class Board extends JPanel implements ActionListener { actions++; } } - if (ended) { + if (gameWon) { painter.paintWinnerLine(g); } } @@ -87,7 +85,7 @@ public class Board extends JPanel implements ActionListener { timer.start(); oldPlayfield = game.getPlayfield().clone(); game.setTurnTaken(false); - ended = false; + gameWon = false; repaint(); } @@ -113,9 +111,10 @@ public class Board extends JPanel implements ActionListener { oldPlayfield = game.getPlayfield().clone(); } //stop timer if game won - else if (gameWon || game.emptyTiles() == 0) { - ended = true; - setWinningLine(); + if (gameWon || game.emptyTiles() == 0) { + if (gameWon) { + setWinningLine(); + } repaint(); timer.stop(); try { diff --git a/TicTacToe - MinMax/src/Game.java b/TicTacToe - MinMax/src/Game.java index 842a541..856acf3 100644 --- a/TicTacToe - MinMax/src/Game.java +++ b/TicTacToe - MinMax/src/Game.java @@ -3,11 +3,13 @@ import javax.swing.*; public class Game { private int[] playfield; + private int boardValue; private boolean turnTaken = false; private int winningX1,winningY1,winningX2,winningY2; public Game(){ playfield = new int[9]; + boardValue = 0; } public void place(int position, int player){ @@ -22,22 +24,20 @@ public class Game { } public void computersTurn(){ - boolean isPlaced = false; - try { - Thread.sleep(750); - } catch (InterruptedException e) { - e.printStackTrace(); - } - while(!isPlaced){ - int random = (int) (Math.random() * 9); - // if field is free - if (playfield[random] == 0) { - place(random, -1); - isPlaced = true; + for (int i = 0; i < playfield.length; i++){ + if (playfield[i] == 0){ + if (minmax(playfield, 0, true) == 1){ + place(i, -1); + return; } + } } } + private int minmax(int[] board, int depth, boolean isMaximizing){ + return 1; + } + public boolean checkWin() { //only check if winning is possible if (emptyTiles() < 5) { @@ -47,6 +47,11 @@ public class Game { winningX1 = 75; winningX2 = 825; winningY1 = winningY2 = i * 300 + 150; + if (playfield[i] == 1){ + boardValue = 10; + } else { + boardValue = -10; + } return true; } //vertical @@ -54,6 +59,11 @@ public class Game { winningY1 = 75; winningY2 = 825; winningX1 = winningX2 = i * 300 + 150; + if (playfield[i * 3] == 1){ + boardValue = 10; + } else { + boardValue = -10; + } return true; } } @@ -61,13 +71,24 @@ public class Game { if ((playfield[2] == playfield[4] && playfield[2] != 0) && (playfield[2] == playfield[6])){ winningX2 = winningY1 = 75; winningX1 = winningY2 = 825; + if (playfield[2] == 1){ + boardValue = 10; + } else { + boardValue = -10; + } return true; } else if ((playfield[0] == playfield[4] && playfield[0] != 0) && (playfield[0] == playfield[8])){ winningX1 = winningY1 = 75; winningX2 = winningY2 = 825; + if (playfield[0] == 1){ + boardValue = 10; + } else { + boardValue = -10; + } return true; } } + boardValue = 0; return false; } @@ -78,7 +99,6 @@ public class Game { n -= 1; } } - System.out.println(n); return n; } @@ -113,4 +133,12 @@ public class Game { public int getWinningY2() { return winningY2; } + + public int getBoardValue() { + return boardValue; + } + + public void setBoardValue(int boardValue) { + this.boardValue = boardValue; + } } diff --git a/out/production/TicTacToe - MinMax/Board$1.class b/out/production/TicTacToe - MinMax/Board$1.class index 8e4ef4e50053f39767d782dca3c7f95cf4cd138a..3f4d6d16ed8d99501eb28748d68f977e7b6d6b1b 100644 GIT binary patch delta 35 pcmZ3(wuWs(C=;XNpj4kmfK)6b0#F z+fFLX`p~AXB91vh-^NuT+WdqyCphVZe0{;wnloMlD`iWI)2A!Dk z-5BAv({4r!qA0F9OJ>!0OdeV&HyGraoE7-wv>0MotcMD+am97Cmj!Ai%QYyW=!{Wb*=nJh3!~B)@rz@QQm9%R??(b0%A6 zo*gbN3O=93X_iZ$g=^ak-fB{GJ$IhEa#z`s3nmWluX delta 769 zcmYL{-Afc<6vlt=&TMPrtdYhh7^Y>A78pcjYGo#U*lHhcT59FwPC9;!w!40$l~_Sv zS2A>=5M2Z$)gMt2o!J$;nD@N%JkL4LIcMfw_*2;U`uF2!pq>ZI zMoRT<@m#f>J%I4k z(weSKPKl^C=7S9eO`HtTY;wx`rfN#hn4IODJ{~u*xven8V}tNJ>#pwf`9TxM>(YK| zGt7ET`ap09#jy85FLOp@eVgPB1{swzLO@OfmobU{EtumKe*{ z&QP+*tN+0E3}vfS=Gn?6s=NciaxIPJwFe_}tv;@=a>$Pv>hfVvUfq!4#5P*8oL0rH zS)z?)ON8@^%V|PdmMdurqWdyj&nJji-y)^!FItBF4SZl(dVb6s-pXn<{As(1%t;tw zs|>tL#@sKX9pnyeq=+*i%p^&sm|qrl@`rl$3#~ask6tO-NudJbJ}ps~ TU-Ygx`$&u9=L_nbl%?85ftP9rT-KC{mVXpgu5vyS54KyFm6>{a12Ki3Olij%IrecrZQtv=@REXjLsTN%-vL|W`y(aDww@%6uV_B5Z~_d@#*$s`w=(DFoMNRwCv9m^>r%T& z?^ozUzX3)1)5T1sWX9)jlf4$E82=Cd>B z>`b{=R81>9iYW>#=Chta6Eg}ghS2fnKCwRMbgk;L-~Uth;D(IXt+RQT394!KC;lEQb^ailfJcNM<3jw9V;;`?47 zA=MRh2k}FkH}L|CN!Pnh($u_TTa4d}__2wfDEt&ZTf486bNTK*$FVM!SRM9b6)Vq$ z8JUVt#XDI7FB@q08po}YlPw}vEHKpyAHD%S<0|E#U*0S6!VpZ0$D6wG-Td5 zT4u*eT8lNALC2OZ<~}I~D=5TmEx>|`;9TAj+nFso3-TE3Zb;xpvj?TsvP1}se7kO4 zxGoVB$rbCmpDnPVZ@6c@@}`tx^Xw#|w25x-oRpfY_oLuwvEpRx(>ZCUL2blA2?%R& z*e;cmws@3AtGEN5=Ez!+AE7%_Oui$nW+M`wMc}a_Xjbju+j&~qHc!YOWdUFr4WmYiD+u174)e&r`4DicggEs#Noplt4 za8HBgo|@)>JPb9>qjZapd|RRiRr^ipw%O|zi?JjFg zEQR0~_$3AVdgfo%aUPSp(Dbue%VZCZ8vHoAK0Dt3BT zzDo$zuin4xGnNC!)&IS@?C1CjZ`z;322D`KhXk=7k|{@t6Z|;wp`WQ3BjN!DXOICo z&5#Un73bGS48y!n@q=QDT{wfY+N#6Et9X8$V}QRA{E91SY+29JtY_&A-r%hdZ}NUC z%>N)@7;nQg_UyQUmK$ga(GS1&0{sHzh`WdU$JcDUei>mgcc;IKCzlPH^>1z^w)G5H zu4MqpNcFL`()eWE;Qcfc{OSp@3U_dB$3x7)F(&^w12#c((lmY23!BvQZwOq9V5nx6 zn9vH}+wd7TSY-x&>)|dDwU8bYR}0!IK2yc#>boyi@s;}SxhlR<-+jA^%k^Y(^YmdN zeS~E?%{+Y+_woy-ULnV7cntgwzo%O1ASpUdLJ+!!D^i|UlU-H(pe{9}Z)b`BX@>q8 zEp3m>;RP*(Kj4p)*UA9@32)IPAO4KL)HJMB!dBP3)PdLVqvv4;t|H)nk(%Aal8ObM z_53J7ciW4s{>nr$bSgB#7rvj*75+wYAO4PiaBk-63LC>exejyP#aaHYxYPduMtIhw literal 3444 zcmZuz340UQ6+I)#9$S7GYz%~e2^8weGQq)3NWg&cZUxyWwd$3|8B2pbAdj4pghRTd zY27_Zo9;sT#nP-`NrPzPn8 zswZoCX#-}@%y_IXIb^_y$(4GA&2nDTGc(j58yrdsu|c6xh}FqhynkjwNKFdcDx^sv z?NGQ)i|*@>cWcV+3cIkI%4|1nQ<*U(_x32%W?Cz7e)(O#RX9+iNs>QnFkf_#39~V^lycX6tEx2^v)^%$A+dk4>g+BBfP`p2oO%-z1Y{oVaicGbRnHVhPhDO`xEZA<&$+}?- zpjDLJuW%Z1A|Z3av(MR{XQxN$eFHnz=_@mqyfdP3M#54fVHso?O*}xAvI--CpoBE3 z@NSHeDq&{s#O0J0CNQBei76tUqtc9Z>6~L{XkaMPIvoq+EZ$?{L4_GSWFRmdqq|a> ztV?!Fh!X$Ph?gBrp`3YpvY0SQ?gwtB@79RORxPmzNTKSiwV%DWFra zH@mP%OWeGH?d!Zd=vj;NPAaFJ+k%3^Md7K{JcFL2E8!7^OG2$HET*lzt#eh<|Gf(D z!~3Z-?O96`25!5RV5tnb{FuTA%a_jxAS&BUs~6ADj?7fjFALgn(O6+VNf{g8_iwyBB3x-l{0E%=$E5n5unT}1zTBl5`7-%jxj$0)sTSRZxWvaRPF)LHBgFtYZgK>}p zI#^J>*)(flv&3_xurO`TN@e%=uPr8dZJJ-3$Wx_Jz)Whukv zWtWIKmCY0uT(VfYXvn;2G|!GTY%P{#hCN%lnE%um4(ov1Qh)^&!TG!i+dG%_7UYq* zV_gETH@jb2ElY&J$hZ5}h3j8pBKcx{_p=4A>l;3;Q{I$Z?>sw+D6OK~TiKFo7c2cJ zJeny#EPh@Hy48_<-t}k0xhG`_p^2DLu3E>Y48#=UU3( zX9CApxqCw6<5xs<6-KlnxV!?>pEgAsjDsuK;!j(nTRK*-JsMoWP8phI*c&Zk{|j37 zb&iKPQ*6t|B+ z_7lLJI6%OyeDsguFixUl9h|N*96oF%IGGZh4r)nEuHs!Q7>!0>#%K}aMNGervn#N8 zmY&?wL2Tz%;PBKbVxfXyJ7s|8*YR^=H||9g_fhxJb(%X$nnUtZlr)dhEdlavjkc{~ zkwV+ripWPfELB7|((AwpDmY26chUE!wAk%FYe_7H;OBUqf&=n^_zLLckOr0xo(P_7 zuD*hi;E~X_5Eoq~19u+^T}Fde-Mo#ie)KAKm5&0KQC~Uwz;eJ?4jEVf_r`LN<4Zi* z`3&mxg(4mo#6d{593f7imq_}Ull??Iz)!(J24;vMiIH-etA32|JjrpIUl}Pppsl)_ zcoll^2FDP83H*X9>2&F`rRlPzv-l-X1Narsn_&J2A;WkJrm=U&4bvEu< zqa1PfVDR{wjjvrnqnNuZSj6(OL9_nNt;DvH0Us-60I%`Z$NfSn;!_oaTWBU|Nz!ID{GLM;MsAz<9V?L7Kz8F!ATaXLPl;?B92aEWAMQXi1ohSY$8TzNRw7ot@IcW8G6Mvw*S_b%!_!CVE z;LrF=NyAztH2LO@x4nWNJ_|E+6`|ns)a)mgR4njx*^d%*zrD!nuWXKnPK7E28c*^4 e!ryp3fWPA(oU6II#-{L3t{b^-=PZBM{OSKTeBpus diff --git a/out/production/TicTacToe - MinMax/Game.class b/out/production/TicTacToe - MinMax/Game.class index 2ffd5c686ba2a088df8060935e6175ad4b9497c4..46d25208a04e8d0f9658d637605e2b1b9fb8d415 100644 GIT binary patch literal 2863 zcmZuzO>9(E6#nkK`R^N;sr>=kLMaF{k1|t=sMrF^|CE-tv{q113M#{7(!y27#5INFvhUgy)KP0#<+0pLQwqfeXrA*X42%{d(XY+=R4;+XZquR z-#rEJ2Hpv#z*0^!-BS(=+N zbBnYf(m}Kdv`*SNtJ^Mjo4Jx@&MkFUq|q=oVRHambabFopk2mzJypJDGs>aSg^FD) zjF|;m*<8*RucZqWt5h&^BUZU=&RfTAGgq7!NW_N~HuG8~b*z|QC>E?jWx$cu;2lUz zg&E{l9ox`N@OitCH?Io>;xp;=bRsP;dvxr;P5~dmW$4xyPp2KVT{?CnPHa|wp|T{w zlvUmoa6`u)2|UEW3yl5zKADcaI+AtLektwKv9DHoK}q-Pc%@Fdk0m%(oMQ|dhwXxO zb}>I|l_t&E93{=e#f+JoGE25RyFzazYcnMOuq@nwKyaa0wq*h-lclms0+ES|nYl7z zF1R|84AZs9q?RXHX4c9kWK}$_bJjv7E1=uu5%ap8w{H*_&1SMz=E^%ZUz0V{)Zwnl zRt8+2=w+)S?YT#9d^#~jJCu&CQO0-Gp@%+SC-%k@Gig4ils=qX)*t)pju)7xn#UJ- z8=>ye8UjY>xc2Ogv!pEKL~*f{u}-p*ESyYQQnCo!StAcSD8Mg?&YefHTCMC1wX)c1 zWy#daGOLw^cmUb+sk z31f8Dh6rAxRCi3^bsXeLNRqndKY+$RV5jj7A|1)k=|^rlM?1au5Hq~=w~UZzZv7VR z(w7G5YYW4ZfrjWMie|JDVi&#bU_VNK-HuJyAFXqsw5S+%Vt_jj2KmYhPnVCN%}P8m}e+H-isu78+KkL+|ePeWY2y!Ut?$gj$RED^9v z*)*KnDq;_gs6xuOZz{xc_ZBOmQR^sf(L9bzS#6)j4hEFd}uOPL8en){h(~T&36JtG%=-=FU zA2{~2Nq6;1Pw%Y??_zRw>#ja|e?+5h;qkdi-FzAXP`V}m~a{wt1zQ*>Y1+Ct)mUJyU@@TN$a>9^E9Lv3qdc(+7w`sEY zP7B;7nZU6fL@)b1Nm{2^-aee>c%DW-=CB`mc5s>WSS0*n_g?WQX^- zp=s=~ zMhC~)+QgLq;Q$4?Dpu3SSJfW&GahMGu&Ar^a)>x&Zh|r!9FyyyFyb~DaYtE@zZCV1kU!;;5fiFJ Glm7$xx5j}0 literal 2740 zcmZuz-%}G;6#j0q`N^UIL2DB*Dz(YVgh~r41R4c@fFLM{f>vF^N)|$rNfwp2KKR^e zU)s@!j^hh2Oh=tUnNG*o&h(#Xr%#>fOkX>#ZRvM+Lm*6m?A?3rJ?DPsJKsIwr~kfx z1E2@lAY5?!ps4V`D-c@HAL<=hJvZMmHoIV?Edg)R%$ZidfIAkS3c!zm4?z`mPz97r z`jR0Ku$GItNqy1C35XfFXP=7w2yvy5)mI*vMs`lXb$iH5u3&dk1b^`h%t79O)RLJLyoYm{tb|uvtpYkw${Dn@Zt;DAj- z^&SDA&0UtFQesS%!$5wHneQJlbH>%>rCFmmsn2F}P_>@pFk^HpXg7Qa2@ zSb5HNQRSxXX=l~yG)ul~b(*WeiTrXgZCs>QC=E$aLY9ES^|K)WUOst&asO%7tS+C`tMWjB$3Eeu878_8o-gUWZQ$1%3#wqyClcGcMPl@EPFK%V!V` zJn0%Os^f|4nBYuE)t94w3O9d&Htk!~hZE0m$bN~8MU>}g&=elCihyWr*u(*OjvMlv zcNrhp$1`L`AvE)(7IvHCIB1_2bz+v!V{}Y1BZZ>QKsBv%?SsQlc*G<{o`nPwv3<=*+{v)_1=bwK?WgyC;yFHc z3{TO$Yb9hawP~R%>$Eqx&#t3K)4~m+J=1_M@6W8GZyhPc3FgftoNyUM1{^F;5>Ih< z`?WlJ9tZv>)1~A{tQ=P|Ai#s17)W zksICB0o(*-2XO2me|3OvO`>uF^eAiYH4^QVb%qiHPO_x!6kh_p=)gG^_*#d*<=0dWR{qK8damj57Y6~s6A z#1X7WmWwV+-3;$P2#UA3_7*q(hUYC({9~EeDY+MeVt{C0k7mvtMHWL3fzazRoQ_0 zxm%v;)xzuwvKctu^8X!>dk;0g&7f>|PP373vfaspXDe-Im|04i{F0b(WNdG=yX4|t zC1dWZMDtf#i63d31%WvjWsJKMtbbX7=p;B>Gr3&)hMygG!#A{heEIfdR5_d3@oIB^s zxyhN=`|$)Yg73nBX~U|cf-1p3h>HkPk?n$2e2_^=s7_R-$|=F@_97b&lZDET;!3b) z`BoBIp~~d)e2itW5pl|-9p;HhBT*>r|IjM;>O^qD-};!~uJdz|$hp!x-VYCS19V_> sF@1EA&&1_oSK{R_Z^#Zix6b&hd}XM-o9$!ehW0V|#@8~^|S diff --git a/out/production/TicTacToe - MinMax/Test.class b/out/production/TicTacToe - MinMax/Test.class deleted file mode 100644 index 22a1c24ca0edb8a2bedee0453729906cbf1d1930..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1045 zcmZ`&+fEZv6kVscX@>zy3#eQK#7hfGz26Fmm>8RkKq#qE6O(Cs0)y>LJsn7R_e*^7 zSszNGi67wS_-MSX(*ljAPBMGXS$nU2n|;3i`t$|BeXN=YA#5OGA&Qtla@W~+ay7@> z&aIbsWhD@ZExMi?EDMA)*^+^{fVt{=jyl*6Y)v7=wQ^=MQ7(~** zkcAY|e}yg{Gy_?uv%kj#BX&Ef>*qF<>jlL?NvEEVV?-cYll!t};uKCBIAdW9;{xd( z?gB}JRgsTfU0OnCU(o**Gq}o?)K3Up0K_P-^OU0&)X}*^h!1V^4N7eW-!ZOG3fTuJf VKVcd$#CIfrKxjqN3QZwA`~!H<-S+?h