Partage
  • Partager sur Facebook
  • Partager sur Twitter

Design Pattern Observers

    7 février 2016 à 15:50:34

    Bonjour,

    Mon code ne fonctionne pas, je ne comprends pas pourquoi!!!

    Principe: Une classe mère (Personnage ) qui posséde deux filles (Tueur, Policier).

    Lorsqu'un personnage tue un autre personnage le personnage tué moeurt (Evidennt ;)) Sa mort est annoncé à l'utilisateur par une fenetre de message. Pour afficher cette fenetre il me faut donc un observeur sur le booleen gagne mis a jour dans la méthode tue.

    Voici mes codes.

    public class Personnage extends Observable{
    	protected boolean gagne=false;
    	
    	public void setGagne(boolean gagne) {
    		setChanged();
    		this.gagne = gagne;
    		notifyObservers();
    	}
    	
    	public boolean getGagne(){
    		return gagne;
    	}
    	
    	public void tue(Personnage p){
    	}
    }
    public class PanneauJeu extends JPanel implements Observer {
    	
    	public void paintComponent(Graphics g){
    	}
    	
    	public void update(Observable obs, Object obj) {
    		if(obs instanceof Personnage){
    			repaint();
    			System.out.println("coucou");
    			Personnage p= (Personnage) obs;
    			if(p.getGagne()){
    				JOptionPane jop = new JOptionPane();
    				jop.showMessageDialog(null,"Gagné","Gagné", 0, null);
    			}
    		}
    	}
    }
    public class Tueur extends Personnage {
    	
    	public Tueur(){
    		vie=2;
    	}
    	
    	public void tue (Personnage p){
    		p.setVie(p.getVie()-3);
    		if(p.getVie()<=0){
    			setGagne(true);		
    		}
    	}
    }
    package Action;
    
    public class Policier extends Personnage {
    	public Policier(){
    		vie=3;
    	}
    	
    	public void tue (Personnage p){
    		p.setVie(p.getVie()-3);
    		if(p.getVie()<=0){
    			setGagne(true);
    		}
    	}
    }

    Mon probleme est que lorsque dans la methode tue (Personnage p) je note this.setGagne(true) ou simplement setGagne(true), la methode update n'est pas appele. Ceci est bizarre parceque si je note p.setGagne(true) en revanche, la methode update est appelée.

    Je ne comprends pas.

    En vous remerciant par avance de votre aide.




    • Partager sur Facebook
    • Partager sur Twitter
      10 février 2016 à 14:51:00

      regardes dans ta méthode p.setVie(int v) / p.getVie() et vérifies qu'elles fonctionnent correctement.

      ajoutes un system out print dans la fonction tue(Personnage p)

      public void tue (Personnage p){
      p.setVie(p.getVie()-3);
      if(p.getVie()<=0){
                                 // print quelque chose ici pour vérifier
      setGagne(true);
      }
      }

      -
      Edité par Hugo Bonnome 10 février 2016 à 14:51:26

      • Partager sur Facebook
      • Partager sur Twitter

      Design Pattern Observers

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown