public Row addNewGuess(Guess guess) { assertNotFinished(); final int full = secret.nrOfFullMatches(guess); final int partial = secret.nrOfPartialMatches(guess); final Row row = new Row(guess,full,partial); table.addRow(row); if (itWasAWinningGuess(full)) { finished = true; } return row; }
@Override protected Guess firstGuess() { final Color[] colors = new Color[table.nrOfColumns()]; int i = colors.length - 1; for (Color color = manager.firstColor(); i >= 0; color = manager.nextColor(color)) { colors[i--] = color; } return new Guess(colors); }
@Override protected Guess firstGuess() { Color[] colors = new Color[table.nrOfColumns()]; int i = 0; for (Color color = table.manager.firstColor(); i < colors.length; ) { colors[i++] = color; } return new Guess(colors); }
private void createTestGame() { ColorManager manager = new ColorManager(NR_COLORS, new LetteredColorFactory()); Table table = new Table(NR_COLUMNS, manager); Color[] colors = new Color[NR_COLUMNS]; Color color = manager.firstColor(); for (int i = 0; i < NR_COLUMNS; i++) { colors[i] = color; color = manager.nextColor(color); } secret = new Guess(colors); game = new Game(table, secret); }
@Test public void allButOneColorsAndPositionsMatch() { ColorManager manager = new ColorManager(NR_COLORS, Color::new); Color[] colors = firstColors(); Row row = new Row(new Guess(colors), NR_COLUMNS - 1, 0); stepTheLastColor(colors); Assert.assertTrue(row.matches(new Guess(colors))); }
private void createTestGame(){ final int nrColors = 6; ColorManager manager = new ColorManager(nrColors); final int nrColumns = 4; Table table = new Table(nrColumns, manager); secret = new Color[nrColumns]; Color color = manager.firstColor(); for (int i = 0; i < nrColumns; i++) { secret[i] = color; color = manager.nextColor(color); } game = new Game(table, secret); }
public void addNewGuess(Row row) { if (isFinished()) { throw new IllegalArgumentException("You can not guess on a finished game."); } final int positionMatch = secretRow.nrMatchingPositions(row.positions); final int colorMatch = secretRow.nrMatchingColors(row.positions); row.setMatch(positionMatch, colorMatch); table.addRow(row); if (itWasAWinningGuess(positionMatch)) { finished = true; } }
private Guess createSecret() { Color[] colors = new Color[NR_COLUMNS]; int count = 0; Color color = manager.firstColor(); while (count < NR_COLORS - NR_COLUMNS) { color = manager.nextColor(color); count++; } for (int i = 0; i < NR_COLUMNS; i++) { colors[i] = color; color = manager.nextColor(color); } return new Guess(colors); }
@Test public void generateAllGuesses() { int numberOfGuesses = 0; ColorManager manager = new ColorManager(NR_COLORS); Table table = new Table(NR_COLUMNS, manager); Guesser guesser = new UniqueGuesser(table); while (guesser.nextGuess() != Guesser.none) { numberOfGuesses++; } Assert.assertEquals(6 * 5 * 4 * 3, numberOfGuesses); }
@Test public void generateAllGuesses() { int numberOfGuesses = 0; ColorManager manager = new ColorManager(NR_COLORS); Table table = new Table(NR_COLUMNS,manager); Guesser guesser = new GeneralGuesser(table); while (guesser.nextGuess() != Guesser.none) { numberOfGuesses++; } Assert.assertEquals(6*6*6*6,numberOfGuesses); } }
@Test public void keepsGettingTillItBleedsOut(){ int numberOfGuesses = 0; ColorManager manager = new ColorManager(NR_COLORS); Table table = new Table(NR_COLUMNS, manager); Guesser guesser = new UniqueGuesser(table); while (guesser.guess() != Row.none) { numberOfGuesses++; } } }
@Test(expected = IllegalArgumentException.class) public void throwsExceptionForFinishedGame() { createTestGame(); game.addNewGuess(new Row(secret)); game.addNewGuess(new Row(secret)); } }
public static String pprint(Row row) { String string = ""; PrintableRow pRow = new PrintableRow(row); for (int i = 0; i < pRow.nrOfColumns(); i++) { string += colorToChar(pRow.position(i)); } string += " "; string += pRow.matchedPositions(); string += "/"; string += pRow.matchedColors(); return string; } }
private Guess firstIntervalStart(Color[] colors) { for (int i = 0; i < colors.length; i++) { colors[i] = manager.firstColor(); } return new Guess(colors); }
@Override protected Color[] nextGuess() { Color[] guess = super.nextGuess(); while (isNotUnique(guess)) { guess = super.nextGuess(); } return guess; }
@Test public void twoColorsWrongPositionOtherGoodPosition() { ColorManager manager = new ColorManager(NR_COLORS, Color::new); Color[] colors = firstColors(); Row row = new Row(new Guess(colors), NR_COLUMNS - 2, 2); Color swap = colors[0]; colors[0] = colors[1]; colors[1] = swap; Assert.assertTrue(row.matches(new Guess(colors))); } }
@Test public void keepsGettingTillItBleedsOut() { int numberOfGuesses = 0; ColorManager manager = new ColorManager(NR_COLORS, Color::new); Table table = new Table(NR_COLUMNS, manager); Guesser guesser = new UniqueGuesser(table); while (guesser.guess() != Guess.none) { numberOfGuesses++; } } }
@Test public void canAddNewGuess() { createTestGame(); game.addNewGuess(new Row(secret)); }