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