/** * Set the first possible guess. This method is used during the construction process. */ @Override protected void setFirstGuess() { int i = lastGuess.length-1; for (Color color = table.manager.firstColor(); i >= 0; color = table.manager.nextColor(color)) { lastGuess[i--] = color; } }
private void stepTheLastColor(Color[] colors) { colors[NR_COLUMNS - 1] = manager.nextColor(colors[NR_COLUMNS - 1]); }
private Color[] createSecret() { Color[] secret = new Color[nrColumns]; int count = 0; Color color = manager.firstColor(); while (count < nrColors - nrColumns) { color = manager.nextColor(color); count++; } for (int i = 0; i < nrColumns; i++) { secret[i] = color; color = manager.nextColor(color); } return secret; }
private Color[] nextNonFirstGuess() { int i = 0; boolean guessFound = false; while (i < table.nrColumns && !guessFound) { if (manager.thereIsNextColor(lastGuess[i])) { lastGuess[i] = manager.nextColor(lastGuess[i]); guessFound = true; } else { lastGuess[i] = manager.firstColor(); i++; } } if (guessFound) { return lastGuess; } else { return none; } }
private Color[] firstColors() { Color[] colors = new Color[NR_COLUMNS]; int i = 0; for (Color color = manager.firstColor(); i < colors.length; color = manager.nextColor(color)) { colors[i++] = color; } return colors; }
@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); }
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); }
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); }
/** * Calculate the next guess and return a new Guess object. * The guesses are ordered in the order of the colors as * specified by the color manager. * * @param manager that specifies the order of the colors * an can return the next color after one color. * @return the guess that comes after this guess. */ public Guess nextGuess(ColorManager manager) { final Color[] colors = Arrays.copyOf(this.colors, nrOfColumns()); int i = 0; boolean guessFound = false; while (i < colors.length && !guessFound) { if (manager.thereIsNextColor(getColor(i))) { colors[i] = manager.nextColor(colors[i]); guessFound = true; } else { colors[i] = manager.firstColor(); i++; } } if (guessFound) { return new Guess(colors); } else { return Guess.none; } }
@Test public void noColorHasNoNextColor() { ColorManager manager = new ColorManager(NR_COLORS, Color::new); Assert.assertNull(manager.nextColor(Color.none)); } }
@Test public void noColorHasNoNextColor() { ColorManager manager = new ColorManager(NR_COLORS); Assert.assertNull(manager.nextColor(Color.none)); } }
@Test public void allButOneColorsAndPositionsMatch() { ColorManager manager = new ColorManager(NR_COLORS); Color[] positions = new Color[NR_COLUMNS]; int i = 0; for (Color color = manager.firstColor(); i < positions.length; color = manager.nextColor(color)) { positions[i++] = color; } Row row = new Row(positions); positions[NR_COLUMNS - 1] = manager.nextColor(positions[NR_COLUMNS - 1]); row.setMatch(NR_COLUMNS - 1, 0); Assert.assertTrue(row.guessMatches(positions)); }
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); }
@Test public void noNextColorIsNullWhenThereIsOne() { ColorManager manager = new ColorManager(NR_COLORS, Color::new); Color color = manager.firstColor(); while (manager.thereIsNextColor(color)) { Assert.assertNotNull(color = manager.nextColor(color)); } }
@Test public void noNextColorIsNullWhenThereIsOne() { ColorManager manager = new ColorManager(NR_COLORS); Color color = manager.firstColor(); while ( manager.thereIsNextColor(color)) { Assert.assertNotNull(color = manager.nextColor(color)); } }
private Guess nextIntervalStart(Color[] colors) { final int index = colors.length - 1; int step = NR_COLORS / nrThreads; if (step == 0) { step = 1; } while (step > 0) { if (manager.thereIsNextColor(colors[index])) { colors[index] = manager.nextColor(colors[index]); step--; } else { return Guess.none; } } Guess guess = new Guess(colors); while (!guess.isUnique()) { guess = guess.nextGuess(manager); } return guess; } }
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 allColorsAndPositionsMatch() { ColorManager manager = new ColorManager(NR_COLORS); Color[] positions = new Color[NR_COLUMNS]; int i = 0; for (Color color = manager.firstColor(); i < positions.length; color = manager.nextColor(color)) { positions[i++] = color; } Row row = new Row(positions); row.setMatch(NR_COLUMNS, 0); Assert.assertTrue(row.guessMatches(positions)); }
@Test public void twoColorsWrongPositionOtherGoodPosition() { ColorManager manager = new ColorManager(NR_COLORS); Color[] positions = new Color[NR_COLUMNS]; int i = 0; for (Color color = manager.firstColor(); i < positions.length; color = manager.nextColor(color)) { positions[i++] = color; } Row row = new Row(positions); Color swap = positions[0]; positions[0] = positions[1]; positions[1] = swap; row.setMatch(NR_COLUMNS - 2, 2); Assert.assertTrue(row.guessMatches(positions)); }