1

Écrire un programme Craps.java qui simule un joueur jouant à une variante de ce jeu. Un joueur (simulé ici) jette 2 dés à 6 faces (1, 2, 3, 4 ,5 et 6) au gré des situations suivantes:
Si la somme des deux dés est 2, 3 ou 12, le joueur perd.
Si la somme est 7 ou 11, le joueur gagne.
Si la somme est autre (4, 5, 6, 8, 9 ou 10), alors un point est établi. Le joueur lance à nouveau les dés jusqu'à ce que leur somme soit égale à 7 (auquel cas le joueur perd), ou soit égale à la valeur du point (auquel cas le joueur gagne).
Votre programme commence par demander à l'utilisateur le nombre de simulations de ce jeu (parties jouées; 1 partie correspond généralement à plusieurs lancés de dés). 30 est le nombre de simulations dans l'exemple qui suit. Votre pogramme doit simuler les parties en affichant toutes les étapes de chacune des simulations, selon le modèle (il s'agit d'un exemple):
---
simulation 1:
jeté: 6 + 5 = 11
gagné en 1 coup
---
simulation 2:
jeté: 2 + 1 = 3
perdu en 1 coup
---
simulation 3:
jeté: 6 + 2 = 8
le point est 8
jeté 1 + 3 = 4
jeté 1 + 4 = 5
jeté 2 + 6 = 8
gagné en 4 coups
---
...
nombre de parties gagnées: 18 (en 3.3 jetés en moyenne)
nombre de parties perdues: 12 (en 2.1 jetés en moyenne)
Vous prendrez soin d'arrondir les valeurs flotantes à leur première décimale (utilisez System.out.printf pour cela).


Voilà ce que j'ai produit mais je suis bloquer à la 3ème contrainte ! (Si la somme est autre) comment pourrais-je faire ?!

import java.util.Scanner;

public class Craps{



public static void main (String [] args){

Scanner input = new Scanner(System.in);

// demander de jetter les 2 dés
System.out.println("Jettez les 2 dés: ");
int d1 = (int) (Math.random()*5 + 1);
int d2 = (int) (Math.random()*5 + 1);

do {

if ((d1 + d2) == 2 || (d1 + d2) == 3 || (d1 + d2) == 12)
System.out.println("jeté: " + d1 + " + " + d2 + " = " + (d1 + d2) + "Perdu ");


else if ((d1 + d2) == 7 || (d1+ d2) == 11)
System.out.println("jeté: " + d1 + " + " + d2 + " = " + (d1 + d2) + "Gagné ");

else
System.out.println("jeté: " + d1 + " + " + d2 + " = " + (d1 + d2) + "Recommence ");


}while ((d1 + d2) == 7 || (d1 + d2) == 11);

}
}

2

J'ai du mal à comprendre ton problème. Quand la somme est autre, le "else" s'exécute normalement...

Mais c'est vrai que ça fait entrer dans une phase de jeu différente. Tu peux faire une deuxième boucle, ou bien utiliser une variable pour dire dans quel "mode" on est...
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

3

Même si je doute que fredigston me lise, je ferai 2 petites remarques sur le code proposé.
Premièrement, « (int) (Math.random()*5 + 1) » donne le résultat d’un « dé à 5 faces » équiprobables, le 6 ne sortira jamais.
Deuxièmement, les valeurs de d1 et d2 étant calculées une seule fois avant la boucle, si leur somme vaut 7 ou 11, la boucle va tourner indéfiniment…
avatar
Je ne suis pas développeur Java : je suis artiste Java.
Ce que l’on conçoit bien s’énonce clairement, / Et le code pour l’écrire arrive aisément.
Hâtez-vous lentement ; toujours, avec méthode, / Vingt fois dans l’IDE travaillez votre code.
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer.
You don't use science to show that you're right, you use science to become right.

4

Le 6 ne sortira-t-il jamais, ou presque jamais?
Math.random() est-il garanti ne jamais retourner 1.0 ?
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

5

Oui :
http://download.oracle.com/javase/6/docs/api/java/lang/Math.html#random%28%29
Returns:
a pseudorandom double greater than or equal to 0.0 and less than 1.0.
(Et non “less than or equal to”.)
Cela garantit l’équiprobabilité des entiers A et B inclus avec (int) (Math.random()*(B-A+1)+A).
avatar
Je ne suis pas développeur Java : je suis artiste Java.
Ce que l’on conçoit bien s’énonce clairement, / Et le code pour l’écrire arrive aisément.
Hâtez-vous lentement ; toujours, avec méthode, / Vingt fois dans l’IDE travaillez votre code.
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer.
You don't use science to show that you're right, you use science to become right.