Tests now pass

master
Elliott LE GUEHENNEC 2 years ago
parent b4af36cb01
commit cca3a46895

@ -1,10 +1,19 @@
package model; package model;
public class Board { public class Board {
Player[] boxes = new Player[9];
public void setBox(int column, int row, Player value) { public void setBox(int column, int row, Player value) {
int index = getIndex(column, row);
boxes[index] = value;
} }
public Player getBox(int column, int row) { public Player getBox(int column, int row) {
return null; int index = getIndex(column, row);
return boxes[index];
}
private int getIndex(int column, int row) {
if (row < 1 || row > 3) throw new IndexOutOfBoundsException();
return (column - 1) * 3 + row - 1;
} }
} }

@ -2,6 +2,10 @@ package model;
public class InputChecker { public class InputChecker {
public boolean isInputValid(Board board, int box) { public boolean isInputValid(Board board, int box) {
return false; if (box < 1 || box > 9) return false;
int col = (box - 1) / 3 + 1;
int row = box % 3;
if (row == 0) row = 3;
return board.getBox(col, row) == null;
} }
} }

@ -2,10 +2,87 @@ package model;
public class WinChecker { public class WinChecker {
public boolean isGameOver(Board b) { public boolean isGameOver(Board b) {
return false; if (b.getBox(1, 1) != null) {
if (b.getBox(1, 1) == b.getBox(1, 2)
&& b.getBox(1, 2) == b.getBox(1, 3))
return true;
if (b.getBox(1, 1) == b.getBox(2, 1)
&& b.getBox(1, 1) == b.getBox(3, 1))
return true;
if (b.getBox(1, 1) == b.getBox(2, 2)
&& b.getBox(1, 1) == b.getBox(3, 3))
return true;
}
if (b.getBox(3, 1) != null) {
if (b.getBox(3, 1) == b.getBox(3, 2)
&& b.getBox(3, 1) == b.getBox(3, 3))
return true;
if (b.getBox(3, 1) == b.getBox(2, 2)
&& b.getBox(3, 1) == b.getBox(1, 3))
return true;
}
if (b.getBox(2, 1) != null
&& b.getBox(2, 1) == b.getBox(2, 2)
&& b.getBox(2, 1) == b.getBox(2, 3))
return true;
if (b.getBox(1, 2) != null
&& b.getBox(1, 2) == b.getBox(2, 2)
&& b.getBox(1, 2) == b.getBox(3, 2))
return true;
if (b.getBox(1, 3) != null
&& b.getBox(1, 3) == b.getBox(2, 3)
&& b.getBox(1, 3) == b.getBox(3, 3))
return true;
for (int i = 1; i <= 3; ++i)
for (int j = 1; j <= 3; ++j)
if (b.getBox(i, j) == null)
return false;
return true;
} }
public Player getWinner(Board b) { public Player getWinner(Board b) throws IllegalGameStateException {
return null; Player currentBox, winner = null;
currentBox = b.getBox(1, 1);
if (currentBox != null) {
if (currentBox == b.getBox(1, 2)
&& currentBox == b.getBox(1, 3))
winner = currentBox;
if (currentBox == b.getBox(2, 1)
&& currentBox == b.getBox(3, 1))
winner = currentBox;
if (currentBox == b.getBox(2, 2)
&& currentBox == b.getBox(3, 3))
winner = currentBox;
}
currentBox = b.getBox(3, 1);
if (currentBox != null) {
if (currentBox == b.getBox(3, 2)
&& currentBox == b.getBox(3, 3)) {
if (winner != null && winner != currentBox) throw new IllegalGameStateException();
winner = currentBox;
} if (currentBox == b.getBox(2, 2)
&& currentBox == b.getBox(1, 3)) {
if (winner != null && winner != currentBox) throw new IllegalGameStateException();
winner = currentBox;
} }
currentBox = b.getBox(2, 1);
if (currentBox != null
&& currentBox == b.getBox(2, 2)
&& currentBox == b.getBox(2, 3)) {
if (winner != null && winner != currentBox) throw new IllegalGameStateException();
winner = currentBox;
} currentBox = b.getBox(1, 2);
if (currentBox != null
&& currentBox == b.getBox(2, 2)
&& currentBox == b.getBox(3, 2)) {
if (winner != null && winner != currentBox) throw new IllegalGameStateException();
winner = currentBox;
} currentBox = b.getBox(1, 3);
if (currentBox != null
&& currentBox == b.getBox(2, 3)
&& currentBox == b.getBox(3, 3)) {
if (winner != null && winner != currentBox) throw new IllegalGameStateException();
winner = currentBox;
} return winner;
} }
} }

@ -14,7 +14,7 @@ public class BoardTests {
Random rng = RandomSingleton.get; Random rng = RandomSingleton.get;
int col = rng.nextInt(); int col = rng.nextInt();
int row = rng.nextInt(); int row = rng.nextInt();
boolean shouldThrow = col >= 1 && col <= 3 && row >= 1 && row <= 3; boolean shouldThrow = col < 1 || col > 3 || row < 1 || row > 3;
return Stream.of( return Stream.of(
Arguments.of(1, 1, false), Arguments.of(1, 1, false),
Arguments.of(1, 3, false), Arguments.of(1, 3, false),

@ -6,7 +6,6 @@ import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource; import org.junit.jupiter.params.provider.MethodSource;
import java.util.Random;
import java.util.stream.Stream; import java.util.stream.Stream;
public class InputCheckerTests { public class InputCheckerTests {
@ -15,7 +14,7 @@ public class InputCheckerTests {
boolean isValid = val >= 1 && val <= 9; boolean isValid = val >= 1 && val <= 9;
return Stream.of( return Stream.of(
Arguments.of(1, true), Arguments.of(1, true),
Arguments.of(1, true), Arguments.of(9, true),
Arguments.of(-3, false), Arguments.of(-3, false),
Arguments.of(15, false), Arguments.of(15, false),
Arguments.of(val, isValid) Arguments.of(val, isValid)

@ -176,7 +176,7 @@ public class WinCheckerTests {
@ParameterizedTest @ParameterizedTest
@MethodSource("getWinnerTestNormalData") @MethodSource("getWinnerTestNormalData")
public void getWinnerTestNormal(Board b, Player expected){ public void getWinnerTestNormal(Board b, Player expected) throws IllegalGameStateException {
Player actual = new WinChecker().getWinner(b); Player actual = new WinChecker().getWinner(b);
Assertions.assertEquals(expected, actual); Assertions.assertEquals(expected, actual);
} }
@ -194,7 +194,7 @@ public class WinCheckerTests {
} }
@Test @Test
public void getWinnerTestRandom(){ public void getWinnerTestRandom() throws IllegalGameStateException {
Player currentBox; Player currentBox;
Board b = new Board(); Board b = new Board();
Player expected = null; Player expected = null;

Loading…
Cancel
Save