[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 § ?? 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 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 § 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+

Toujours pas de solution :neutre: !!

ou en passant par jeu.partie§ :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§ ), 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§] 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: