Browse Source

tictactoe: bugfix: if row and col with same number each contain two chars of same player, col isnt ignored anymore

tictactoe
Tobias Krause 3 years ago
committed by Lorenz Hohmann
parent
commit
332a74df86
  1. 22
      src/main/java/de/tims/tictactoe/ai/AIHard.java
  2. 11
      src/test/java/de/tims/tictactoe/ai/AIHardTest.java

22
src/main/java/de/tims/tictactoe/ai/AIHard.java

@ -52,12 +52,24 @@ public class AIHard implements TicTacToeAI {
if (charsInRow == BOARD_SIZE - 1 || charsInCol == BOARD_SIZE - 1) { if (charsInRow == BOARD_SIZE - 1 || charsInCol == BOARD_SIZE - 1) {
for (int k = 0; k < BOARD_SIZE; k++) { for (int k = 0; k < BOARD_SIZE; k++) {
row = (charsInRow == BOARD_SIZE - 1) ? j : k;
col = (charsInRow == BOARD_SIZE - 1) ? k : j;
if (charsInRow == BOARD_SIZE - 1) {
row = j;
col = k;
if (board[row][col] == EMPTY_CHAR) {
gl.setField(row, col, AI_CHAR);
return;
if (board[row][col] == EMPTY_CHAR) {
gl.setField(row, col, AI_CHAR);
return;
}
}
if (charsInCol == BOARD_SIZE - 1) {
row = k;
col = j;
if (board[row][col] == EMPTY_CHAR) {
gl.setField(row, col, AI_CHAR);
return;
}
} }
} }
} }

11
src/test/java/de/tims/tictactoe/ai/AIHardTest.java

@ -176,6 +176,17 @@ class AIHardTest {
verify(gl, times(1)).setField(2, 1, realChar); verify(gl, times(1)).setField(2, 1, realChar);
} }
@Test
void ifRowAndColWithSameNumberContainEachContainTwoCharsDontIgnoreCol() {
char realChar = 'o';
doReturn(new char[][] { {'x', 'o', 'x'}, {'-', 'o', '-'}, {'o', 'x', 'x'} }).when(gl).getBoard();
TicTacToeAI ai = new AIHard(gl);
ai.calculateNextMove();
verify(gl, times(1)).setField(1, 2, realChar);
}
@ParameterizedTest @ParameterizedTest
@MethodSource("testCasesForCountCharsInRow") @MethodSource("testCasesForCountCharsInRow")
void countCharsInRowTest(String testName, char[][] board, int rowNum, char charToCount, int expectedResult) { void countCharsInRowTest(String testName, char[][] board, int rowNum, char charToCount, int expectedResult) {

Loading…
Cancel
Save