【发布时间】:2021-03-10 14:20:03
【问题描述】:
我需要制作一个模拟掷骰子游戏的程序。但我遇到的问题是计算玩家赢或输的次数。我认为这是因为由于计数不在 main 方法中,它会将自身设置回 0,但我不知道如何修复它。这是运行程序的代码
public class Craps {
public static void main(String args[]) {
JOptionPane.showMessageDialog(null, "Welcome to my Craps game");
JOptionPane.showMessageDialog(null, "Press 'OK' to roll the dice");
//Calls the craps function
playCraps();
//Asks user if they want to play again
String playAgain = JOptionPane.showInputDialog("Would you like to play again?\n(enter 'y' for yes)");
while(playAgain.equals("y")){
playCraps();
}
}
static void playCraps(){
Die die1 = new Die(6);
Die die2 = new Die(6);
boolean firstTry = false;
//Generates the die
int roll1 = die1.roll();
int roll2 = die2.roll();
int sum = roll1 + roll2;
//counts the amount of times the player wins or loses
int winCount = 0;
int loseCount = 0;
//Shows the rolls and the sum
JOptionPane.showMessageDialog(null, "You rolled a " + roll1 + " and a " + roll2 + ".\n\nThe sum is " + sum);
//If the player doesn't win or lose on their first try,
//it keeps rolling until they win or lose
if(sum == 7 || sum == 11){
JOptionPane.showMessageDialog(null, "You win!!!");
winCount++;
firstTry = true;
}else if(sum == 2 || sum == 3 || sum == 12) {
JOptionPane.showMessageDialog(null, "You lose.");
loseCount = loseCount + 1;
firstTry = true;
}else{
JOptionPane.showMessageDialog(null,
"You must keep rolling. If you roll a " + sum + " again, you win. If you roll a 7 before that, you lose.");
while(firstTry == false){
int secRoll1 = die1.roll();
int secRoll2 = die2.roll();
int secSum = secRoll1 + secRoll2;
JOptionPane.showMessageDialog(null, "You rolled a " + secRoll1 + " and a " + secRoll2 + ".\n\nThe sum is " + secSum);
if(secSum == sum){
JOptionPane.showMessageDialog(null, "You matched!!!");
winCount++;
break;
}
if(secSum == 7){
JOptionPane.showMessageDialog(null, "I'm sorry, you rolled a 7.");
loseCount++;
break;
}
}
}
//Shows the user how many times they win or lose
JOptionPane.showMessageDialog(null, "Your current score..." + "\nwins: " + winCount + "\nlosses: " + loseCount);
}
}
public class Die
{
private int sides;
private int total;
private int rolls;
//The following method is called a 'Constructor'
//it runs when a new 'Die' is created
public Die(int numSides)
{
sides=numSides;
total=0;
rolls=0;
}
//gets a die roll
public int roll()
{
int result = (int)(Math.random()*sides+1);
total = total+result;
rolls++;
return result;
}
// The following methods return information about the die
public int getSides()
{
return sides;
}
public int getTotal()
{
return total;
}
public int getRolls()
{
return rolls;
}
}
【问题讨论】:
-
是的...移动你的计数并将它们设置为类变量——它们不应该是方法的本地变量