diff --git a/src/main/java/de/tims/tictactoe/ai/AIHard.java b/src/main/java/de/tims/tictactoe/ai/AIHard.java index 60bf53c..472e918 100644 --- a/src/main/java/de/tims/tictactoe/ai/AIHard.java +++ b/src/main/java/de/tims/tictactoe/ai/AIHard.java @@ -20,6 +20,7 @@ public class AIHard implements TicTacToeAI { @Override public void calculateNextMove() { int ownCharsInRow = 0; + int ownCharsInCol = 0; int charsOfOpponentInRow = 0; int charsOfOpponentInCol = 0; int charsOfOpponentInDiag = 0; @@ -27,16 +28,17 @@ public class AIHard implements TicTacToeAI { for (int i = 0; i < BOARD_SIZE; i++) { ownCharsInRow = countCharsInRow(i, AI_CHAR); + ownCharsInCol = countCharsInCol(i, AI_CHAR); charsOfOpponentInRow = countCharsInRow(i, PLAYER_CHAR); charsOfOpponentInCol = countCharsInCol(i, PLAYER_CHAR); if (i < 2) { charsOfOpponentInDiag = countCharsInDiag(i, PLAYER_CHAR); } - if (ownCharsInRow == BOARD_SIZE - 1) { + if (ownCharsInRow == BOARD_SIZE - 1 || ownCharsInCol == BOARD_SIZE - 1) { for (int j = 0; j < BOARD_SIZE; j++) { - if (board[i][j] == EMPTY_CHAR) { - gl.setField(i, j, AI_CHAR); + if (board[(ownCharsInRow == BOARD_SIZE - 1) ? i : j][(ownCharsInRow == BOARD_SIZE - 1) ? j : i] == EMPTY_CHAR) { + gl.setField((ownCharsInRow == BOARD_SIZE - 1) ? i : j, (ownCharsInRow == BOARD_SIZE - 1) ? j : i, AI_CHAR); return; } } diff --git a/src/test/java/de/tims/tictactoe/ai/AIHardTest.java b/src/test/java/de/tims/tictactoe/ai/AIHardTest.java index 15ae318..5410f64 100644 --- a/src/test/java/de/tims/tictactoe/ai/AIHardTest.java +++ b/src/test/java/de/tims/tictactoe/ai/AIHardTest.java @@ -110,6 +110,17 @@ class AIHardTest { verify(gl, times(1)).setField(0, 1, realChar); } + @Test + void when2InColSetThird() { + char realChar = 'o'; + doReturn(new char[][] { {'o', '-', 'x'}, {'-', 'x', '-'}, {'o', '-', 'x'} }).when(gl).getBoard(); + + TicTacToeAI ai = new AIHard(gl); + ai.calculateNextMove(); + + verify(gl, times(1)).setField(1, 0, realChar); + } + @ParameterizedTest @MethodSource("testCasesForCountCharsInRow") void countCharsInRowTest(String testName, char[][] board, int rowNum, char charToCount, int expectedResult) {