Issue
I need help with this question:
A dice rolling game is played with two six-sided dice. A user playing the game, will roll the two dice and two random numbers between one and six will be generated. The sum of the two numbers will be used to decide the next step.
If the sum is 2,3 or 12 then the player wins. If the sum is 7 or 11 then he/she loses. If the sum is 4, 5, 6, 8, 9 or 10 then the program automatically rolls the dice again until the player wins or loses.
After every dice roll, the player will be prompted for an input. The player should decide if the game should continue or not.
The amount of games won and lost should also be displayed after every dice roll.
I have managed to get the first part to work but unable to work out how to prompt the user if they wish to continue or how many games they have won/lost
public class DiceGame {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
while (true) {
int dice1=(int)(Math.random()*6+1);
int dice2=(int)(Math.random()*6+1);
int sum = dice1 + dice2;
System.out.println("Roll: total = " + sum);
if (sum==2 || sum==3 || sum==12) {
System.out.println("Sorry with a " + sum + " you loose :(");
break;
}
else if(sum==7 || sum==11) {
System.out.println("With a " + sum + " you win :)");
break;
}
}
}
}
Solution
Scanner can be used to prompt user to ask whether he/she wants to continue or not.
You can even track no. of times dices were rolled.
import java.util.Scanner;
public class DiceGame {
public static int attempt = 1;
/**
* @param args
* the command line arguments
*/
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int dice1 = (int) (Math.random() * 6 + 1);
int dice2 = (int) (Math.random() * 6 + 1);
int sum = dice1 + dice2;
while (true) {
System.out.println();
System.out.println("Rolling dice for " + attempt + " time!");
dice1 = (int) (Math.random() * 6 + 1);
dice2 = (int) (Math.random() * 6 + 1);
sum = dice1 + dice2;
System.out.println("Roll: total = " + sum);
if (sum == 2 || sum == 3 || sum == 12) {
System.out.println("Sorry with a " + sum + " you loose :(!");
System.out.println();
break;
} else if (sum == 7 || sum == 11) {
System.out.println("With a " + sum + " you win :)!");
System.out.println();
break;
}
System.out.println();
System.out.println("Do you wish to continue? Press 'y' for YES or ANY key for EXIT");
if (!scanner.next().equalsIgnoreCase("y")) {
break;
}
attempt++;
}
System.out.println("Thanks for playing dice game, you rolled the dice " + attempt + " times!");
}
}
EDIT:
If you want to roll the dices automatically when the sum is 4 5 6 8 9 10 then you would no more need Scanner i.e. user input whether to continue or not.
Here is the solution for the same.
public class DiceGame {
public static int attempt = 1;
public static void main(String[] args) {
int dice1 = 0;
int dice2 = 0;
int sum = 0;
while (true) {
System.out.println();
System.out.println("Rolling dice for " + attempt + " time!");
dice1 = (int) (Math.random() * 6 + 1);
dice2 = (int) (Math.random() * 6 + 1);
sum = dice1 + dice2;
System.out.println("Roll: total = " + sum);
if (sum == 2 || sum == 3 || sum == 12) {
System.out.println("Sorry with a " + sum + " you loose :(!");
System.out.println();
break;
} else if (sum == 7 || sum == 11) {
System.out.println("With a " + sum + " you win :)!");
System.out.println();
break;
// this will roll the dices automatically
// when sum is 4, 5, 6, 8, 9 or 10
} else {
System.out.println();
System.out.println("With " + sum + " dices are rolled again automatically!!");
attempt++;
}
}
System.out.println("Thanks for playing dice game, you rolled the dice " + attempt + " times!");
}
}
Sample Run
Rolling dice for 1 time!
Roll: total = 4
With a 4, dices are rolled again automatically!!
Rolling dice for 2 time!
Roll: total = 6
With a 6, dices are rolled again automatically!!
Rolling dice for 3 time!
Roll: total = 2
Sorry with a 2 you loose :(!
Thanks for playing dice game, you rolled the dice 3 times!
Answered By - JRG