For this lab you will write a Java program that plays the game Poker Dice. In th
ID: 3762638 • Letter: F
Question
For this lab you will write a Java program that plays the game Poker Dice. In this game, five dice are rolled and scored as if they were a hand of playing cards. The game goes through two separate phases. In the first phase, a "hand" of dice is presented to the player. The player then selects which dice he wants to keep and which he wants to re-roll. Once that decision is finished, all of the dice that the player has marked to re-roll are re-rolled and the final "hand" of dice is displayed. The hand should then be scored according to the rules of Poker Dice (given below) and the result displayed on the screen.
Scoring Poker Dice
The following table shows the values of different Poker Dice hands in order (i.e. Five of a Kind beats Four of a Kind, Four of a Kind beats Full House, etc.):
Note that for scoring, only the highest score is reported. So a hand like [5, 5, 5, 5, 5] should only be reported as "Five of a Kind" even though it also fits the definition of "Four of a Kind" and "Two Pair" etc. The idea behind scoring is that the hand is scored with only the best possible result, and scores are showed in descending order in the table above.
In this assignment you are required to implement a scoring function that scores all of the above hands EXCEPT for the Straight. Your code must correctly score 5 of a kind, 4 of a kind, full house, three of kind, two pair, one pair, and highest card X "hands" of dice. For 2 points of extra credit, you may add the ability to score Straights to your scoring function. Indicate in the comments of your code that your code scores Straights as well as the other hands.
For this assignment you must start with the following "skeleton" of Java code. Import this into your Eclipse workspace and fill in the methods as directed. For this assignment you WILL want to add extra methods beyond the methods defined in the skeleton. Feel free to add any methods you find useful, but make sure that you add comments indicating what they do following the form of the rest of the comments in the code.
Project10.java
NOTE: To generate a random number between 1 and 6, use the Math.random() function as previously used in lab assignments. In this case, a random roll between 1 and 6 would be produced by this snippet of code:
int roll = (int)(Math.random()*6)+1;
Project 10 Sample Output
This is a sample transcript of what your program should do. Items in bold are user input and should not be put on the screen by your program.
Your current dice: 4 2 1 4 6
Select a die to re-roll (-1 to keep remaining dice): 1
Your current dice: 4 0 1 4 6
Select a die to re-roll (-1 to keep remaining dice): 2
Your current dice: 4 0 0 4 6
Select a die to re-roll (-1 to keep remaining dice): 4
Your current dice: 4 0 0 4 0
Select a die to re-roll (-1 to keep remaining dice): -1
Keeping remaining dice...
Rerolling...
Your final dice: 4 2 3 4 6
One pair!
Would you like to play again [Y/N]?: y
Your current dice: 5 6 6 3 2
Select a die to re-roll (-1 to keep remaining dice): 0
Your current dice: 0 6 6 3 2
Select a die to re-roll (-1 to keep remaining dice): 3
Your current dice: 0 6 6 0 2
Select a die to re-roll (-1 to keep remaining dice): 4
Your current dice: 0 6 6 0 0
Select a die to re-roll (-1 to keep remaining dice): -1
Keeping remaining dice...
Rerolling...
Your final dice: 6 6 6 5 4
Three of a kind!
Would you like to play again [Y/N]?: y
Your current dice: 1 2 6 2 2
Select a die to re-roll (-1 to keep remaining dice): 0
Your current dice: 0 2 6 2 2
Select a die to re-roll (-1 to keep remaining dice): 2
Your current dice: 0 2 0 2 2
Select a die to re-roll (-1 to keep remaining dice): -1
Keeping remaining dice...
Rerolling...
Your final dice: 1 2 6 2 2
Three of a kind!
Would you like to play again [Y/N]?: y
Your current dice: 3 4 5 3 1
Select a die to re-roll (-1 to keep remaining dice): 0
Your current dice: 0 4 5 3 1
Select a die to re-roll (-1 to keep remaining dice): -1
Keeping remaining dice...
Rerolling...
Your final dice: 1 4 5 3 1
One pair!
Would you like to play again [Y/N]?: n
Goodbye!
Note that your output depends on the choices made by the user. Remember to check that the user inputs a valid index for a die to re-roll (between 0 and 4, or -1 to quit) and that the user inputs either a Y or an N when asked to play again. The play again response should accept either capital or lower-case letters. A second transcript might look like this (note that this transcript implements the extra credit that allows you to score a Straight on this assignment) :
Your current dice: 3 1 5 4 2
Select a die to re-roll (-1 to keep remaining dice): 6
Error: Index must be between 0 and 4 (-1 to quit)!
Select a die to re-roll (-1 to keep remaining dice): -2
Error: Index must be between 0 and 4 (-1 to quit)!
Select a die to re-roll (-1 to keep remaining dice): -1
Keeping remaining dice...
Rerolling...
Your final dice: 3 1 5 4 2
Straight!
Would you like to play again [Y/N]?: Q
ERROR! Only 'Y' or 'N' allowed as input!
Would you like to play again [Y/N]?: q
ERROR! Only 'Y' or 'N' allowed as input!
Would you like to play again [Y/N]?: n
Goodbye!
HINT: Notice that the skeleton of code includes a method named getCounts() that provides an array of counts for each value in your dice set. A number that shows up 5 times will have a count of 5. A number that shows up 4 times will have a count of 4. Think about how these counts apply to all of the different possible combinations detailed above.
EXTRA CREDIT HINT: It is easiest to figure out whether your dice are a Straight or not if you first put them into sorted order. For this you can either use the Bubble Sort algorithm discussed in Closed Lab OR you can look up the library method Arrays.sort() in the Java documentation. As a suggestion, consider researching and using Arrays.sort() rather than coding your own sorting algorithm for this assignment.
[5, 5, 5, 5, 5] Four of a Kind Four of the five dice show the same value [1, 2, 1, 1, 1]
[4, 4, 4, 3, 4] Full House Three of the five dice show the same value, the other two show a different value [1, 2, 2, 1, 1]
[3, 3, 3, 5, 5] Three of a Kind Three of the five dice show the same value, the other two show different values [1, 2, 3, 1, 1]
[3, 3, 3, 2, 5] Straight All five dice together show a sequence of values 1-5 or 2-6 [2, 3, 1, 5, 4]
[6, 3, 2, 4, 5] Two Pair Two of the five dice show the same value, and two other dice show a different shared value [1, 2, 2, 1, 3]
[3, 5, 6, 3, 6] One Pair Two of the five dice show the same value, the other dice show different values [1, 2, 2, 3, 4]
[3, 5, 6, 3, 1] Highest Card X If none of the above hands exist, then the score for the hand is "Highest Card X" where X is the highest value in the list [1, 2, 3, 5, 6] - Highest Card 6
[1, 2, 6, 4, 5] - Highest Card 6
Explanation / Answer
Prgdice.java
import java.util.Scanner;
public class Prgdice {
public static void main(String[] args) {
Scanner inScanner = new Scanner(System.in);
int[] dice = new int[5];
resetDice(dice);
System.out.print("Your current dice: + dice");
rollDice(dice);
System.out.print(dice);
System.out.println();
promptForReroll(dice, inScanner);
System.out.println("Rerolling...");
rollDice(dice);
System.out.println("Your final dice: + dice");
System.out.println(getResult(dice)+"!");
}
private static void resetDice(int[] dice) {
int length = 5;
for(int i = 0; i < length; i++){
dice[i] = 0;
}
}
private static void rollDice(int[] dice) {
int i = 0;
int length = 5;
while(i < length){
if(dice[i] == 0){
int roll = (int)(Math.random()*6)+1;
dice[i] = roll;
i++;
}
else{
i++;
}
}
}
private static void promptForReroll(int[] dice, Scanner inScanner) {
System.out.print("Select a die (-1 to keep remaining dice): ");
int selection = inScanner.nextInt();
while(selection != -1){
if(selection > 4 || selection < -1){
System.out.println("Erorr: (-1 to quit)!");
}
else{
dice[selection] = 0;
}
System.out.println("Your current dice: " + dice);
System.out.print("Select a die to re-roll (-1 to keep remaining dice): ");
selection = inScanner.nextInt();
}
System.out.println("Keeping remaining die...");
}
private static boolean promptForPlayAgain(Scanner inScanner) {
System.out.println("Would you like to play again?(Y or N)");
String play = inScanner.nextLine();
if(play=="Y"){
return true;
}
else if(play=="N"){
return false;
}
}
private static String getResult(int[] dice) {
int[] counts = getCounts(dice);
String resValue = " ";
for (int i = 0; i < counts.length; i++) {
if (counts[i] == 5) {
resValue = "Five of a kind ";
} else if (counts[i] == 4) {
resValue = "Four of a kind ";
} else if (counts[i] == 3) {
for (int j = 0; j < counts.length; j++) {
if (counts[j] == 2) {
resValue = "Full House ";
}
}
resValue = "Three of a Kind ";
} else if (counts[i] == 2) {
for (int j = 0; j < counts.length; j++) {
if (counts[j] == 2) {
resValue = "Two Pairs ";
}
}
resValue = "One Pair ";
} else {
resValue = "Highest Card ";
}
}
return resValue;
}
private static int[] getCounts(int[] dice) {
int[] counts = new int[6];
String resValue = "";
for (int i = 0; i < dice.length; i++) {
if (dice[i] == 1) {
counts[0]++;
} else if (dice[i] == 2) {
counts[1]++;
} else if (dice[i] == 3) {
counts[2]++;
} else if (dice[i] == 4) {
counts[3]++;
} else if (dice[i] == 5) {
counts[4]++;
} else if (dice[i] == 6) {
counts[5]++;
}
}
return counts;
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.