diff --git a/.gitignore b/.gitignore index ec80fd0..1a2155f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,9 @@ .idea +*.ipr +*.iws *.iml target .DS_Store .gradle/ build/ +out/ diff --git a/build.gradle b/build.gradle index cd0251e..bf0d1b7 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,7 @@ apply plugin: 'java' apply plugin: 'application' apply plugin: 'maven' +apply plugin: 'idea' mainClassName = 'com.hangman.HangmanRunner' group = 'Hangman' diff --git a/src/main/java/com/hangman/players/YourPlayer.java b/src/main/java/com/hangman/players/YourPlayer.java index df4a96a..3300249 100644 --- a/src/main/java/com/hangman/players/YourPlayer.java +++ b/src/main/java/com/hangman/players/YourPlayer.java @@ -2,11 +2,52 @@ import com.hangman.Player; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import java.util.Random; public class YourPlayer implements Player { - @Override - public char getGuess(List currentClue) { - return 'a'; + + private List guessedChars = new ArrayList<>(); + + private List highFrequencyCharSet = Arrays.asList('e', 't', 'a', 'o', 'i', 'n', 's', 'h', 'r', 'd', 'l', 'c', 'u', 'm', 'w', 'f', 'g', 'y', 'p', 'b', 'v', 'k', 'j', 'x', 'q'); + + private int getHighFrequencyCharSetSize() { + return highFrequencyCharSet.size(); + } + + public List getHighFrequencyCharSet() { + return highFrequencyCharSet; + } + + public void setHighFrequencyCharSet(List highFrequencyCharSet) { + this.highFrequencyCharSet = highFrequencyCharSet; + } + + @Override public char getGuess(List currentClue) { + Character guess = getNextCharacter(); + guessedChars.add(guess); + return guess; } + + private char getNextCharacter() { + Character next = 'e'; + for (Character character : highFrequencyCharSet) { + if (!guessedChars.contains(character)) { + next = character; + break; + } + } + return next; + } + + /* + private Character getNextCharacter() { + Character next = highFrequencyCharSet.get(new Random().nextInt(getHighFrequencyCharSetSize())); + while (guessedChars.contains(next)) { + next = getNextCharacter(); + } + return next; + }*/ } diff --git a/src/test/java/com/hangman/players/YourPlayerTest.java b/src/test/java/com/hangman/players/YourPlayerTest.java index b1e80e5..fbaa8e0 100644 --- a/src/test/java/com/hangman/players/YourPlayerTest.java +++ b/src/test/java/com/hangman/players/YourPlayerTest.java @@ -1,34 +1,60 @@ package com.hangman.players; import org.junit.Test; + import java.util.Arrays; -import static org.junit.Assert.assertEquals; + +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertTrue; public class YourPlayerTest { - @Test - public void guessesAWhenThereAreNoSuccessfulCharactersGuessedYet() { + + @Test public void guessesACharacterWhenThereAreNoSuccessfulCharactersGuessedYet() { YourPlayer player = new YourPlayer(); + player.setHighFrequencyCharSet(Arrays.asList('a', 'b', 'c')); + char guess = player.getGuess(Arrays.asList(null, null, null)); - assertEquals('a', guess); + assertTrue(player.getHighFrequencyCharSet().contains(guess)); } - @Test - public void guessesAWhenThereAreSuccessfulCharactersGuessedThatAreNotA() { + @Test public void guessesTWhenThereAreSuccessfulCharactersGuessedThatAreNotE() { YourPlayer player = new YourPlayer(); - char guess = player.getGuess(Arrays.asList('m', null, 'n')); + char c1 = player.getGuess(Arrays.asList(null, null, null)); + + assertTrue(player.getHighFrequencyCharSet().contains(c1)); - assertEquals('a', guess); + char c2 = player.getGuess(Arrays.asList('e', null, null)); + + assertTrue(player.getHighFrequencyCharSet().contains(c2)); } @Test - public void guessesAWhenAIsThereAreAsInTheClueAsWell() { + public void guessesADifferentCharacterThanTheOnePresentInCurrentClue() { + YourPlayer player = new YourPlayer(); + + char c = player.getGuess(Arrays.asList('a', 'b', null)); + + assertNotEquals(c, 'a'); + + assertNotEquals(c, 'b'); + } + + @Test public void guessTheFirstCharAsEAndSecondCharAsTAndThirdCharAsA() { YourPlayer player = new YourPlayer(); - char guess = player.getGuess(Arrays.asList(null, 'a', null)); + char c1 = player.getGuess(Arrays.asList(null, null, null)); + + char c2 = player.getGuess(Arrays.asList('e', null, null)); + + char c3 = player.getGuess(Arrays.asList('t', null, null)); + + assertTrue(player.getHighFrequencyCharSet().contains(c1)); + + assertTrue(player.getHighFrequencyCharSet().contains(c2)); - assertEquals('a', guess); + assertTrue(player.getHighFrequencyCharSet().contains(c3)); } }