Pattern MVC

seichan94 Messages postés 38 Date d'inscription mardi 29 octobre 2013 Statut Membre Dernière intervention 6 novembre 2014 - 3 déc. 2013 à 13:13
seichan94 Messages postés 38 Date d'inscription mardi 29 octobre 2013 Statut Membre Dernière intervention 6 novembre 2014 - 4 déc. 2013 à 13:21
Bonjour,
suite a un premier sujet posté ici meme :
http://codes-sources.commentcamarche.net/forum/affich-10013166-petit-jeux-pour-un-exo-besoin-de-votre-avis-merci

J'ai fait des recherche sur la réponses Twinuts et j'ai re-codé mon programme
Je poste ici aujourd'hui mon code pour le 2eme fois et je souhaite avoir a nouveau votre avis critique de programmeur !

Les questions que je me pose, sont

Le pattern MVC est il respecté ?
La structure des objet convient elle ? (choix des variable, un objet en contient d'autre, MAP... quel est le bon raisonnement ?)
le Thread est il correctement utilisé, est il vraiment utile, comment le fermer ?

le plan du programme (shiFuMi, pierre feuille ciseaux):

package JanKenPon :
Classe Bouton
public class Bouton extends JButton implements MouseListener, ActionListener{
	private String name;
	private Image img;
	private int number;

	public Bouton(String str, int n, String imgJKP,int hight, int width) {
		super(str);
	    this.name = str;
	    this.number = n;
	    this.setPreferredSize(new Dimension(hight, width));
	    try {
	        img = ImageIO.read(getClass().getResourceAsStream(imgJKP));
	      } catch (IOException e) {
	        e.printStackTrace();
	      }
	    this.addMouseListener(this);
	    this.addActionListener(this);
	}
	
	public void actionPerformed(ActionEvent arg0) {
		Tour.Action(this.number);
	}
	
	public void paintComponent(Graphics g){
	    Graphics2D g2d = (Graphics2D)g;
	    g2d.drawImage(img, 0, 0, this);
	}
}


Classe Coups
public class Coups implements ObservableCoups {

	protected int jouer = 0;
	
	private ArrayList<ObservateurCoups> listCoupsObservateur = new ArrayList<ObservateurCoups>();
	
	public Coups() {
		this.jouer = 0;
	}

	public void setCoupJouer(int c) {
		this.jouer =  c;
		this.updateCoupObservateur();
	}
	
	public int getCoupJouer() {
		return this.jouer;
	}
	
	@Override
	public void addCoupObservateur(ObservateurCoups obs) {
		this.listCoupsObservateur.add(obs);
	}

	@Override
	public void delCoupObservateur() {
		this.listCoupsObservateur = new ArrayList<ObservateurCoups>();
	}

	@Override
	public void updateCoupObservateur() {
		for(ObservateurCoups obs : this.listCoupsObservateur )
			obs.updateCoups(this.jouer);
	}
}


Classe Joueur
public class Joueur {

	// varaible
	protected String name;
	protected String type;
	 
	public Joueur() {
		this.name = "anonyme";
		this.type = "inconnu";
	}
	
	public Joueur(String name, String type) {
		this.name = name;
		this.type = type;
	}
	
	public String getName() {
		return this.name;
	}
	
	public String getType() {
		return this.type;
	}
	
}


Classe Personnage
public class Personnage implements Observable {
	protected int profil = 10;
	protected int statut = 5;
	protected Map<Integer, String> perso;
	protected String pathIconPerso = "/";
	
	private ArrayList<Observateur> listPersoObservateur = new ArrayList<Observateur>();
	
	public Personnage(String pathImg) {
		this.profil = 10;
		this.statut = 5;
		perso = new HashMap<Integer, String>();
		for (int i = 0; i<=10; i++) {
			perso.put(i, pathIconPerso+pathImg+i+".png");
		}
	}

	public void setPersoStatut(int c) {
		this.statut =  c;
		this.updatePersoObservateur();
	}
	
	public int getPersoStatut() {
		return this.statut;
	}
	
	public int getPersoProfil() {
		return this.profil;
	}
	
	public int getPersoSize() {
		return this.perso.size();
	}
	
	public String getPersoIcon() {
		return this.perso.get(this.statut);
	}
	
	public String getPersoIcon(int c) {
		return this.perso.get(c);
	}

	@Override
	public void addPersoObservateur(Observateur obs) {
		this.listPersoObservateur.add(obs);
	}

	@Override
	public void delPersoObservateur() {
		this.listPersoObservateur = new ArrayList<Observateur>();
	}

	@Override
	public void updatePersoObservateur() {
		for(Observateur obs : this.listPersoObservateur )
			obs.updatePerso(this.statut);
	}
}


Classe Score
public class Score implements ObservableScores {
		
	/// variable de Score
	protected String joueurName;
	protected int point;
	protected int set;
	protected int manche;
	protected int match;
	protected int adv;
	private ArrayList<ObservateurScores> listScoreObservateur = new ArrayList<ObservateurScores>();
	
	/// constructeur
	public Score(String name) {
		this.joueurName = name;
		this.point = 0;
		this.set = 0;
		this.manche = 0;
		this.match = 0;
		this.adv = 0;
	}
	@Override
	public void addScoreObservateur(ObservateurScores obs) {
		this.listScoreObservateur.add(obs);
	}

	@Override
	public void delScoreObservateur() {
		this.listScoreObservateur = new ArrayList<ObservateurScores>();
	}

	@Override
	public void updateScoreObservateur() {
		for(ObservateurScores obs : this.listScoreObservateur )
			obs.updateScore(this.point, this.set, this.manche, this.match);
	}
}


Classe Partie
public class Partie {
	// variable
	protected int nbrT;
	protected int nbrS;
	protected int nbrManche;
	protected int nbrMatch;
	protected int nbrSE;
	protected int nbrJoueur;
	
	protected Joueur J1;
	protected Joueur J2;
	
	protected Score score;
	protected Coups coup;
	protected Personnage perso;
	
	protected final Map<Joueur, Score> scores;
	protected final Map<Joueur, Coups> coups;
	protected final Map<Joueur, Personnage> persos;
	
	public Partie() {
		this.nbrT = 5;
		this.nbrS = 3;
		this.nbrManche = 2;
		this.nbrMatch = 1;
		this.nbrSE = 2;
		this.nbrJoueur = 2;
		scores = new HashMap<Joueur, Score>();
		getScores().put(setJ1(new Joueur("J1","Humain")), score = new Score(getJ1().getName()));
		getScores().put(setJ2(new Joueur("J2","COM")), score = new Score(getJ2().getName()));
		coups = new HashMap<Joueur, Coups>();
		getCoups().put(getJ1(), coup = new Coups());
		getCoups().put(getJ2(), coup = new Coups());
		persos = new HashMap<Joueur, Personnage>();
		getPersos().put(getJ1(), perso = new Personnage("s_"));
		getPersos().put(getJ2(), perso = new Personnage("u_"));
	}


Package vue
Classe Tour
package vue;

import JanKenPon.Joueur;
import JanKenPon.Partie;


public class Tour {
	static Partie partie;
	static Thread reinitThread;
	static int egaliteI = 0;
	public static void creerPartie(int nbrT, int nbrS, int nbrManche, int nbrMatch, int nbrSE, String persoJ1, String persoJ2) {
		partie = new Partie(nbrT, nbrS, nbrManche, nbrMatch, nbrSE, persoJ1, persoJ2);
	}
	
	public static void Action(int number) {
		int hasard = (int) (1+3*Math.random());

		partie.getCoups().get(partie.getJ1()).setCoupJouer(number);
		partie.getCoups().get(partie.getJ2()).setCoupJouer(hasard);
		
		setScore(number, hasard);
		
		reinitThread = new Thread(new ReinitThread());
		reinitThread.start();
	}
	/// controle des scores
	
	protected static void setScore(int choix, int hasard) {
		if(choix == hasard) {
			egalite();
		} else if (choix == 1 && hasard == 2) {
			J1Win();
		} else if (choix == 2 && hasard == 3) {
			J1Win();
		} else if (choix == 3 && hasard == 1) {
			J1Win();
		} else {
			J2Win();
		}
		setStatut();
	}
	
	protected static void egalite() {
			
			egaliteI++;
			if (egaliteI <= 1)
				Windows.labComment.setText("Egalité !");
			else if (egaliteI == 2)
				Windows.labComment.setText("Woooh "+egaliteI+"eme Egalité !");
			else if (egaliteI < 5)
				Windows.labComment.setText("Enorme "+egaliteI+"eme Egalité !");
			else if (egaliteI >= 5)
				Windows.labComment.setText("Whouuu quel tension ! "+egaliteI+"eme Egalité !");
	}

	/// win point
	/// humain win
	protected static void J1Win() {
		partie.getScores().get(partie.getJ1()).setPoint();
		Windows.labComment.setText("Joueur 1 Gagne le Point");
		// test si partie.nbrT pour les points est atteint
		if (partie.getScores().get(partie.getJ1()).getPoint() == partie.getNbrT()) {
			// methode set
			Set(partie.getJ1(), partie.getJ2());
		}
	}
	// fin humain win
	/// COM gagne
	private static void J2Win() {
		partie.getScores().get(partie.getJ2()).setPoint();
		Windows.labComment.setText("Joueur 2 Gagne le Point");
		// test si partie.nbrT pour les points est atteint
		if (partie.getScores().get(partie.getJ2()).getPoint() == partie.getNbrT()) {
			// methode set
			Set(partie.getJ2(), partie.getJ1());
		}
	}
	// fin com gagne
	// fin win point

	private static void Set(Joueur a, Joueur b) {
		partie.getScores().get(a).setSet();
		advantage();
		/// verifie si le score set >= on nombre de set definit par nbrS avec l'ecart de x set
		if (partie.getScores().get(a).getSet() >= partie.getNbrS()) {
			if (partie.getScores().get(a).getAdv() >= partie.getNbrSE()) {
				// methode manche
				Manche(a, b);
			}
		}
	}
	
	protected static void Manche(Joueur a, Joueur b){
		partie.getScores().get(a).setManche();
		// si les manche == nbrManche definit
		if (partie.getScores().get(a).getManche() == partie.getNbrManche()) {
			Match(a, b);
		}
	}
	
	protected static void Match(Joueur a, Joueur b){
		partie.getScores().get(a).setMatch();
		// si les manche == nbrManche definit
		if (partie.getScores().get(a).getMatch() == partie.getNbrMatch()) {
			Winner(a);
		}
	}
	
	protected static void Winner(Joueur a) {
		Windows.labComment.setText(a.getName()+" Gagne le match !");
	}
	
	protected static void advantage() {
		if (partie.getScores().get(partie.getJ1()).getSet() > partie.getScores().get(partie.getJ2()).getSet()) {
			partie.getScores().get(partie.getJ1()).setAdv(partie.getScores().get(partie.getJ1()).getSet()-partie.getScores().get(partie.getJ2()).getSet());
		} else {
			partie.getScores().get(partie.getJ2()).setAdv(partie.getScores().get(partie.getJ2()).getSet()-partie.getScores().get(partie.getJ1()).getSet());
		}
	}
	// controle des score */
	
	
	
	/// setstatut perso
	protected static void setStatut() {
		int J1 = partie.getScores().get(partie.getJ1()).getPoint();
		int J2 = partie.getScores().get(partie.getJ2()).getPoint();
		partie.getPersos().get(partie.getJ1()).setPersoStatut(partie.getNbrT()+(J1-J2));
		partie.getPersos().get(partie.getJ2()).setPersoStatut(partie.getNbrT()+(J2-J1));
	}
	// fin setstatut perso */
	
	/// reinit des score
	protected static void reinit() {
		if (partie.getScores().get(partie.getJ2()).getPoint() == partie.getNbrT() || partie.getScores().get(partie.getJ1()).getPoint() == partie.getNbrT()) {
			partie.getScores().get(partie.getJ1()).resetPoint();
			partie.getScores().get(partie.getJ2()).resetPoint();
			// labComment
			Windows.labComment.setText("Jouer !");
			// reinit egalite
			egaliteI = 0;
			//reinit coups jouer
			partie.getCoups().get(partie.getJ1()).setCoupJouer(0);
			partie.getCoups().get(partie.getJ2()).setCoupJouer(0);
			//reinit persos statut
			partie.getPersos().get(partie.getJ1()).setPersoStatut(5);
			partie.getPersos().get(partie.getJ2()).setPersoStatut(5);
		}
		if (partie.getScores().get(partie.getJ1()).getSet() >= partie.getNbrS() || partie.getScores().get(partie.getJ2()).getSet() >= partie.getNbrS()) {
			if (partie.getScores().get(partie.getJ1()).getAdv() >= partie.getNbrSE() || partie.getScores().get(partie.getJ2()).getAdv() >= partie.getNbrSE()) {
				partie.getScores().get(partie.getJ1()).resetSet();
				partie.getScores().get(partie.getJ2()).resetSet();
			}
		}
		if (partie.getScores().get(partie.getJ1()).getManche() == partie.getNbrManche() || partie.getScores().get(partie.getJ2()).getManche() == partie.getNbrManche()) {
			partie.getScores().get(partie.getJ1()).resetManche();
			partie.getScores().get(partie.getJ2()).resetManche();
		}
		if (partie.getScores().get(partie.getJ1()).getMatch() == partie.getNbrMatch() || partie.getScores().get(partie.getJ2()).getMatch() == partie.getNbrMatch()) {
			partie.getScores().get(partie.getJ1()).resetMatch();
			partie.getScores().get(partie.getJ2()).resetMatch();
		}
	}
	// fin reinit des score */
}


Class ReinitThread
package vue;


public class ReinitThread implements Runnable {

	@Override
	public void run() {
		if (Tour.partie.getScores().get(Tour.partie.getJ2()).getPoint() == Tour.partie.getNbrT() || Tour.partie.getScores().get(Tour.partie.getJ1()).getPoint() == Tour.partie.getNbrT()) {
			// TODO Auto-generated method stub
			Windows.panBoutonsJeux.setVisible(false);
			try {
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			Tour.reinit();
			Windows.panBoutonsJeux.setVisible(true);
		}
	}

}


Class JanKenPon (main)
public class JanKenPon {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Tour.creerPartie(5,2, 2, 1, 0, "s_", "u_");
		Windows w = new Windows();
	}
}


Class Windows (swing)
package vue;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

import JanKenPon.Bouton;
import Observer.Observateur;
import ObserverCoups.ObservateurCoups;
import ObserverScores.ObservateurScores;

public class Windows extends JFrame {
	
	/// Jpanel
	protected JPanel panContainer = new JPanel();
	protected JPanel panGridBagAction = new JPanel();
	
	protected JPanel panGridBagScore = new JPanel();
	protected JPanel panJ1 = new JPanel();
	protected JPanel panJ2 = new JPanel();
	protected JPanel panPoint = new JPanel();
	protected JPanel panSet = new JPanel();
	protected JPanel panManche = new JPanel();
	protected JPanel panMatch = new JPanel();
	protected JPanel panIconJ1 = new JPanel();
	protected JPanel panIconJ2 = new JPanel();
	
	protected JPanel panStart = new JPanel();
	
	protected JPanel panComment = new JPanel();
	
	protected JPanel panPersonnage = new JPanel();
	protected JPanel panPersoJ1 = new JPanel();
	protected JPanel panPersoJ2 = new JPanel();
	
	protected JPanel panCoups = new JPanel();
	protected JPanel panCoupsJ1 = new JPanel();
	protected JPanel panCoupsJ2 = new JPanel();
	
	protected JPanel panBoutons = new JPanel();
	protected static JPanel panBoutonsJeux = new JPanel();
	protected JPanel panBoutonsOpt = new JPanel();
	
	// CardLayout
	protected CardLayout clayPersoJ1;
	protected CardLayout clayPersoJ2;
	protected CardLayout clayCoupsJ1;
	protected CardLayout clayCoupsJ2;
	
	/// JLabel
	protected JLabel labJ1 = new JLabel("Joueur 1");
	protected JLabel labJ2 = new JLabel("Joueur 2");
	
	protected JLabel labPoint = new JLabel("Point");
	protected JLabel labSet = new JLabel("Set");
	protected JLabel labManche = new JLabel("Manche");
	protected JLabel labMatch = new JLabel("Match");
	
	protected JLabel labPointJ1 = new JLabel("0");
	protected JLabel labSetJ1 = new JLabel("0");
	protected JLabel labMancheJ1 = new JLabel("0");
	protected JLabel labMatchJ1 = new JLabel("0");
	
	protected JLabel labPointJ2 = new JLabel("0");
	protected JLabel labSetJ2 = new JLabel("0");
	protected JLabel labMancheJ2 = new JLabel("0");
	protected JLabel labMatchJ2 = new JLabel("0");
	
	protected JLabel labVersus = new JLabel("VS");
	
	protected static JLabel labComment;
	protected JLabel picLabCoupJ1;
	protected JLabel picLabCoupJ2;
	
	protected JLabel picLabIconJ1;
	protected JLabel picLabIconJ2;
	
	protected JLabel picLabSttPersoJ1;
	protected JLabel picLabSttPersoJ2;
	
	protected Bouton b1;
	protected Bouton b2;
	protected Bouton b3;
	
	protected String imgPath = "/";
	
	protected String[] tabCoups = {imgPath+"unknow.png",imgPath+"jan.png",imgPath+"ken.png",imgPath+"pon.png"};
	
	public Windows() {
		this.setTitle("Jan! Ken! Pon!");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	    this.setLocation(0, 0);
	    this.setResizable(false);
	    this.setSize(700, 650);
	    
	    panJ1.setPreferredSize(new Dimension(300, 50));
	    panJ1.setBackground(Color.BLUE);
	    panJ2.setPreferredSize(new Dimension(300, 50));
	    panJ2.setBackground(Color.RED);
	    panPoint.setPreferredSize(new Dimension(200, 50));
	    panPoint.setBackground(Color.lightGray);
	    panSet.setPreferredSize(new Dimension(200, 50));
	    panSet.setBackground(Color.green);
	    panManche.setPreferredSize(new Dimension(200, 50));
	    panManche.setBackground(Color.lightGray);
	    panMatch.setPreferredSize(new Dimension(200, 50));
	    panMatch.setBackground(Color.green);
	    panIconJ1.setPreferredSize(new Dimension(300, 150));
	    panIconJ1.setBackground(Color.blue);
	    panIconJ2.setPreferredSize(new Dimension(300, 150));
	    panIconJ2.setBackground(Color.red);
	    panStart.setPreferredSize(new Dimension(200, 50));
	    panStart.setBackground(Color.lightGray);
	    
	    panGridBagScore.setLayout(new GridBagLayout());
	    GridBagConstraints gbcScore = new GridBagConstraints();
	    //------------------------------------------------
	    gbcScore.gridx = 0;
	    gbcScore.gridy = 4;
	    gbcScore.gridheight = 1;
	    gbcScore.gridwidth = 1;
	    panGridBagScore.add(panJ1, gbcScore);
	    panJ1.add(labJ1, SwingConstants.CENTER);
	    Font Joueur = new Font("Arial", Font.BOLD, 25);
	    labJ1.setFont(Joueur);
	    //-----------------
	    gbcScore.gridy = 0;
	    gbcScore.gridx = 1;
	    panGridBagScore.add(panPoint, gbcScore);
	    //-----------------
	    gbcScore.gridwidth = GridBagConstraints.REMAINDER;
	    gbcScore.gridy = 4;
	    gbcScore.gridx = 2;
	    panGridBagScore.add(panJ2, gbcScore);
	    panJ2.add(labJ2, SwingConstants.CENTER);
	    labJ2.setFont(Joueur);
	    //------------------------------------------------
	    gbcScore.gridx = 0;
	    gbcScore.gridy = 0;
	    gbcScore.gridheight = 4;
	    gbcScore.gridwidth = 1;
	    gbcScore.fill = GridBagConstraints.VERTICAL;
	    panGridBagScore.add(panIconJ1, gbcScore);
	    panIconJ1.setLayout(new BorderLayout());
	    panIconJ1.add(panPersoJ1, BorderLayout.NORTH);
	    
	    panPersoJ1.setBackground(Color.white);
	    panPersoJ1.setLayout(clayPersoJ1 = new CardLayout());
	    
	    for (int i=0; i<Tour.partie.getPersos().get(Tour.partie.getJ1()).getPersoSize(); i++) {
	    	picLabSttPersoJ1 = new JLabel(new ImageIcon(getClass().getResource(Tour.partie.getPersos().get(Tour.partie.getJ1()).getPersoIcon(i))));
	    	panPersoJ1.add(picLabSttPersoJ1, "img"+i);
	    }
	    clayPersoJ1.show(panPersoJ1, "img5");
	    //On place un écouteur sur persoJ1
	    Tour.partie.getPersos().get(Tour.partie.getJ1()).addPersoObservateur(new Observateur(){
	      public void updatePerso(int nStatut) {
	        clayPersoJ1.show(panPersoJ1, "img"+nStatut);
	      }
	    });
	    //-----------------
	    gbcScore.gridy = 1;
	    gbcScore.gridx = 1;
	    gbcScore.gridheight = 1;
	    gbcScore.fill = GridBagConstraints.HORIZONTAL;
	    panGridBagScore.add(panSet, gbcScore);
	    
	    gbcScore.gridx = 1;
	    gbcScore.gridy = 2;
	    gbcScore.gridheight = 1;
	    gbcScore.gridwidth = 1;
	    panGridBagScore.add(panManche, gbcScore);
	    
	    gbcScore.gridx = 1;
	    gbcScore.gridy = 3;
	    gbcScore.gridheight = 1;
	    gbcScore.gridwidth = 1;
	    panGridBagScore.add(panMatch, gbcScore);
	    
	    gbcScore.gridx = 1;
	    gbcScore.gridy = 4;
	    gbcScore.gridheight = 1;
	    gbcScore.gridwidth = 1;
	    panGridBagScore.add(panStart, gbcScore);
	    //-----------------
	    gbcScore.gridwidth = GridBagConstraints.REMAINDER;
	    gbcScore.gridheight = 4;
	    gbcScore.gridy = 0;
	    gbcScore.gridx = 2;
	    gbcScore.fill = GridBagConstraints.VERTICAL;
	    panGridBagScore.add(panIconJ2, gbcScore);
	    panIconJ2.setLayout(new BorderLayout());
	    panIconJ2.add(panPersoJ2, BorderLayout.NORTH);
	    
	    panPersoJ2.setBackground(Color.white);
	    panPersoJ2.setLayout(clayPersoJ2 = new CardLayout());
	    
	    for (int i=0; i<Tour.partie.getPersos().get(Tour.partie.getJ2()).getPersoSize(); i++) {
	    	picLabSttPersoJ2 = new JLabel(new ImageIcon(getClass().getResource(Tour.partie.getPersos().get(Tour.partie.getJ2()).getPersoIcon(i))));
	    	panPersoJ2.add(picLabSttPersoJ2, "img"+i);
	    }
	    clayPersoJ2.show(panPersoJ2, "img5");
	    //On place un écouteur sur persoJ2
	    Tour.partie.getPersos().get(Tour.partie.getJ2()).addPersoObservateur(new Observateur(){
	      public void updatePerso(int nStatut) {
		      clayPersoJ2.show(panPersoJ2, "img"+nStatut);
	      }
	    });
	    //------------------------------------------------
	    panPoint.setLayout(new BorderLayout());
	    panSet.setLayout(new BorderLayout());
	    panManche.setLayout(new BorderLayout());
	    panMatch.setLayout(new BorderLayout());
	    
	    Font scores = new Font("Arial", Font.BOLD, 15);
	    Font scoresNum = new Font("Arial", Font.BOLD, 25);
	    Font comment = new Font("Arial", Font.BOLD, 20);
	    
	    labPoint.setFont(scores);
	    labSet.setFont(scores);
	    labManche.setFont(scores);
	    labMatch.setFont(scores);
	    labPointJ1.setFont(scoresNum);
	    labSetJ1.setFont(scoresNum);
	    labMancheJ1.setFont(scoresNum);
	    labMatchJ1.setFont(scoresNum);
	    labPointJ2.setFont(scoresNum);
	    labSetJ2.setFont(scoresNum);
	    labMancheJ2.setFont(scoresNum);
	    labMatchJ2.setFont(scoresNum);
	    labVersus.setFont(scores);
	    
	    
	    panPoint.add(labPoint, BorderLayout.CENTER);
	    labPoint.setHorizontalAlignment(SwingConstants.CENTER);
	    panSet.add(labSet, BorderLayout.CENTER);
	    labSet.setHorizontalAlignment(SwingConstants.CENTER);
	    panManche.add(labManche, BorderLayout.CENTER);
	    labManche.setHorizontalAlignment(SwingConstants.CENTER);
	    panMatch.add(labMatch, BorderLayout.CENTER);
	    labMatch.setHorizontalAlignment(SwingConstants.CENTER);
	    
	    panPoint.add(labPointJ1, BorderLayout.WEST);
	    panSet.add(labSetJ1, BorderLayout.WEST);
	    panManche.add(labMancheJ1, BorderLayout.WEST);
	    panMatch.add(labMatchJ1, BorderLayout.WEST);
	    
	    panPoint.add(labPointJ2, BorderLayout.EAST);
	    panSet.add(labSetJ2, BorderLayout.EAST);
	    panManche.add(labMancheJ2, BorderLayout.EAST);
	    panMatch.add(labMatchJ2, BorderLayout.EAST);
	    
	    panStart.add(labVersus);
	    labVersus.setHorizontalAlignment(SwingConstants.CENTER);
	    
	    panComment.setPreferredSize(new Dimension(695, 40));
	    
	    panCoups.setPreferredSize(new Dimension(695, 200));
	    panCoups.setLayout(new BorderLayout());
	    
	    panBoutons.setPreferredSize(new Dimension(695, 107));
	    panBoutons.setLayout(new BorderLayout());
	    
	    panGridBagAction.setLayout(new GridBagLayout());
	    GridBagConstraints gbcCtnr = new GridBagConstraints();
	    panGridBagAction.setBackground(Color.black);
	    
	    //On place un écouteur sur scoreJ2
	    Tour.partie.getScores().get(Tour.partie.getJ2()).addScoreObservateur(new ObservateurScores() {
	      public void updateScore(int point, int set, int manche, int match) {
	    	  labPointJ2.setText(""+point);
	    	  labSetJ2.setText(""+set);
	    	  labMancheJ2.setText(""+manche);
	    	  labMatchJ2.setText(""+match);
	      }
	    });
	    
	    Tour.partie.getScores().get(Tour.partie.getJ1()).addScoreObservateur(new ObservateurScores() {
		      public void updateScore(int point, int set, int manche, int match) {
		    	  labPointJ1.setText(""+point);
		    	  labSetJ1.setText(""+set);
		    	  labMancheJ1.setText(""+manche);
		    	  labMatchJ1.setText(""+match);
		      }
		    });
	    //------------------------------------------------
	    gbcCtnr.gridx = 0;
	    gbcCtnr.gridy = 0;
	    gbcCtnr.gridheight = 1;
	    gbcCtnr.gridwidth = GridBagConstraints.REMAINDER;;
	    panGridBagAction.add(panComment, gbcCtnr);
	    panComment.add(labComment = new JLabel("Jouer !"));
	    labComment.setHorizontalAlignment(SwingConstants.CENTER);
	    labComment.setFont(comment);
	    
	    gbcCtnr.gridy = 1;
	    panCoupsJ1.setBackground(Color.white);
	    panCoupsJ2.setBackground(Color.white);
	    panGridBagAction.add(panCoups, gbcCtnr);

	    panCoupsJ1.setPreferredSize(new Dimension(350, 200));
	    panCoups.add(panCoupsJ1, BorderLayout.WEST);

	    panCoupsJ2.setPreferredSize(new Dimension(350, 200));
	    panCoups.add(panCoupsJ2, BorderLayout.EAST);

	    panCoupsJ1.setLayout(clayCoupsJ1= new CardLayout());
	    panCoupsJ2.setLayout(clayCoupsJ2= new CardLayout());
	    for (int i=0; i<tabCoups.length; i++) {
	    	picLabCoupJ1 = new JLabel(new ImageIcon(getClass().getResource(tabCoups[i])));
	    	picLabCoupJ2 = new JLabel(new ImageIcon(getClass().getResource(tabCoups[i])));
	    	panCoupsJ1.add(picLabCoupJ1, "img"+i);
	    	panCoupsJ2.add(picLabCoupJ2, "img"+i);
	    }
	    
	    clayCoupsJ1.show(panCoupsJ1, "img0");
	    clayCoupsJ2.show(panCoupsJ2, "img0");
	    
	    //On place un écouteur sur persoJ1
	    Tour.partie.getCoups().get(Tour.partie.getJ1()).addCoupObservateur(new ObservateurCoups(){
	      public void updateCoups(int nCoup) {
	    	  clayCoupsJ1.show(panCoupsJ1, "img"+nCoup);
	      }
	    });
	    
	    //On place un écouteur sur persoJ2
	    Tour.partie.getCoups().get(Tour.partie.getJ2()).addCoupObservateur(new ObservateurCoups(){
	      public void updateCoups(int nCoup) {
	    	  clayCoupsJ2.show(panCoupsJ2, "img"+nCoup);
	      }
	    });
	    
	    gbcCtnr.gridy = 2;
	    panGridBagAction.add(panBoutons, gbcCtnr);
	    panBoutons.add(panBoutonsJeux, BorderLayout.NORTH);
	    b1 = new Bouton("Jan", 1,imgPath+"jan.png", 95, this.getWidth());
	    b2 = new Bouton("Ken", 2,imgPath+"ken.png", 95, this.getWidth());
	    b3 = new Bouton("Pon", 3,imgPath+"pon.png", 95, this.getWidth());
	    
	    panBoutonsJeux.add(b1);
	    panBoutonsJeux.add(b2);
	    panBoutonsJeux.add(b3);
	    
	    
	    panBoutons.add(panBoutonsOpt, BorderLayout.SOUTH);
	    //------------------------------------------------
	    
	    panContainer.add(panGridBagScore);
	    panContainer.add(panGridBagAction);
	    
	    this.add(panContainer);
	    this.setVisible(true);
	}
}


Les classes principales Tour, Partie et windows

si vous avez le coeur et le temps je vous remercie beaucoup même si vous me donné une simple piste pour amélioré le code est me rapprocher du bon raisonnement pour crée la structure d'un programme JAVA

Merci bonne journée

3 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
3 déc. 2013 à 14:46
Salut,

Pour la décomposition en classe Métier ok.

Pour la partie observation du modèle par la vue ca a l'air bon (mais je n'ai pas vérifié que tu appelais tes méthodes update).

Par contre, je ne vois pas de couche de contrôle. Tu peux toujours utiliser les listeners, mais dans ce cas, il faudrait les sortir de l'ihm et créer des classes de manière à ce que cette couche apparaisse vraiment.

Et la classe partie qui ne contient que des méthodes et attributs static, c'est une très mauvaise idée, continues avec les objets.
1
seichan94 Messages postés 38 Date d'inscription mardi 29 octobre 2013 Statut Membre Dernière intervention 6 novembre 2014
3 déc. 2013 à 15:37
Bonjour cs_Julien39

Merci pour ta réponse super gentil d'avoir pris du temps.

les update sont sont appelé par la la Classe Tour en fonction des événement

pour le contrôle ce sont principalement les méthode de la classe Tour, Bouton et ReiniThread qui exécute les update de la variable objet et de la vue

ce qui ne va pas comme tu as dit ce sont les static que je ne parvient pas a supprimer pour bien comprendre j'ai décrit l'exécution du programme ci-dessous

exécution du programme :

1)main exécute la méthode creerPartie() de la Classe Tour
---Tour.creerPartie(5,2, 2, 1, 0, "s_", "u_");
2)creerPartie() créer l'objet partie
3) l'objet partie contient :
---Joueur J1
---Joueur J2
---Score score
---Coups coup
---Personnage perso

les objet sont lié par Map à J1 et J2:
J1 et J2 protected final Map<Joueur, Score> scores;
J1 et J2 protected final Map<Joueur, Coups> coups;
J1 et J2 protected final Map<Joueur, Personnage> persos;

		getScores().put(setJ1(new Joueur("J1","Humain")), score = new Score(getJ1().getName()));
		getScores().put(setJ2(new Joueur("J2","COM")), score = new Score(getJ2().getName()));
		coups = new HashMap<Joueur, Coups>();
		getCoups().put(getJ1(), coup = new Coups());
		getCoups().put(getJ2(), coup = new Coups());
		persos = new HashMap<Joueur, Personnage>();
		getPersos().put(getJ1(), perso = new Personnage("s_"));
		getPersos().put(getJ2(), perso = new Personnage("u_"));


un tour de jeu démarre par
1) clic sur bouton (pierre/feuille ou ciseaux)
2) la méthode actionPerformed contenu directement dans le bouton.
3) actionPerf exécute la fonction Action(valBouton) dans la classe Tour
4) Action() fait un random(1à3) et compare va valBouton vs random
------------------
5.1) si joueur1 gagne on donne le point a J1
5.2) si joueur2(random) gagne on donne le point a J2
------------------
6) on test que les point de Jx sont == partie.nbrT
------------------
7.1) si non on rejoue pour le point suivant
7.2) si oui on ajoute un point de set et on reset les point
------------------
8) on fait pareil pour les point de set et de manche et de match
9) si un Joueur atteint nbrMatch le jeu est remis a 0

Le problème avec partie c'est que je n'arrive pas a enlever static de Tour si non la méthode Action() appelé par les boutons ne fonctionne plus.

que faire ?

Merci beaucoup
0
seichan94 Messages postés 38 Date d'inscription mardi 29 octobre 2013 Statut Membre Dernière intervention 6 novembre 2014
Modifié par seichan94 le 3/12/2013 à 13:22
LE RAR avec le projet et les src + le JAR executable
https://drive.google.com/?authuser=0#folders/0B832UElD9cDCMFdaUURjZkxBaG8

merci
0
seichan94 Messages postés 38 Date d'inscription mardi 29 octobre 2013 Statut Membre Dernière intervention 6 novembre 2014
4 déc. 2013 à 13:21
Bonjour a tous,

j'ai fait les modification en fonction des critiques que tu as fait cela dit
quelque chose me dérange dans ce que j'ai fait

j'ai supprimé la classe Tour qui avait que des méthode static et variable static,

resultat :

Package Vue :
-class Windows
Package Contrôle :
-class Bouton
-JanKenPon
Package JanKenPon (metier ? ce sont les objets) :

-Coups
-Joueur
-Personnage
-Score
-Partie (la class contient des methode de controle pour les objet quel contient(coups, joueur1, personnage )).

le code des classe qui ont changées :
Partie :
c'est ici que j'ai fait le plus de modification,c'est la méthode action(int coupJ1) qui va changer le score et le statut du personnage de JoueurX en fonction du résultat des coups joués par J1 et J2

la méthode action(n); est appelé par actionPerformed de Windows.b1(Package vue)

et a présent l'objet partie est instancier dans la classe windows qui contient les actionPerformed ( c'est ce qui me dérange le plus)

package JanKenPon;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import ObserverPartie.ObservablePartie;
import ObserverPartie.ObservateurPartie;
import ObserverScores.ObservateurScores;
import vue.Windows;

public class Partie implements ObservablePartie {
	
	// variable
	protected int egaliteI = 0;
	protected Thread reinitThread;
	
	protected int nbrT;
	protected int nbrS;
	protected int nbrManche;
	protected int nbrMatch;
	protected int nbrSE;
	protected int nbrJoueur;
	protected String comment;
	
	protected Joueur J1;
	protected Joueur J2;
	
	protected Score score;
	protected Coups coup;
	protected Personnage perso;
	
	protected final Map<Joueur, Score> scores;
	protected final Map<Joueur, Coups> coups;
	protected final Map<Joueur, Personnage> persos;
	
	private ArrayList<ObservateurPartie> listPartieObservateur = new ArrayList<ObservateurPartie>();
	
	public Partie() {
		this.nbrT = 5;
		this.nbrS = 3;
		this.nbrManche = 2;
		this.nbrMatch = 1;
		this.nbrSE = 2;
		this.nbrJoueur = 2;
		this.comment = "Jouer";
		scores = new HashMap<Joueur, Score>();
		getScores().put(J1 = new Joueur("J1","Humain"), score = new Score(getJ1().getName()));
		getScores().put(J2 = new Joueur("J2","COM"), score = new Score(getJ2().getName()));
		coups = new HashMap<Joueur, Coups>();
		getCoups().put(J1, coup = new Coups());
		getCoups().put(J2, coup = new Coups());
		persos = new HashMap<Joueur, Personnage>();
		getPersos().put(J1, perso = new Personnage("s_"));
		getPersos().put(J2, perso = new Personnage("u_"));
	}
	
	public Partie(int nbrT, int nbrS, int nbrManche, int nbrMatch, int nbrSE, String persoJ1, String persoJ2) {
		this.nbrT = nbrT;
		this.nbrS = nbrS;
		this.nbrManche = nbrManche;
		this.nbrMatch = nbrMatch;
		this.nbrSE = nbrSE;
		this.nbrJoueur = 2;
		this.comment = "Jouer";
		scores = new HashMap<Joueur, Score>();
		getScores().put(J1 = new Joueur("J1","Humain"), score = new Score(getJ1().getName()));
		getScores().put(J2 = new Joueur("J2","COM"), score = new Score(getJ2().getName()));
		coups = new HashMap<Joueur, Coups>();
		getCoups().put(J1, coup = new Coups());
		getCoups().put(J2, coup = new Coups());
		persos = new HashMap<Joueur, Personnage>();
		getPersos().put(J1, perso = new Personnage(persoJ1));
		getPersos().put(J2, perso = new Personnage(persoJ2));
	}
	
	public void action(int number) {
		int hasard = (int) (1+3*Math.random());

		this.getCoups().get(this.getJ1()).setCoupJouer(number);
		this.getCoups().get(this.getJ2()).setCoupJouer(hasard);
		
		compareCoups(number, hasard);
		
		reinitThread = new Thread(new ReinitThread());
		reinitThread.start();
	}
	
	protected void compareCoups(int choix, int hasard) {
		if(choix == hasard) {
			egalite();
		} else if (choix == 1 && hasard == 2) {
			J1Win();
		} else if (choix == 2 && hasard == 3) {
			J1Win();
		} else if (choix == 3 && hasard == 1) {
			J1Win();
		} else {
			J2Win();
		}
		setStatut();
	}
	
	protected void egalite() {
		egaliteI++;
		if (egaliteI <= 1)
			setComment("Egalité !");
		else if (egaliteI == 2)
			setComment("Woooh "+egaliteI+"eme Egalité !");
		else if (egaliteI < 5)
			setComment("Enorme "+egaliteI+"eme Egalité !");
		else if (egaliteI >= 5)
			setComment("Whouuu quel tension ! "+egaliteI+"eme Egalité !");
	}
	
	/// win point
	/// humain win
	protected void J1Win() {
		this.getScores().get(this.getJ1()).setPoint();
		setComment("Joueur 1 Gagne le Point");
		if (this.getScores().get(this.getJ1()).getPoint() == this.getNbrT()) {
			// methode set
			Set(this.getJ1(), this.getJ2());
		}
	}
	// fin humain win
	/// COM gagne
	private void J2Win() {
		this.getScores().get(this.getJ2()).setPoint();
		setComment("Joueur 2 Gagne le Point");
		// test si partie.nbrT pour les points est atteint
	}
	// fin com gagne
	// fin win point
	
	private void Set(Joueur a, Joueur b) {
		this.getScores().get(a).setSet();
		advantage();
		/// verifie si le score set >= on nombre de set definit par nbrS avec l'ecart de x set
		if (this.getScores().get(a).getSet() >= this.getNbrS()) {
			if (this.getScores().get(a).getAdv() >= this.getNbrSE()) {
				// methode manche
				Manche(a, b);
			}
		}
	}
	
	protected void Manche(Joueur a, Joueur b){
		this.getScores().get(a).setManche();
		// si les manche == nbrManche definit
		if (this.getScores().get(a).getManche() == this.getNbrManche()) {
			Match(a, b);
		}
	}
	
	protected void Match(Joueur a, Joueur b){
		this.getScores().get(a).setMatch();
		// si les manche == nbrManche definit
		if (this.getScores().get(a).getMatch() == this.getNbrMatch()) {
			Winner(a);
		}
	}
	
	protected void Winner(Joueur a) {
		setComment(a.getName()+" Gagne le match !");
	}
	
	protected void advantage() {
		if (this.getScores().get(this.getJ1()).getSet() > this.getScores().get(this.getJ2()).getSet()) {
			this.getScores().get(this.getJ1()).setAdv(this.getScores().get(this.getJ1()).getSet()-this.getScores().get(this.getJ2()).getSet());
		} else {
			this.getScores().get(this.getJ2()).setAdv(this.getScores().get(this.getJ2()).getSet()-this.getScores().get(this.getJ1()).getSet());
		}
	}
	// controle des score */
	
	/// setstatut perso
	protected void setStatut() {
		int J1 = this.getScores().get(this.getJ1()).getPoint();
		int J2 = this.getScores().get(this.getJ2()).getPoint();
		this.getPersos().get(this.getJ1()).setPersoStatut(this.getNbrT()+(J1-J2));
		this.getPersos().get(this.getJ2()).setPersoStatut(this.getNbrT()+(J2-J1));
	}
	// fin setstatut perso */
	
	public void setComment(String comment) {
		this.comment = comment;
		updatePartieObservateur();
	}

	public String getComment() {
		return this.comment;
	}
	
	public int getNbrT() {
		return this.nbrT;
	}
	
	public int getNbrS() {
		return this.nbrS;
	}
	
	public int getNbrManche() {
		return this.nbrManche;
	}
	
	public int getNbrMatch() {
		return this.nbrMatch;
	}
	
	public int getNbrSE() {
		return this.nbrSE;
	}

	public Joueur getJ2() {
		return J2;
	}

	public Joueur getJ1() {
		return J1;
	}

	public Map<Joueur, Score> getScores() {
		return scores;
	}

	public Map<Joueur, Coups> getCoups() {
		return coups;
	}

	public Map<Joueur, Personnage> getPersos() {
		return persos;
	}
	
	/// reinit des score
		protected void reinit() {
			if (getScores().get(getJ2()).getPoint() == getNbrT() || getScores().get(getJ1()).getPoint() == getNbrT()) {
				getScores().get(getJ1()).resetPoint();
				getScores().get(getJ2()).resetPoint();
				// labComment
				setComment("Jouer !");
				// reinit egalite
				egaliteI = 0;
				//reinit coups jouer
				getCoups().get(getJ1()).setCoupJouer(0);
				getCoups().get(getJ2()).setCoupJouer(0);
				//reinit persos statut
				getPersos().get(getJ1()).setPersoStatut(5);
				getPersos().get(getJ2()).setPersoStatut(5);
			}
			if (getScores().get(getJ1()).getSet() >= getNbrS() || getScores().get(getJ2()).getSet() >= getNbrS()) {
				if (getScores().get(getJ1()).getAdv() >= getNbrSE() || getScores().get(getJ2()).getAdv() >= getNbrSE()) {
					getScores().get(getJ1()).resetSet();
					getScores().get(getJ2()).resetSet();
				}
			}
			if (getScores().get(getJ1()).getManche() == getNbrManche() || getScores().get(getJ2()).getManche() == getNbrManche()) {
				getScores().get(getJ1()).resetManche();
				getScores().get(getJ2()).resetManche();
			}
			if (getScores().get(getJ1()).getMatch() == getNbrMatch() || getScores().get(getJ2()).getMatch() == getNbrMatch()) {
				getScores().get(getJ1()).resetMatch();
				getScores().get(getJ2()).resetMatch();
			}
		}
	
	public class ReinitThread implements Runnable {
		@Override
		public void run() {
			if (getScores().get(getJ2()).getPoint() == getNbrT() || getScores().get(getJ1()).getPoint() == getNbrT()) {
				// TODO Auto-generated method stub
				Windows.panBoutonsJeux.setVisible(false);
				try {
					Thread.sleep(3000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				reinit();
				Windows.panBoutonsJeux.setVisible(true);
			}
		}
	}

	@Override
	public void addPartieObservateur(ObservateurPartie obs) {
		// TODO Auto-generated method stub
		this.listPartieObservateur.add(obs);
	}

	@Override
	public void delPartieObservateur() {
		// TODO Auto-generated method stub
		this.listPartieObservateur = new ArrayList<ObservateurPartie>();
	}

	@Override
	public void updatePartieObservateur() {
		// TODO Auto-generated method stub
		for(ObservateurPartie obs : this.listPartieObservateur )
			obs.updatePartie(this.comment);
	}
}


Windows :
package vue;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

import Controle.Bouton;
import JanKenPon.Partie;
import Observer.Observateur;
import ObserverCoups.ObservateurCoups;
import ObserverPartie.ObservateurPartie;
import ObserverScores.ObservateurScores;

public class Windows extends JFrame {
	
	protected Partie partie = new Partie(5, 2, 2, 1, 1, "S_", "U_");
	
	/// Jpanel
	protected JPanel panContainer = new JPanel();
	protected JPanel panGridBagAction = new JPanel();
	
	protected JPanel panGridBagScore = new JPanel();
	protected JPanel panJ1 = new JPanel();
	protected JPanel panJ2 = new JPanel();
	protected JPanel panPoint = new JPanel();
	protected JPanel panSet = new JPanel();
	protected JPanel panManche = new JPanel();
	protected JPanel panMatch = new JPanel();
	protected JPanel panIconJ1 = new JPanel();
	protected JPanel panIconJ2 = new JPanel();
	
	protected JPanel panStart = new JPanel();
	
	protected JPanel panComment = new JPanel();
	
	protected JPanel panPersonnage = new JPanel();
	protected JPanel panPersoJ1 = new JPanel();
	protected JPanel panPersoJ2 = new JPanel();
	
	protected JPanel panCoups = new JPanel();
	protected JPanel panCoupsJ1 = new JPanel();
	protected JPanel panCoupsJ2 = new JPanel();
	
	protected JPanel panBoutons = new JPanel();
	public static JPanel panBoutonsJeux = new JPanel();
	protected JPanel panBoutonsOpt = new JPanel();
	
	// CardLayout
	protected CardLayout clayPersoJ1;
	protected CardLayout clayPersoJ2;
	protected CardLayout clayCoupsJ1;
	protected CardLayout clayCoupsJ2;
	
	/// JLabel
	protected JLabel labJ1 = new JLabel("Joueur 1");
	protected JLabel labJ2 = new JLabel("Joueur 2");
	
	protected JLabel labPoint = new JLabel("Point");
	protected JLabel labSet = new JLabel("Set");
	protected JLabel labManche = new JLabel("Manche");
	protected JLabel labMatch = new JLabel("Match");
	
	protected JLabel labPointJ1 = new JLabel("0");
	protected JLabel labSetJ1 = new JLabel("0");
	protected JLabel labMancheJ1 = new JLabel("0");
	protected JLabel labMatchJ1 = new JLabel("0");
	
	protected JLabel labPointJ2 = new JLabel("0");
	protected JLabel labSetJ2 = new JLabel("0");
	protected JLabel labMancheJ2 = new JLabel("0");
	protected JLabel labMatchJ2 = new JLabel("0");
	
	protected JLabel labVersus = new JLabel("VS");
	
	protected JLabel labComment;
	protected JLabel picLabCoupJ1;
	protected JLabel picLabCoupJ2;
	
	protected JLabel picLabIconJ1;
	protected JLabel picLabIconJ2;
	
	protected JLabel picLabSttPersoJ1;
	protected JLabel picLabSttPersoJ2;
	
	protected Bouton b1;
	protected Bouton b2;
	protected Bouton b3;
	
	protected String imgPath = "/";
	
	protected String[] tabCoups = {imgPath+"unknow.png",imgPath+"jan.png",imgPath+"ken.png",imgPath+"pon.png"};
	
	public Windows() {
		this.setTitle("Jan! Ken! Pon!");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	    this.setLocation(0, 0);
	    this.setResizable(false);
	    this.setSize(700, 650);
	    
	    panJ1.setPreferredSize(new Dimension(300, 50));
	    panJ1.setBackground(Color.BLUE);
	    panJ2.setPreferredSize(new Dimension(300, 50));
	    panJ2.setBackground(Color.RED);
	    panPoint.setPreferredSize(new Dimension(200, 50));
	    panPoint.setBackground(Color.lightGray);
	    panSet.setPreferredSize(new Dimension(200, 50));
	    panSet.setBackground(Color.green);
	    panManche.setPreferredSize(new Dimension(200, 50));
	    panManche.setBackground(Color.lightGray);
	    panMatch.setPreferredSize(new Dimension(200, 50));
	    panMatch.setBackground(Color.green);
	    panIconJ1.setPreferredSize(new Dimension(300, 150));
	    panIconJ1.setBackground(Color.blue);
	    panIconJ2.setPreferredSize(new Dimension(300, 150));
	    panIconJ2.setBackground(Color.red);
	    panStart.setPreferredSize(new Dimension(200, 50));
	    panStart.setBackground(Color.lightGray);
	    
	    panGridBagScore.setLayout(new GridBagLayout());
	    GridBagConstraints gbcScore = new GridBagConstraints();
	    //------------------------------------------------
	    gbcScore.gridx = 0;
	    gbcScore.gridy = 4;
	    gbcScore.gridheight = 1;
	    gbcScore.gridwidth = 1;
	    panGridBagScore.add(panJ1, gbcScore);
	    panJ1.add(labJ1, SwingConstants.CENTER);
	    Font Joueur = new Font("Arial", Font.BOLD, 25);
	    labJ1.setFont(Joueur);
	    //-----------------
	    gbcScore.gridy = 0;
	    gbcScore.gridx = 1;
	    panGridBagScore.add(panPoint, gbcScore);
	    //-----------------
	    gbcScore.gridwidth = GridBagConstraints.REMAINDER;
	    gbcScore.gridy = 4;
	    gbcScore.gridx = 2;
	    panGridBagScore.add(panJ2, gbcScore);
	    panJ2.add(labJ2, SwingConstants.CENTER);
	    labJ2.setFont(Joueur);
	    //------------------------------------------------
	    gbcScore.gridx = 0;
	    gbcScore.gridy = 0;
	    gbcScore.gridheight = 4;
	    gbcScore.gridwidth = 1;
	    gbcScore.fill = GridBagConstraints.VERTICAL;
	    panGridBagScore.add(panIconJ1, gbcScore);
	    panIconJ1.setLayout(new BorderLayout());
	    panIconJ1.add(panPersoJ1, BorderLayout.NORTH);
	    
	    panPersoJ1.setBackground(Color.white);
	    panPersoJ1.setLayout(clayPersoJ1 = new CardLayout());
	    
	    for (int i=0; i<partie.getPersos().get(partie.getJ1()).getPersoSize(); i++) {
	    	picLabSttPersoJ1 = new JLabel(new ImageIcon(getClass().getResource(partie.getPersos().get(partie.getJ1()).getPersoIcon(i))));
	    	panPersoJ1.add(picLabSttPersoJ1, "img"+i);
	    }
	    clayPersoJ1.show(panPersoJ1, "img5");
	    //On place un écouteur sur persoJ1
	    partie.getPersos().get(partie.getJ1()).addPersoObservateur(
	    new Observateur() {
	      public void updatePerso(int nStatut) {
	        clayPersoJ1.show(panPersoJ1, "img"+nStatut);
	      }
	    });
	    //-----------------
	    gbcScore.gridy = 1;
	    gbcScore.gridx = 1;
	    gbcScore.gridheight = 1;
	    gbcScore.fill = GridBagConstraints.HORIZONTAL;
	    panGridBagScore.add(panSet, gbcScore);
	    
	    gbcScore.gridx = 1;
	    gbcScore.gridy = 2;
	    gbcScore.gridheight = 1;
	    gbcScore.gridwidth = 1;
	    panGridBagScore.add(panManche, gbcScore);
	    
	    gbcScore.gridx = 1;
	    gbcScore.gridy = 3;
	    gbcScore.gridheight = 1;
	    gbcScore.gridwidth = 1;
	    panGridBagScore.add(panMatch, gbcScore);
	    
	    gbcScore.gridx = 1;
	    gbcScore.gridy = 4;
	    gbcScore.gridheight = 1;
	    gbcScore.gridwidth = 1;
	    panGridBagScore.add(panStart, gbcScore);
	    //-----------------
	    gbcScore.gridwidth = GridBagConstraints.REMAINDER;
	    gbcScore.gridheight = 4;
	    gbcScore.gridy = 0;
	    gbcScore.gridx = 2;
	    gbcScore.fill = GridBagConstraints.VERTICAL;
	    panGridBagScore.add(panIconJ2, gbcScore);
	    panIconJ2.setLayout(new BorderLayout());
	    panIconJ2.add(panPersoJ2, BorderLayout.NORTH);
	    
	    panPersoJ2.setBackground(Color.white);
	    panPersoJ2.setLayout(clayPersoJ2 = new CardLayout());
	    
	    for (int i=0; i<partie.getPersos().get(partie.getJ2()).getPersoSize(); i++) {
	    	picLabSttPersoJ2 = new JLabel(new ImageIcon(getClass().getResource(partie.getPersos().get(partie.getJ2()).getPersoIcon(i))));
	    	panPersoJ2.add(picLabSttPersoJ2, "img"+i);
	    }
	    clayPersoJ2.show(panPersoJ2, "img5");
	    //On place un écouteur sur persoJ2
	    partie.getPersos().get(partie.getJ2()).addPersoObservateur(new Observateur(){
	      public void updatePerso(int nStatut) {
		      clayPersoJ2.show(panPersoJ2, "img"+nStatut);
	      }
	    });
	    //------------------------------------------------
	    panPoint.setLayout(new BorderLayout());
	    panSet.setLayout(new BorderLayout());
	    panManche.setLayout(new BorderLayout());
	    panMatch.setLayout(new BorderLayout());
	    
	    Font scores = new Font("Arial", Font.BOLD, 15);
	    Font scoresNum = new Font("Arial", Font.BOLD, 25);
	    Font comment = new Font("Arial", Font.BOLD, 20);
	    
	    labPoint.setFont(scores);
	    labSet.setFont(scores);
	    labManche.setFont(scores);
	    labMatch.setFont(scores);
	    labPointJ1.setFont(scoresNum);
	    labSetJ1.setFont(scoresNum);
	    labMancheJ1.setFont(scoresNum);
	    labMatchJ1.setFont(scoresNum);
	    labPointJ2.setFont(scoresNum);
	    labSetJ2.setFont(scoresNum);
	    labMancheJ2.setFont(scoresNum);
	    labMatchJ2.setFont(scoresNum);
	    labVersus.setFont(scores);
	    
	    
	    panPoint.add(labPoint, BorderLayout.CENTER);
	    labPoint.setHorizontalAlignment(SwingConstants.CENTER);
	    panSet.add(labSet, BorderLayout.CENTER);
	    labSet.setHorizontalAlignment(SwingConstants.CENTER);
	    panManche.add(labManche, BorderLayout.CENTER);
	    labManche.setHorizontalAlignment(SwingConstants.CENTER);
	    panMatch.add(labMatch, BorderLayout.CENTER);
	    labMatch.setHorizontalAlignment(SwingConstants.CENTER);
	    
	    panPoint.add(labPointJ1, BorderLayout.WEST);
	    panSet.add(labSetJ1, BorderLayout.WEST);
	    panManche.add(labMancheJ1, BorderLayout.WEST);
	    panMatch.add(labMatchJ1, BorderLayout.WEST);
	    
	    panPoint.add(labPointJ2, BorderLayout.EAST);
	    panSet.add(labSetJ2, BorderLayout.EAST);
	    panManche.add(labMancheJ2, BorderLayout.EAST);
	    panMatch.add(labMatchJ2, BorderLayout.EAST);
	    
	    panStart.add(labVersus);
	    labVersus.setHorizontalAlignment(SwingConstants.CENTER);
	    
	    panComment.setPreferredSize(new Dimension(695, 40));
	    
	    panCoups.setPreferredSize(new Dimension(695, 200));
	    panCoups.setLayout(new BorderLayout());
	    
	    panBoutons.setPreferredSize(new Dimension(695, 107));
	    panBoutons.setLayout(new BorderLayout());
	    
	    panGridBagAction.setLayout(new GridBagLayout());
	    GridBagConstraints gbcCtnr = new GridBagConstraints();
	    panGridBagAction.setBackground(Color.black);
	    
	    //On place un écouteur sur scoreJ2
	    partie.getScores().get(partie.getJ2()).addScoreObservateur(new ObservateurScores() {
	      public void updateScore(int point, int set, int manche, int match) {
	    	  labPointJ2.setText(""+point);
	    	  labSetJ2.setText(""+set);
	    	  labMancheJ2.setText(""+manche);
	    	  labMatchJ2.setText(""+match);
	      }
	    });
	    
	    partie.getScores().get(partie.getJ1()).addScoreObservateur(new ObservateurScores() {
		      public void updateScore(int point, int set, int manche, int match) {
		    	  labPointJ1.setText(""+point);
		    	  labSetJ1.setText(""+set);
		    	  labMancheJ1.setText(""+manche);
		    	  labMatchJ1.setText(""+match);
		      }
		    });
	    //------------------------------------------------
	    gbcCtnr.gridx = 0;
	    gbcCtnr.gridy = 0;
	    gbcCtnr.gridheight = 1;
	    gbcCtnr.gridwidth = GridBagConstraints.REMAINDER;;
	    panGridBagAction.add(panComment, gbcCtnr);
	    panComment.add(labComment = new JLabel("Jouer !"));
	    labComment.setHorizontalAlignment(SwingConstants.CENTER);
	    labComment.setFont(comment);
	    
	    partie.addPartieObservateur(new ObservateurPartie(){
	      public void updatePartie(String comment) {
	    	  labComment.setText(comment);
	      }
	    });
	    
	    gbcCtnr.gridy = 1;
	    panCoupsJ1.setBackground(Color.white);
	    panCoupsJ2.setBackground(Color.white);
	    panGridBagAction.add(panCoups, gbcCtnr);

	    panCoupsJ1.setPreferredSize(new Dimension(350, 200));
	    panCoups.add(panCoupsJ1, BorderLayout.WEST);

	    panCoupsJ2.setPreferredSize(new Dimension(350, 200));
	    panCoups.add(panCoupsJ2, BorderLayout.EAST);

	    panCoupsJ1.setLayout(clayCoupsJ1= new CardLayout());
	    panCoupsJ2.setLayout(clayCoupsJ2= new CardLayout());
	    for (int i=0; i<tabCoups.length; i++) {
	    	picLabCoupJ1 = new JLabel(new ImageIcon(getClass().getResource(tabCoups[i])));
	    	picLabCoupJ2 = new JLabel(new ImageIcon(getClass().getResource(tabCoups[i])));
	    	panCoupsJ1.add(picLabCoupJ1, "img"+i);
	    	panCoupsJ2.add(picLabCoupJ2, "img"+i);
	    }
	    
	    clayCoupsJ1.show(panCoupsJ1, "img0");
	    clayCoupsJ2.show(panCoupsJ2, "img0");
	    
	    //On place un écouteur sur persoJ1
	    partie.getCoups().get(partie.getJ1()).addCoupObservateur(new ObservateurCoups(){
	      public void updateCoups(int nCoup) {
	    	  clayCoupsJ1.show(panCoupsJ1, "img"+nCoup);
	      }
	    });
	    
	    //On place un écouteur sur persoJ2
	    partie.getCoups().get(partie.getJ2()).addCoupObservateur(new ObservateurCoups(){
	      public void updateCoups(int nCoup) {
	    	  clayCoupsJ2.show(panCoupsJ2, "img"+nCoup);
	      }
	    });
	    
	    gbcCtnr.gridy = 2;
	    panGridBagAction.add(panBoutons, gbcCtnr);
	    panBoutons.add(panBoutonsJeux, BorderLayout.NORTH);
	    b1 = new Bouton("Jan", 1,imgPath+"jan.png", 95, this.getWidth());
	    b2 = new Bouton("Ken", 2,imgPath+"ken.png", 95, this.getWidth());
	    b3 = new Bouton("Pon", 3,imgPath+"pon.png", 95, this.getWidth());
	    
	    panBoutonsJeux.add(b1);
	    panBoutonsJeux.add(b2);
	    panBoutonsJeux.add(b3);
	    b1.addActionListener(new Jan());
	    b2.addActionListener(new Ken());
	    b3.addActionListener(new Pon());
	    
	    panBoutons.add(panBoutonsOpt, BorderLayout.SOUTH);
	    //------------------------------------------------
	    
	    panContainer.add(panGridBagScore);
	    panContainer.add(panGridBagAction);
	    
	    this.add(panContainer);
	    this.setVisible(true);

	}
	
	public class Jan implements ActionListener {
	@Override
		public void actionPerformed(ActionEvent e) {
			// TODO Auto-generated method stub
			 partie.action(1);
		}
	}
	
	public class Ken implements ActionListener {
	@Override
		public void actionPerformed(ActionEvent e) {
			// TODO Auto-generated method stub
			partie.action(2);
		}
	}
	
	public class Pon implements ActionListener {
	@Override
		public void actionPerformed(ActionEvent e) {
			// TODO Auto-generated method stub
			partie.action(3);
		}
	}
}


JanKenPon (main);
package Controle;

import vue.Windows;

public class JanKenPon {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Windows w = new Windows();
	}
}


Je vous remercie pour votre aide
Bonne journée a tous
0
Rejoignez-nous
A voir également