Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 17 additions & 12 deletions src/main/java/victor/training/trivia/Game.java
Original file line number Diff line number Diff line change
Expand Up @@ -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!!!!");
Expand All @@ -120,44 +120,49 @@ 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 "
+ purses[currentPlayer]
+ " 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;
}


Expand Down
124 changes: 39 additions & 85 deletions src/main/java/victor/training/trivia/GameBetter.java
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -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());
}
Expand All @@ -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);
Expand All @@ -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;
}
}
}
5 changes: 3 additions & 2 deletions src/main/java/victor/training/trivia/IGame.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@ public interface IGame {

void roll(int roll);

boolean wasCorrectlyAnswered();
void correctAnswer();

boolean wrongAnswer();
void wrongAnswer();

boolean isGameOver();
}
51 changes: 51 additions & 0 deletions src/main/java/victor/training/trivia/Player.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
16 changes: 8 additions & 8 deletions src/test/java/trivia/GameTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
}