[java] jeu simple (deviner un nombre) - qui devinera le 1er le nombre correcte ?

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
      l’un d’entre eux n’a 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 l’application
            }
        }

        else{
            System.err.println("Erreur usage: parametre manquant !");
            System.exit(0); //fin de l’application
        } 

        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 (p) ?? comment peut on régler ce problème pour que ce nombre à deviner (p) 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 l’application
            }
        }

        else{
            System.err.println("Erreur usage: parametre manquant !"); //message d’erreur
            System.exit(0); //fin de l’application
        } 

        j.partie(); 
  
  }
}

En passant p en argument du constructeur de jeu?

Jeu j = new Jeu(p);

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 (p) 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(p);
Merci d’avance pour davantage de de précisions…
a+

Toujours pas de solution :neutre: !!

ou en passant par jeu.partie(p) :neutre:
à un moment ou à un autre il faudra que tu lui passe la valeur en paramètre.

Et qu’est-ce qui t’en empêche?

Déja la compilation de la classe Lanceur echoue :


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

??
merci

Commence par déclarer ta variable


class Lanceur{
Integer p;
//todo
}

Et bien oui, quand on ne déclare pas ses variables, le compilateur a un peu plus de mal à comprendre :wink:

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(p) ), cela permet de réutiliser l’objet Jeu pour plusieurs parties… De la façon dont c’est appelé, ça ne change rien ici :wink:

Merci je vais revoir tout ça le soir…
:super:
a+

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(p)] 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)

je trouve qui faudrai apprendre a vos joueur plus de consantrasion

Et à toi, l’orthographe … merci d’éviter tout commentaire intrusif et non constructif :jap:

Salut mes Amis !!
Voila la solution :

import java.util.Scanner;
import java.util.Random;

public class Jeu{

  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();

}

}

12 ans plus tard, nul doute qu’il est heureux d’avoir de l’"aide… :slight_smile: