From 3129dc95a0b25b1a20ffd7b64493fa89ab84967b Mon Sep 17 00:00:00 2001 From: simon Date: Fri, 17 Jul 2020 02:23:08 +0200 Subject: [PATCH] Added the Ai. Stil need to improve it. --- TicTacToe - MinMax/src/Game.java | 60 ++++++++++++++++--- out/production/TicTacToe - MinMax/Game.class | Bin 2863 -> 3503 bytes 2 files changed, 51 insertions(+), 9 deletions(-) diff --git a/TicTacToe - MinMax/src/Game.java b/TicTacToe - MinMax/src/Game.java index 856acf3..289ecbb 100644 --- a/TicTacToe - MinMax/src/Game.java +++ b/TicTacToe - MinMax/src/Game.java @@ -24,18 +24,59 @@ public class Game { } public void computersTurn(){ - for (int i = 0; i < playfield.length; i++){ - if (playfield[i] == 0){ - if (minmax(playfield, 0, true) == 1){ - place(i, -1); - return; - } - } - } + place(findBestMove(playfield), -1); } private int minmax(int[] board, int depth, boolean isMaximizing){ - return 1; + int score = getBoardValue(); + + if (boardValue == 10 || boardValue == -10){ + return score; + } + + if (emptyTiles() == 0){ + return 0; + } + + if (isMaximizing){ + int best = -1000; + for (int i = 0; i < board.length; i++){ + if (board[i] == 0){ + board[i] = 1; + best = Math.max(score, minmax(board, depth + 1, false)) - depth; + board[i] = 0; + } + } + return best; + } else { + int best = 1000; + for (int i = 0; i < board.length; i++){ + if (board[i] == 0){ + board[i] = -1; + best = Math.min(score, minmax(board, depth + 1, true)) + depth; + board[i] = 0; + } + } + return best; + } + } + + private int findBestMove(int[] board){ + int bestVal = -1000; + int index = -1; + + for (int i = 0; i < board.length; i++){ + if (board[i] == 0){ + board[i] = 1; + int moveVal = minmax(board, 0, false); + board[i] = 0; + if (moveVal > bestVal){ + index = i; + bestVal = moveVal; + } + } + } + return index; } public boolean checkWin() { @@ -135,6 +176,7 @@ public class Game { } public int getBoardValue() { + checkWin(); return boardValue; } diff --git a/out/production/TicTacToe - MinMax/Game.class b/out/production/TicTacToe - MinMax/Game.class index 46d25208a04e8d0f9658d637605e2b1b9fb8d415..183a47e614ba8e66427e35eba674b169cbc47b21 100644 GIT binary patch literal 3503 zcmZuzZERat8GerMz5eP=YL~k07Kf%;I}#^N){JJ$;-obFbeA+O4QZPcmK*0bxs787 z+i9EeEu}~d#E=lsuBeL&s1j6Sh@~qC?LYiNLP-2V2qCl|{N9hP-FV(}9mk0*OZS}f zp7TEMd7t;=_%EOQ@qGZVU_Ocfj1Wv47J>?~YtD72JLlwQyGN(5x!JNpFzw~N@}Ppz z);=CV7?BX7Hnzc5Fi$xPu0o`|RLqY#^KM>2O~{!>8`}}%&SK74zUsNT8HK=PMz(g? z_zZR`M5hZ*ac11fEfGOw!q}yd81r&&i&tuKaz)pfS#Bu{XcT+!ObE}~XhKq9x7_h& zcj<=5Tb>zREPI9gIVVq)XG(L08<~9BE#{rvh+8T-v+i-v$rWZ5+S`V;Z_bT!_p!pl zVj=J5%l*Er#^3(-@hC6(SsQ!NqF`V3@-stjsXS7+P6JlkWTrhM2U=}Bhy9e$!K~iN zWPH`Mksnm&M_d03Ni_g>KTl;N=&bn+hS?%1nsP zA@qdsqK(hvutMWTghrh59K)hdTWz$j&%R{iWjSaNNceumM!)bKAzyh?cIl8v2W$*( zlJNe{_|Pue(z(+c72oSU7$=rQ(mae_&4tT01Hwhw!G_w3Tb zv|Ai=rgN0+7%pU;+_+QpWL*)On`Ip~$O*78p4l6XbLZJvg%F} zmpz-7mk(`Ta<_qoYBR}fW2!NME))NW@3i6>es@s` zh{B}l2pdG4#&)3ruTpCJ5E#Y?S4xVf0{?9o`~mw@@1mip>n+-mNpdu4t|Fc?Y3~6d zYDeNRc8e_oV(VF64|Fa3Xqf-W}G+H>p`Vz0%=tk@$u&eAn;V?RbY3*a2*CIZbC zrRS^8rl}{V8dE8`#v?Qb9%0{xkJ2x}KGc9@jbDuwI{~R->XSD0CfNw_?7h?@9OyNP z7LP^WhOH+bt|FK)A9AbxEm+3G<~taSKiSi38NI5||q8H0N^-Z>*AE6IFq3kZw znyD*{)eHQ6k?aSF(TfY5S(vZN=BhHXR*l>}j4{FzlY6u&k(1dtGs+;&ZCs?x)X{84 z^a=K;K=>)PDb@ZFtd9_QijY62B3rs29Q=bSl0ZWGKw!}5H4~<=-rbQf$$BdXb2Qaq z2;;(-X^bYUlSRhJu z(qsC^uIzgm_%4x1mwF(17QV0U8tJCsef&!oSeO0=r@B^g$rs$gXw6PcZw;hkudbml z6*v0UkWQtV;;M5lj-O6Vtl`KShI|Ecm3bXwONg^nQ?U;@VRB0u2j?nw=1j5l+Pd%# z#@45m(UScm+T4(D?#O0yX}L!Qv#!Av#i;C)BbGKABH&qnc?Typ5>&|0~g!HS=x zOzAq=2IDC#rFQyda%H_tbjPMguy~1(SPkeWM&3W*$J&Dbd|4G-g)ftQ|8*SXX|Wkh zHSwj|`cV9g_qtuBkEbdKGLyGhxOt5&*2g+SKZKjGu)!B_E81N?C_k@y%yU(=aP@f$ zGbMxt1qag=TzQh#9c*}Ki-T|1bue2ESgms3R(5_-S9zwca(b)sgSyIYUFD&z%D<_r ze6_Cfk*&(Vt*gwx?G?gat`HVw<2-SZ(THy#`2PTY&%nN0gA%Q##w=^EPHNQrPx28S W6X6dUK`Lu=YRKO;37My3b?yIz2t^_Q 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