From a6e97c50700ec9fb1e336b4be5d425abe0668e4e Mon Sep 17 00:00:00 2001 From: michiel Date: Thu, 18 Sep 2025 14:11:29 +0200 Subject: [PATCH] new ai update that passes all unit tests and does see wins --- .../java/org/toop/game/tictactoe/MinMaxTicTacToe.java | 8 +++++++- src/test/java/MinMaxTicTacToeTest.java | 1 - 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/toop/game/tictactoe/MinMaxTicTacToe.java b/src/main/java/org/toop/game/tictactoe/MinMaxTicTacToe.java index 1fd2383..50c9051 100644 --- a/src/main/java/org/toop/game/tictactoe/MinMaxTicTacToe.java +++ b/src/main/java/org/toop/game/tictactoe/MinMaxTicTacToe.java @@ -17,6 +17,7 @@ public class MinMaxTicTacToe { int bestVal = -100; // set bestval to something impossible int bestMove = 10; // set bestmove to something impossible + int winningmove = -5; boolean empty = true; for (char cell : game.grid) { @@ -32,6 +33,8 @@ public class MinMaxTicTacToe { // simulate all possible moves on the field for (int i = 0; i < game.grid.length; i++) { + + if (game.validateMove(i)) { // check if the move is legal here TicTacToe copyGame = game.copyBoard(); // make a copy of the game GameBase.State result = copyGame.play(i); // play a move on the copy board @@ -47,7 +50,7 @@ public class MinMaxTicTacToe { TicTacToe opponentCopy = copyGame.copyBoard(); GameBase.State opponentResult = opponentCopy.play(index); if (opponentResult == GameBase.State.WIN) { - return index; + winningmove = index; } } } @@ -59,6 +62,9 @@ public class MinMaxTicTacToe { } } } + if (winningmove > -5) { + return winningmove; + } return bestMove; // return the best move when we've done everything } diff --git a/src/test/java/MinMaxTicTacToeTest.java b/src/test/java/MinMaxTicTacToeTest.java index 19ebb25..3c2669c 100644 --- a/src/test/java/MinMaxTicTacToeTest.java +++ b/src/test/java/MinMaxTicTacToeTest.java @@ -52,7 +52,6 @@ public class MinMaxTicTacToeTest { 'X', GameBase.EMPTY, GameBase.EMPTY, GameBase.EMPTY, GameBase.EMPTY, GameBase.EMPTY }; - game.movesLeft = 4; int bestMove = ai.findBestMove(game);