diff --git a/src/main/java/victor/training/trivia/Game.java b/src/main/java/victor/training/trivia/Game.java index 987a8ccc..02c1d807 100644 --- a/src/main/java/victor/training/trivia/Game.java +++ b/src/main/java/victor/training/trivia/Game.java @@ -111,7 +111,7 @@ private String currentCategory() { return "Rock"; } - public boolean wasCorrectlyAnswered() { + public void correctAnswer() { if (inPenaltyBox[currentPlayer]) { if (isGettingOutOfPenaltyBox) { System.out.println("Answer was correct!!!!"); @@ -120,22 +120,22 @@ public boolean wasCorrectlyAnswered() { + " now has " + purses[currentPlayer] + " Gold Coins."); - + inPenaltyBox[currentPlayer] = false; boolean winner = didPlayerWin(); - currentPlayer++; - if (currentPlayer == players.size()) currentPlayer = 0; + if (winner) { + currentPlayer++; + if (currentPlayer == players.size()) currentPlayer = 0; + } - return winner; } else { currentPlayer++; if (currentPlayer == players.size()) currentPlayer = 0; - return true; } } else { - System.out.println("Answer was corrent!!!!"); + System.out.println("Answer was correct!!!!"); purses[currentPlayer]++; System.out.println(players.get(currentPlayer) + " now has " @@ -143,21 +143,26 @@ public boolean wasCorrectlyAnswered() { + " Gold Coins."); boolean winner = didPlayerWin(); - currentPlayer++; - if (currentPlayer == players.size()) currentPlayer = 0; + if (winner) { + currentPlayer++; + if (currentPlayer == players.size()) currentPlayer = 0; + } - return winner; } } - public boolean wrongAnswer() { + @Override + public boolean isGameOver() { + return !didPlayerWin(); + } + + public void wrongAnswer() { System.out.println("Question was incorrectly answered"); System.out.println(players.get(currentPlayer) + " was sent to the penalty box"); inPenaltyBox[currentPlayer] = true; currentPlayer++; if (currentPlayer == players.size()) currentPlayer = 0; - return true; } diff --git a/src/main/java/victor/training/trivia/GameBetter.java b/src/main/java/victor/training/trivia/GameBetter.java index 092fb830..343ddb15 100644 --- a/src/main/java/victor/training/trivia/GameBetter.java +++ b/src/main/java/victor/training/trivia/GameBetter.java @@ -3,32 +3,6 @@ import java.util.ArrayList; import java.util.List; -class Player { - private final String name; - private int place; - private int purse; - private boolean inPenaltyBox; - - public Player(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - public int getPlace() { - return place; - } - - public void advance(int roll) { - place += roll; - if (place >= GameBetter.BOARD_SIZE) { - place -= GameBetter.BOARD_SIZE; - } - } -} - public class GameBetter implements IGame { public static final int BOARD_SIZE = 12; private final QuestionRepository questionRepository = new QuestionRepository(); @@ -38,16 +12,10 @@ public class GameBetter implements IGame { private int[] purses = new int[6]; private boolean[] inPenaltyBox = new boolean[6]; - int currentPlayer = 0; - boolean isGettingOutOfPenaltyBox; + private int currentPlayer = 0; public void addPlayer(String playerName) { players.add(new Player(playerName)); - purses[players.size()] = 0; // TODO - inPenaltyBox[players.size()] = false; // TODO - - // TODO e un bug ascuns in cod. Gaseste-l - System.out.println(playerName + " was added"); System.out.println("They are player number " + players.size()); } @@ -56,13 +24,12 @@ public void roll(int roll) { System.out.println(currentPlayer().getName() + " is the current player"); System.out.println("They have rolled a " + roll); - if (inPenaltyBox[currentPlayer]) { + if (currentPlayer().isInPenaltyBox()) { if (roll % 2 == 0) { System.out.println(currentPlayer().getName() + " is not getting out of the penalty box"); - isGettingOutOfPenaltyBox = false; return; } - isGettingOutOfPenaltyBox = true; + currentPlayer().free(); System.out.println(currentPlayer().getName() + " is getting out of the penalty box"); } currentPlayer().advance(roll); @@ -71,66 +38,53 @@ public void roll(int roll) { askQuestion(); } - private Player currentPlayer() { - return players.get(currentPlayer); - } - - private void askQuestion() { - System.out.println(questionRepository.nextQuestion(currentPlayer().getPlace())); - } - -// TODO e un nume misleading care e ? - public boolean wasCorrectlyAnswered() { - if (inPenaltyBox[currentPlayer]) { - if (isGettingOutOfPenaltyBox) { - System.out.println("Answer was correct!!!!"); - purses[currentPlayer]++; - System.out.println(currentPlayer().getName() - + " now has " - + purses[currentPlayer] - + " Gold Coins."); - - boolean winner = didPlayerWin(); - currentPlayer++; - if (currentPlayer == players.size()) currentPlayer = 0; - - return winner; - } else { - currentPlayer++; - if (currentPlayer == players.size()) currentPlayer = 0; - return true; - } - + public void correctAnswer() { + if (isGameOver()) { + return; + } + if (currentPlayer().isInPenaltyBox()) { + nextPlayer(); } else { + System.out.println("Answer was correct!!!!"); + currentPlayer().reward(); + System.out.println(currentPlayer().getName() + " now has " + currentPlayer().getPurse() + " Gold Coins."); - System.out.println("Answer was corrent!!!!"); - purses[currentPlayer]++; - System.out.println(currentPlayer().getName() - + " now has " - + purses[currentPlayer] - + " Gold Coins."); - - boolean winner = didPlayerWin(); - currentPlayer++; - if (currentPlayer == players.size()) currentPlayer = 0; - - return winner; + if (!isGameOver()) { + nextPlayer(); + } } } - public boolean wrongAnswer() { + public void wrongAnswer() { + if (isGameOver()) { + return; + } + System.out.println("Question was incorrectly answered"); System.out.println(currentPlayer().getName() + " was sent to the penalty box"); - inPenaltyBox[currentPlayer] = true; + currentPlayer().punish(); - currentPlayer++; - if (currentPlayer == players.size()) currentPlayer = 0; - return true; + nextPlayer(); + } + + @Override + public boolean isGameOver() { + return currentPlayer().isWinner(); + } + + private Player currentPlayer() { + return players.get(currentPlayer); } + private void askQuestion() { + System.out.println(questionRepository.nextQuestion(currentPlayer().getPlace())); + } - private boolean didPlayerWin() { - return !(purses[currentPlayer] == 6); + private void nextPlayer() { + currentPlayer++; + if (currentPlayer == players.size()) { + currentPlayer = 0; + } } } diff --git a/src/main/java/victor/training/trivia/IGame.java b/src/main/java/victor/training/trivia/IGame.java index 27cc40ea..850a179b 100644 --- a/src/main/java/victor/training/trivia/IGame.java +++ b/src/main/java/victor/training/trivia/IGame.java @@ -6,8 +6,9 @@ public interface IGame { void roll(int roll); - boolean wasCorrectlyAnswered(); + void correctAnswer(); - boolean wrongAnswer(); + void wrongAnswer(); + boolean isGameOver(); } \ No newline at end of file diff --git a/src/main/java/victor/training/trivia/Player.java b/src/main/java/victor/training/trivia/Player.java new file mode 100644 index 00000000..43b283b0 --- /dev/null +++ b/src/main/java/victor/training/trivia/Player.java @@ -0,0 +1,51 @@ +package victor.training.trivia; + +class Player { + private final String name; + private int place; + private int purse; + private boolean inPenaltyBox; + + public Player(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public int getPlace() { + return place; + } + + public void advance(int roll) { + place += roll; + if (place >= GameBetter.BOARD_SIZE) { + place -= GameBetter.BOARD_SIZE; + } + } + + public void reward() { + purse++; + } + + public int getPurse() { + return purse; + } + + public void punish() { + inPenaltyBox = true; + } + + public boolean isInPenaltyBox() { + return inPenaltyBox; + } + + public void free() { + inPenaltyBox = false; + } + + public boolean isWinner() { + return purse == 6; + } +} diff --git a/src/test/java/trivia/GameTest.java b/src/test/java/trivia/GameTest.java index 3d716a00..3a90d496 100644 --- a/src/test/java/trivia/GameTest.java +++ b/src/test/java/trivia/GameTest.java @@ -29,25 +29,25 @@ private String extractOutput(Random rand, IGame aGame) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); try (PrintStream inmemory = new PrintStream(baos)) { System.setOut(inmemory); - - + aGame.addPlayer("Chet"); aGame.addPlayer("Pat"); aGame.addPlayer("Sue"); - boolean notAWinner = false; + boolean gameNotOver = false; do { aGame.roll(rand.nextInt(5) + 1); if (rand.nextInt(9) == 7) { - notAWinner = aGame.wrongAnswer(); + aGame.wrongAnswer(); } else { - notAWinner = aGame.wasCorrectlyAnswered(); + aGame.correctAnswer(); } + + gameNotOver = !aGame.isGameOver(); - } while (notAWinner); + } while (gameNotOver); } - String output = new String(baos.toByteArray()); - return output; + return baos.toString(); } }