Bonjour tout le monde, j’ai crée ce petit jeu simple de devinette, mais je bloque sur une classe, j’ai besoin de votre aide, MERCI D’AVANCE.
Mes classes sont :
La classe Joueur:
public class Joueur{
String nom;
int nombre=0;
public Joueur()
{
nom="aaaa";
}
public Joueur(String nom)
{
this.nom=nom;
}
public int deviner()
{
nombre = (int) (Math.random()*10);
System.out.println("["+nom+"]: Je propose "+nombre);
return nombre;
}
}
La classe Jeu:
public class Jeu{
private Joueur j1=null;
private Joueur j2=null;
private Joueur j3=null;
private int n1,n2,n3;
static int p=0; // Declaration de la variable stockant le nombre a deviner
boolean b=false;
public Jeu(){
j1 = new Joueur("cccc");
j2 = new Joueur("dddd");
j3 = new Joueur("eeee");
int n1=0,n2=0,n3=0;
}
/* methode tour() booleen qui fait jouer les 3 joueurs puis verifie si au moins un des joueurs
a trouve pour renvoyer true, sinon renvoie false */
public boolean tour(boolean b){
n1=j1.deviner();
n2=j2.deviner();
n3=j3.deviner();
System.out.println(j1.nom+" a propose : "+n1);
System.out.println(j2.nom+" a propose : "+n2);
System.out.println(j3.nom+" a propose : "+n3);
if((n1==p)||(n2==p)||(n3==p)){
b=true;
}
else{
System.out.println("\nPersonne n'a trouve, les joueurs recommencent.\n");
return false;
}
return b;
}
/* methode manche() qui affiche le nombre a deviner et fait jouer les 3 joueurs tant que
lun dentre eux na pas trouve */
public void manche(){
System.out.println("Le nombre a devine est : "+p+"\n");
do{b=tour(true);}
while(b==false);
}
/* methode partie(), qui lance une manche puis qui affiche le
(ou les) joueurs qui ont trouve correctement le nombre. */
public void partie(){
System.out.println("\n*** Nouvelle manche ! *** \n");
manche();
if(n1==p){
System.out.println(j1.nom+" a devine juste !");
System.out.println(j1.nom+" a gagne la partie !");
}
else if(n2==p){
System.out.println(j2.nom+" a devine juste !");
System.out.println(j2.nom+" a gagne la partie !");
}
else if(n3==p){
System.out.println(j3.nom+" a devine juste !");
System.out.println(j3.nom+" a gagne la partie !");
}
System.out.println("Le jeu est fini !");
}
public static void main(String args[]) {
if(args.length==1){
p=Integer.parseInt(args[0]);
if((p>=0)&&(p<=9))
System.out.println("Le nombre a deviner est : "+p);
else{
System.err.println("Vous devez entrer un nombre entre 0 et 9 !");
System.exit(0); //fin de lapplication
}
}
else{
System.err.println("Erreur usage: parametre manquant !");
System.exit(0); //fin de lapplication
}
Jeu j= new Jeu();
j.partie();
}
}
Jusqu’à là tout est bon l’exécution du programme est parfaitement correcte.
Maintenant je cherche à faire sortir la méthode principale (main) de ma classe Jeu() et la mettre dans une classe à part que je nommerai lanceur du jeu, sauf que j’ai un problème avec le nombre à deviner § ?? comment peut on régler ce problème pour que ce nombre à deviner § sera donné en ligne de commande à l’exécution de la classe lanceur() et reçu par la classe Jeu().
public class Lanceur{
public static void main(String args[]) {
Jeu j= new Jeu();
if(args.length==1){
p=Integer.parseInt(args[0]); // recuperer le nombre a deviner
if((p>=0)&&(p<=9))
System.out.println("Le nombre a deviner est : "+p);
else{
System.err.println("Vous devez entrer un nombre entre 0 et 9 !");
System.exit(0); //fin de lapplication
}
}
else{
System.err.println("Erreur usage: parametre manquant !"); //message derreur
System.exit(0); //fin de lapplication
}
j.partie();
}
}
Merci pour la réponse , mais dans ce cas je dois créer un autre constructeur avec argument dans ma classe Jeu(), de tant plus que ce nombre § j’aimera l’avoir sur la ligne de commane de ma classe lanceur() en non pas initialisé (déclaré) lors de la création d’objet : Jeu j= new Jeu§;
Merci d’avance pour davantage de de précisions…
a+
javac Lanceur.java
Lanceur.java:4: cannot find symbol
symbol : variable p
location: class Lanceur
Jeu j= new Jeu(p);
^
Lanceur.java:7: cannot find symbol
symbol : variable p
location: class Lanceur
p=Integer.parseInt(args[0]); // recuperer le nombre a deviner
^
Lanceur.java:9: cannot find symbol
symbol : variable p
location: class Lanceur
if((p>=0)&&(p<=9))
^
Lanceur.java:9: cannot find symbol
symbol : variable p
location: class Lanceur
if((p>=0)&&(p<=9))
^
Lanceur.java:10: cannot find symbol
symbol : variable p
location: class Lanceur
System.out.println("Le nombre a deviner est : "+p);
^
5 errors
Et bien oui, quand on ne déclare pas ses variables, le compilateur a un peu plus de mal à comprendre
public static void main(String args[]) {
if (args.length == 1) {
int p = -1;
try {
p = Integer.parseInt(args[0]);
}
catch (NumberFormatException e) {
// Flemme, je laisse aller jusqu'au message suivant;)
}
if ((p >= 0) && (p <= 9)) {
System.out.println("Le nombre a deviner est : "+p);
Jeu j = new Jeu(p);
j.partie();
}
else {
System.err.println("Vous devez entrer un nombre entre 0 et 9 !");
}
}
else {
System.err.println("Erreur usage: parametre manquant (nombre de 0 a 9) !");
}
}
Note : Ce que jmgchouchou propose est plus malin ( j.partie§ ), cela permet de réutiliser l’objet Jeu pour plusieurs parties… De la façon dont c’est appelé, ça ne change rien ici
Finalement je crois que j’ai su d’où ça bloque, il a fallu faire jouer un autre objet [k, Jeu k = new Jeu()] avac k.partie(), le premier objet [j, Jeu j = new Jeu§] ne fait que déclarer que le nombre à deviner, c’est pourquoi [ j.partie() ] seule ne donne pas de résultat.
Merci
a+
Oula… Non, tu n’as qu’un constructeur pour Jeu, p n’est pas une variable de classe mais un élément privé de l’objet (Que p soit intégré à Jeu ou Partie ne change rien)
private String j1;
private String j2;
private String j3;
private int n1;
private int n2;
private int n3;
private int n4;
public Jeu(){
j1="inc";
j2="inc";
j3="inc";
n1=0;
n2=0;
n3=0;
n4=0;
}
public Jeu( String j1, String j2, String j3, int n1, int n2, int n3,int n4) {
this.j1=j1;
this.j2=j2;
this.j3=j3;
this.n1=n1;
this.n2=n2;
this.n3=n3;
this.n4=n4;
}
public boolean tour(boolean b){
Random rand=new Random(3);
n4=rand.nextInt(43);
System.out.println(n4);
if(n1==n4||n2==n4||n3==n4){
b=true;
}
else{
System.out.println("\nPersonne n'a trouve, les joueurs recommencent.\n");
return false;
}
return b;
}
public void manche() {
Random rand=new Random(3);
n4=rand.nextInt(43);
System.out.println(" Le numéro"+n4+" à deviner : ");
if( n1 !=n4) {
System.out.println(" Le numéro "+n1+" n'a pas deviner " );
}
if(n2 !=n4) {
System.out.println(" Le numéro "+n2+" n'a pas deviner " );
}
if(n3!=n4) {
System.out.println(" Le numéro "+n3+" n'a pas deviner " );
}
}
public int getN1() {
return n1;
}
public void setN1(int n1) {
this.n1 = n1;
}
public int getN2() {
return n2;
}
public void setN2(int n2) {
this.n2 = n2;
}
public int getN3() {
return n3;
}
public void setN3(int n3) {
this.n3 = n3;
}
public int getN4() {
return n4;
}
public void setN4(int n4) {
this.n4 = n4;
}
public void partie(){
System.out.println("\n*** Nouvelle manche ! *** \n");
Random rand=new Random(3);
int n4 = rand.nextInt(43);
Scanner sc = new Scanner(System.in);
System.out.println("Entrer les noms des joueures : ");
j1=sc.nextLine();
j2=sc.nextLine();
j3=sc.nextLine();
if(n1==n4){
System.out.println(j1+ " a devine juste !");
System.out.println(j1+" a gagne la partie !");
}
if(n2==n4){
System.out.println(j2+ " a devine juste !");
System.out.println(j2+ " a gagne la partie !");
}
if(n3==n4){
System.out.println(j3+ " a devine juste !");
System.out.println(j3+ " a gagne la partie !");
}
System.out.println("Le jeu est fini !");
}
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
Jeu ra=new Jeu("YASSIN","FARAH","AHMED",36,2,5,36);
System.out.println(ra.tour(false));
Jeu ma=new Jeu("YASSIN","FARAH","AHMED",36,36,6,0);
ma.manche();
ma.partie();