IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

problème de logique


Sujet :

Langage Java

  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 227
    Par défaut problème de logique
    Bonjour tout le monde
    j'ai un petit pb avec ce bout de code, il ne fait pas ce que je veux!!
    ce qui ne marche pas c'est soit la méthode changementDeJoueur
    soit le test à l'entrée de la boucle if (après le while)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     Joueur joueur1=new Joueur(nomDuJoueur1,"",2,mainDuJoueur1);
    	Joueur joueur2=new Joueur(nomDuJoueur2,"",2,mainDuJoueur2);
    	Joueur joueurCourant=new Joueur("","",0,initialisation);
     
    	System.out.println("les joueurs "+nomDuJoueur1+" et "+ nomDuJoueur2+" vont s'affronter!!");
     
    	int pileOuFace =(int)(Math.random()*2);
    	if (pileOuFace==0){
    		joueurCourant=joueur1;
    	}
    	else{
    		joueurCourant=joueur2;
    	}
    	System.out.println(joueurCourant.getNom()+" va choisir son personnage!");
    	System.out.println("l'ordinateur va retirer l'une des cartes de personnage.");	
    	listeDePersonnage.remove((int)(Math.random()*8));
     
    	while(listeDePersonnage.size()>=4){
     
    		if((joueurCourant.getNom()=="ordi2")||(joueurCourant.getNom()=="ordi1")){
    			System.out.println("l'ordinateur va choisir son personnage.");	
    			int numero=(int)(Math.random()*listeDePersonnage.size());
    			joueurCourant.personnage=CartePersonnage.getPersonnageDuNumero(numero);
    			listeDePersonnage.remove(numero);
    			System.out.println("L'ordinateur a choisi son personnage.");
    			joueurCourant=Joueur.changementDeJoueur(joueurCourant,joueur1, joueur2);
     
    		}
    		else{
    			System.out.println("Choisissez votre personnage en rentrant son numero");
    				for(int i=0;i<listeDePersonnage.size();i++){
    					System.out.println(listeDePersonnage.get(i));
    				}
    			int numeroDuPersonnage=Clavier.lireInt();
    			joueurCourant.personnage=CartePersonnage.getPersonnageDuNumero(numeroDuPersonnage);
    			System.out.println("Vous avez choisi "+joueurCourant.personnage);
    			listeDePersonnage.remove(numeroDuPersonnage);
    			joueurCourant=Joueur.changementDeJoueur(joueurCourant,joueur1, joueur2);
     
    		}
    	}

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Et on sait comment ce que tu souhaites qu'il fasse ?

    Explique au moins le problème en détail

  3. #3
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 227
    Par défaut
    Ok
    dsl
    Alors en fait je tire au sort un nombre entre 0 et 1
    Si c'est 1 alors le joueur actif devient le joueur 1
    sinon c'est le joueur 2
    ensuite je veux que les joueurs 1 et 2 piochent chacun leur tour deux cartes (une à la fois )
    donc si c'est le joueur 1 qui est tiré ça fait joueur 1 tire une carte, puis joueur 2 tire une carte,puis joueur1 tire une carte, enfin joueur 2 tire une carte.
    Le truc c'est que l'un des joueurs peut être l'ordinateur donc il faut que je fasse un test sur le nom des joueurs pour savoir si l'un des joueurs n'est pas l'ordi.
    ensuite si c'est l'ordi je lui fait tirer une carte au pif et je la retire de la liste, sinon je fais s'afficher la liste et l'utilisateur peut choisir son personnage dans cette liste.

    le pb c'est que qd je compile, soit je ne change jamais de joueur soit mon test sur le nom des joueurs ets foireux car l'ordi ne fait jamais rien!!!

    au fait voilkà la méthode changementDeJoueur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public static Joueur changementDeJoueur(Joueur joueurCourant,Joueur joueur1, Joueur joueur2){
    			if (joueurCourant.nom==joueur1.nom){
    				return joueur2;
    			}
    			else{
    				return joueur1;
    			}
    Voilà
    j'éspère que c'est plus clair, si il y a encore des pbs, pas de pb je préciserai
    Merci bcp

  4. #4
    Membre chevronné
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 340
    Par défaut
    Pour un tirage au sort aléatoire de deux valeurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Random rand = new Random();
     
    if (rand.nextBoolean()) {
        //fait commencer le joueur 1
    }
    else {
        //fait commencer le joueur 2
    }

  5. #5
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 227
    Par défaut
    OK
    merci pour l'info!!
    Sinon as tu une idée pour arranger mon code?

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 47
    Par défaut
    Citation Envoyé par tanguy.L Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public static Joueur changementDeJoueur(Joueur joueurCourant,Joueur joueur1, Joueur joueur2){
    			if (joueurCourant.nom==joueur1.nom){
    				return joueur2;
    			}
    			else{
    				return joueur1;
    			}
    J'imagine que l'attribut nom des joueurs est un String, il ne faut donc pas utiliser "==" pour les comparer mais equals(). De plus, tu devrais utiliser des acesseurs plutôt que d'appeler tes attributs de cette manière ; bref, ton code devrait ressemble à ceci (en admétant que l'utilisation d'une méthode de classe, static, soit justifié...) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public static Joueur changementDeJoueur(Joueur joueurCourant,Joueur joueur1, Joueur joueur2){
    	return(joueurCourant.getNom().equals(joueur1.getNom()) ? joueur2 : joueur1);	
    }
    (j'ai aussi utiliser l'opérateur ternaire, pratique dans ce cas la).

    Conceptuellement, plutot que d'avoir une instance de joueur courant, j'utiliserai un boolean dans joueur indiquant si il est en train de jouer, de cette manière, les choses seraient encore plus simples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public static Joueur getJoueurSuivant(Joueur j1, Joueur j2) {
    	return (j1.estEntrainDeJouer() ? j2 : j1)
    }

  7. #7
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 227
    Par défaut
    OK
    MERCI BP
    je vais méditer sur ta réponse qui me semble très complète, encore merci!!

  8. #8
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 227
    Par défaut
    OK
    J'ai bien compris ce que tu m'as dit, je vais modifier mon code en conséquence!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problèmes de logique ! ne fait pas dans l'ordre.
    Par djibb dans le forum Tkinter
    Réponses: 3
    Dernier message: 29/05/2007, 17h06
  2. Problème de logique
    Par soso78 dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 03/04/2007, 22h05
  3. Problème de logique :)
    Par deaven dans le forum Oracle
    Réponses: 1
    Dernier message: 13/10/2006, 18h49
  4. Réponses: 10
    Dernier message: 14/07/2006, 20h22
  5. Petit problème de logique...
    Par insomniak dans le forum C++
    Réponses: 15
    Dernier message: 31/10/2005, 20h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo