La simulation de Jeu de Craps en JAVA
Je suis nouveau sur Java et essayais d'apprendre en faisant quelques exercices que j'ai trouvé en ligne. Donc veuillez m'excuser si c'est trop naïf.
Cet exercice était de l'écriture d'un programme pour le jeu de craps avec les règles suivantes:
Dans le jeu de craps, un pari de ligne de laisser se déroule comme suit: Deux à six faces de dés
roulé; le premier lancer de dés dans un jeu de craps est appelé le “come out roll.”
Un rouleau de sortir de 7 ou 11 gagne automatiquement, et un rouleau de sortir de 2, 3, ou 12
perd automatiquement. Si 4, 5, 6, 8, 9, ou 10 est roulé sur le come out roll, le nombre de
devient le “point”. Le joueur continue à rouler les dés jusqu'à ce que ce soit 7 ou le point est
roulé. Si le point est roulé en premier, puis le joueur gagne le pari. Si des 7 est roulés d'abord,
ensuite, le joueur perd.
Écrire un programme qui simule un jeu de craps en utilisant ces règles sans l'homme
d'entrée. Au lieu de demander un pari, le programme doit calculer si le
le joueur gagne ou perd. Le programme doit simuler rouler les deux dés et
calculer la somme. Ajouter une boucle de sorte que le programme joue de 10 000 jeux. Ajouter
c ounters que de compter le nombre de fois que le joueur gagne, et combien de fois la
joueur perd. À la fin du de 10 000 jeux, calculer la probabilité de gagner
[c'est à dire, Wins /Wins (+ Pertes)] et la sortie de cette valeur. Sur le long terme, qui
qui va gagner le plus de jeux, à vous ou à la maison?
Voici le code que j'ai écrit :
//GAME OF CRAPS
public static void main (String[] args)
{
int dice1 = 0;
int dice2 = 0;
int scorenew = 0;
int point = 0;
int wins = 0;
int loss = 0;
for (int i = 0; i < 10000; i++)
{
System.out.println ("roll the dices");
int score = roll (dice1, dice2);
System.out.println ("\n score " + score);
if (score == 11 || score == 7)
{
System.out.println ("\n Score = " + score);
System.out.println ("you win");
wins = wins + 1;
}
if (score == 2 || score == 3 || score == 12)
{
System.out.println ("\n Score = " + score);
System.out.println ("you lose");
loss = loss + 1;
}
else if (score == 4 || score == 5 || score == 6 || score == 8 || score == 9 || score == 10)
{
point = point + score;
System.out.println ("\n Point = " + point);
do
{
scorenew = roll (dice1, dice2);
System.out.println ("\n Score new = " + scorenew);
if (scorenew == point)
{
System.out.println ("\n you win");
wins = wins + 1;
point = 0;
break;
}
if (scorenew == 7)
{
System.out.println ("\n you lose");
point = 0;
loss = loss + 1;
break;
}
} while (scorenew != point || scorenew != 7);
}
}
System.out.println ("\n number of wins = " + wins
+ " and number of loss = " + loss +
" and the probability for winning a game = " + (double) wins / (wins + loss));
}
public static int roll (int d1, int d2)
{
Random randomGenerator = new Random ();
int dice1 = randomGenerator.nextInt (6) + 1;
int dice2 = randomGenerator.nextInt (6) + 1;
System.out.println ("\n dice1 = " + dice1 + " dice2 = " + dice2);
int score = dice1 + dice2;
return score;
}
Chaque fois que je lance le code de la condition du while est exécutée en premier, donc svp quelqu'un peut m'aider à comprendre où je vais mal?
Vous devez vous connecter pour publier un commentaire.
Cette condition est toujours vrai, vous avez donc une boucle infinie. Aussi, pourquoi avez-vous passer
d1
etd2
dans leroll()
fonction? Ils sont complètement inutilisés et inutiles.scorenew
etpoint
est cette expression de faux?scorenew == 7
etpoint != 7
. Les conditions avec les sauts de ne jamais laisser ces valeurs soient évalués, mais ils ont également pause, donc il n'y a pas de boucle infinie. Il pourrait être while(true).Faire, tout est en train de faire exactement ce qu'il vous devez vous attendre à faire. Exécute le corps d'abord, puis évalue la condition pour voir si il devrait fonctionner à nouveau. Vous n'avez pas besoin de faire tout bien, vous voulez exécuter jusqu'à ce que l'une des conditions les sauts de vous sortir de la boucle while.
Comme @Lee Daniel Crocker a dit vous n'avez pas besoin de passer dice1 et dice2 à la fonction de roulement.
Une autre chose qui peut aider est de ne pas déclarer toutes les variables dans le haut de votre méthode. Vous n'avez pas besoin scorenew ou endroit à l'extérieur de la troisième condition, en fait, vous n'avez pas besoin scorenew à tous car vous avez point: