Dice game

The problem

Write a program that plays a simple dice game between the computer and the user. When the program runs, a loop should repeat 10 times. Each iteration of the loop should do the following:

  • Generate a random integer in the range of 1 through 6. This is the value of the computer’s die.
  • Generate another random integer in the range of 1 through 6. This is the value of the user’s die.
  • The die with the highest value wins. In case of a tie, there is no winner for that particular roll of the dice.

As the loop iterates, the program should keep count of the number of times the computer wins, and the number of times that the user wins. It should also display the results of each roll.

After the loop performs all of its iterations, the program should display who was the grand winner: the computer or the user.

Breaking it down

Create constant

private static int numberOfGames = 10;

Initialize variables

int computerWins = 0, computerRoll = 0;
int userWins = 0, userRoll = 0;
int tiedGames = 0;

Create dice roll method

/**
 * Method should return a number that represents a
 * side of a die in a random format.
 *
 * @return number
 */
static int rollDie() {
    Random randValue = new Random();
    return randValue.nextInt(6) + 1;
}

Play game

for (int round = 0; round < numberOfGames; round++) {

    computerRoll = rollDie();
    userRoll = rollDie();

    // determine who won the game
    if (computerRoll == userRoll) {
        tiedGames++;
    } else {
        if (computerRoll > userRoll) {
            computerWins++;
        } else {
            userWins++;
        }
    }
}

Display results

// Display the results.
System.out.println("Computer...." + computerWins);
System.out.println("User........" + userWins);
System.out.println("Ties........" + tiedGames);

Determine grand winner, display result

// Determine the grand winner.
if (computerWins > userWins) {
    System.out.println("You got beat by a computer!");
} else {
    if (computerWins < userWins) {
        System.out.println("You beat the computer!");
    } else {
        System.out.println("The game has ended in a tie!");
    }
}

Output

Computer....4
User........5
Ties........1
You beat the computer!

Unit tests

@RunWith(Parameterized.class)
public class DiceGameTest {

    @Parameterized.Parameters
    public static List<Object[]> data() {
        return Arrays.asList(new Object[100][0]);
    }

    @Test
    public void test_roll_die() {
        assertThat(DiceGame.rollDie(), is(lessThan(7)));
    }

}

Level Up

  • After each roll, display the dice as ASCII art
  • Allow the user to specify when done with game
  • Refactor code so that determining win is in its own method, write a unit test
  • Add a bet amount