Bec
Bec

Reputation: 59

How do I ask if the user would like to continue the game after each dice roll in java using netbeans?

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;
            }
        }
    }
}

Upvotes: 3

Views: 1643

Answers (4)

azro
azro

Reputation: 54148

You can use a do{}while(); loop, it will play once, and then ask the user to it again :

Scanner sc = new Scanner(System.in);
String input = "";
do {
    int // ...

    System.out.println("Roll: total = " + sum);

    if (sum == 2 || sum == 3 || sum == 12) {
        // ...
    } else if (sum == 7 || sum == 11) {    
        // ...
    }

    System.out.println("If you want to continue, write 'y' : ");
    input = sc.nextLine();
} while (input.equalsIgnoreCase("y"));

Upvotes: 1

JRG
JRG

Reputation: 4187

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!

Upvotes: 3

user7627726
user7627726

Reputation:

I created a playAgainMessage method which returns an int. This decides whether or not the user will play again. Check it out:

import java.util.Scanner;

public class DiceGame {
    private static final int PLAY = 1;
    private static final int DO_NOT_PLAY = 2;
    private static int choice = 1;

    public static void main(String[] args) {
        while (choice == PLAY) {
            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 :(");
                choice = playAgainMessage();
            }
            else if(sum==7 || sum==11) {
                System.out.println("With a " + sum + " you win :)");
                choice = playAgainMessage();
            }
        }
        if (choice == DO_NOT_PLAY) {
            System.out.println("Good bye...");
        }
    }

    private static int playAgainMessage() {
        Scanner input = new Scanner(System.in);
        System.out.println("Would you like to play again? '1' for yes, '2' for no");
        int choice = input.nextInt();
        input.close();
        if(choice == PLAY){
            System.out.println("Rolling...");
            return PLAY;
        } else {
            return DO_NOT_PLAY;
        }
    }
}

You can call the playAgainMessage method whenever you'd like, which makes it nice and easy to read.

This will keep playing until the user inputs something other than '1'. Try running it to see exact output.

Upvotes: 1

Supun Amarasinghe
Supun Amarasinghe

Reputation: 1443

You can use java Scanner class to prompt user for inputs.

Inside your while loop, prompt user for the inputs. You may need to modify your while loop condition.

Scanner sc = new Scanner(System.in);
int i = sc.nextInt();

Based on the user's input, use 'brake' to exit from the loop. That should do it.

Scanner Reference

Upvotes: 2

Related Questions