for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
package com.fjalvarez.tdd.darts;
public class Darts {
enum Multiplier {
DOUBLE, TRIPLE
}
private int dartsLeft = 3;
private int turn = 1;
private int score = 301;
private int lastTurnScore = score;
private boolean isFinished = false;
public int score() {
return score;
public void dart(int i) {
computeScore(i ,null);
public void dart(int score, Multiplier multiplier) {
int mult = 0;
switch (multiplier) {
case DOUBLE:
mult = 2;
break;
case TRIPLE:
mult = 3;
int dartScore = mult*score;
computeScore(dartScore, multiplier);
private void computeScore(int dartScore, Multiplier multiplier) {
int newScore = score - dartScore;
if (newScore == 0 && multiplier.equals(Multiplier.DOUBLE)) {
isFinished = true;
return;
if ((newScore == 1 && dartsLeft != 1) || (newScore <0)) {
newScore = lastTurnScore;
dartsLeft = 3;
turn++;
} else if (dartsLeft == 1) {
lastTurnScore = newScore;
} else {
dartsLeft--;
score = newScore;
public int dartsLeft() {
return dartsLeft;
public int getTurn() {
return turn;
public boolean isFinished() {
return isFinished;