Le pattern mvc

cs_kaba90 Messages postés 1 Date d'inscription lundi 21 décembre 2009 Statut Membre Dernière intervention 28 octobre 2011 - 28 oct. 2011 à 01:18
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 12 nov. 2011 à 19:28
Nonjour est ce que quelqu'un pourrait m'aider a appliquer le pattern mvc sur ce code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.* ;

class TicTacToeVue extends JFrame {

TicTacToe t ;
int x, y, cote ;

class MonEcouteurSouris extends MouseAdapter {
public void mousePressed (MouseEvent e) {
int xSouris = e.getX() ;
int ySouris = e.getY() ;
if (alinterieur(xSouris,ySouris)) {
int i = numeroCaseColonne(xSouris) ;
int j = numeroCaseLigne(ySouris) ;
t.unNouveauCoup (i, j) ;
}
}
}

class EcouteurNouvelleVue implements ActionListener {
public void actionPerformed (ActionEvent e) {
t.nouvelleVue () ;
}
}

class EcouteurRecommence implements ActionListener {
public void actionPerformed (ActionEvent e) {
t.recommence () ;
}
}

class EcouteurFin implements ActionListener {
public void actionPerformed (ActionEvent e) {
t.fin () ;
}
}

class EcouteurAnnule implements ActionListener {
public void actionPerformed (ActionEvent e) {
t.annuleLeDernierCoup () ;
}
}

class EcouteurInterface extends WindowAdapter {
public void windowClosing(WindowEvent e) {
t.cloreVue(TicTacToeVue.this);
}
}

class MonCanvas extends JPanel {
public void paintComponent (Graphics g) {
super.paintComponent (g) ;
redessineLePlateau (g) ;
}
public MonCanvas () {
setPreferredSize(new Dimension(200, 200));
}
}

JLabel statut ;
MonCanvas monCanvas ;

// fonctions de l'application

public TicTacToeVue (TicTacToe t, String numeroVue) {

this.t = t ;

JPanel panneau = new JPanel() ;
panneau.setLayout (new BorderLayout()) ;

JToolBar barreOutils = new JToolBar();
JButton nouvelleVue = new JButton("Nouvelle Vue");
barreOutils.add (nouvelleVue) ;
nouvelleVue.addActionListener(new EcouteurNouvelleVue()) ;
JButton recommence = new JButton("Nouvelle Partie");
barreOutils.add (recommence) ;
recommence.addActionListener(new EcouteurRecommence()) ;
JButton annule = new JButton("Annuler le dernier coup");
barreOutils.add (annule) ;
annule.addActionListener(new EcouteurAnnule()) ;
JButton fin = new JButton("Fin");
barreOutils.add (fin) ;
fin.addActionListener(new EcouteurFin()) ;
panneau.add(barreOutils, BorderLayout.NORTH) ;

monCanvas = new MonCanvas() ;
MonEcouteurSouris monEcouteurSouris = new MonEcouteurSouris() ;
monCanvas.addMouseListener (monEcouteurSouris) ;

JScrollPane carreau = new JScrollPane(monCanvas) ;

panneau.add("Center", carreau) ;

statut = new JLabel (" ") ;
panneau.add("South", statut) ;

this.setContentPane(panneau) ;

addWindowListener (new EcouteurInterface()) ;

this.setTitle("TicTacToe " + numeroVue) ;
this.pack() ;
this.show() ;

}

public void miseAJourVue(String message) {
repaint() ;
statut.setText (message);
}

public void redessineLePlateau (Graphics g) {
int i, j;
x 40 ; y 40 ; cote = 40;
for (i 0; i < 3; i i + 1) {
for (j 0; j < 3; j j + 1) {
g.setColor (Color.yellow) ;
g.fillRect (x + i*cote, y+j*cote, cote, cote) ;
g.setColor (Color.black) ;
g.drawRect (x + i*cote, y+j*cote, cote, cote) ;
}
}
for (i 0; i < 3; i i + 1) {
for (j 0; j < 3; j j + 1) {
if (t.plateauDeJeu[i][j] == t.CASE_JOUEUR1) {
g.setColor (Color.red) ;
g.fillOval (x + i*cote + cote/5, y+j*cote+ cote/5, cote*2/3, cote*2/3) ;
}
else if (t.plateauDeJeu[i][j] == t.CASE_JOUEUR2) {
g.setColor (Color.black) ;
g.fillOval (x + i*cote + cote/5, y+j*cote+ cote/5, cote*2/3, cote*2/3) ;
}
}
}
}

private boolean alinterieur (int xPos, int yPos) {
if ((x < xPos) && (xPos < x+3*cote)
&& (y < yPos) && (yPos < y+3*cote)) {
return true ;
}
else {
return false ;
}
}

private int numeroCaseColonne(int Xpos) {
return (Xpos-x)/cote ;
}

private int numeroCaseLigne(int Ypos) {
return (Ypos-y)/cote ;
}


}

class TicTacToe {

// Donnees

final int CASE_VIDE = 0 ;
final int CASE_JOUEUR1 = 1 ;
final int CASE_JOUEUR2 = 2 ;

final int partieEnCours = 0 ;
final int victoireJoueur1 = 1 ;
final int victoireJoueur2 = 2 ;
final int matchNul = 3 ;

boolean joueur1 ;
boolean termine ;

int plateauDeJeu[][] ;

String [] message =
{ "Le joueur 1 doit jouer !",
"Le joueur 2 doit jouer !",
"Match nul !",
"Victoire du joueur 1 !",
"Victoire du joueur 2 !"
};

Stack coups ;

ArrayList ticTacToeVues = new ArrayList() ;
int nombreDeVues = 0 ;

private void miseAJourVues () {
int i = 0 ;
switch (verifie()) {
case partieEnCours :
termine = false ;
if (joueur1) { i = 0 ; }
else { i=1 ; }
break ;
case matchNul :
termine = true ;
i = 2 ;
break ;
case victoireJoueur1 :
termine = true ;
i = 3 ;
break ;
case victoireJoueur2 :
termine = true ;
i = 4 ;
break ;
}
Iterator it = ticTacToeVues.iterator() ;
while (it.hasNext()) {
((TicTacToeVue) it.next()).miseAJourVue(message[i]) ;
}
}

public void nouvelleVue() {
ticTacToeVues.add(new TicTacToeVue(this, new Integer(++nombreDeVues).toString())) ;
miseAJourVues () ;
}

public void cloreVue(TicTacToeVue tv) {
ticTacToeVues.remove(tv) ;
if (ticTacToeVues.isEmpty()) {fin();}
}

public void fin () {
ticTacToeVues.clear() ;
System.exit(0) ;
}

public TicTacToe () {
plateauDeJeu = new int[3][3] ;
termine = false ;
joueur1 = true ;
coups = new Stack () ;
nouvelleVue() ;
}

public int verifie () {
if ((plateauDeJeu[0][0]==CASE_JOUEUR1) && (plateauDeJeu[0][1]==CASE_JOUEUR1) && (plateauDeJeu[0][2]==CASE_JOUEUR1)) { return victoireJoueur1 ; }
if ((plateauDeJeu[1][0]==CASE_JOUEUR1) && (plateauDeJeu[1][1]==CASE_JOUEUR1) && (plateauDeJeu[1][2]==CASE_JOUEUR1)) { return victoireJoueur1 ; }
if ((plateauDeJeu[2][0]==CASE_JOUEUR1) && (plateauDeJeu[2][1]==CASE_JOUEUR1) && (plateauDeJeu[2][2]==CASE_JOUEUR1)) { return victoireJoueur1 ; }
if ((plateauDeJeu[0][0]==CASE_JOUEUR1) && (plateauDeJeu[1][0]==CASE_JOUEUR1) && (plateauDeJeu[2][0]==CASE_JOUEUR1)) { return victoireJoueur1 ; }
if ((plateauDeJeu[0][1]==CASE_JOUEUR1) && (plateauDeJeu[1][1]==CASE_JOUEUR1) && (plateauDeJeu[2][1]==CASE_JOUEUR1)) { return victoireJoueur1 ; }
if ((plateauDeJeu[0][2]==CASE_JOUEUR1) && (plateauDeJeu[1][2]==CASE_JOUEUR1) && (plateauDeJeu[2][2]==CASE_JOUEUR1)) { return victoireJoueur1 ; }

if ((plateauDeJeu[0][0]==CASE_JOUEUR2) && (plateauDeJeu[0][1]==CASE_JOUEUR2) && (plateauDeJeu[0][2]==CASE_JOUEUR2)) { return victoireJoueur2 ; }
if ((plateauDeJeu[1][0]==CASE_JOUEUR2) && (plateauDeJeu[1][1]==2) && (plateauDeJeu[1][2]==2)) { return victoireJoueur2 ; }
if ((plateauDeJeu[2][0]==CASE_JOUEUR2) && (plateauDeJeu[2][1]==2) && (plateauDeJeu[2][2]==2)) { return victoireJoueur2 ; }
if ((plateauDeJeu[0][0]==CASE_JOUEUR2) && (plateauDeJeu[1][0]==2) && (plateauDeJeu[2][0]==2)) { return victoireJoueur2 ; }
if ((plateauDeJeu[0][1]==CASE_JOUEUR2) && (plateauDeJeu[1][1]==2) && (plateauDeJeu[2][1]==2)) { return victoireJoueur2 ; }
if ((plateauDeJeu[0][2]==CASE_JOUEUR2) && (plateauDeJeu[1][2]==2) && (plateauDeJeu[2][2]==2)) { return victoireJoueur2 ; }

if ((plateauDeJeu[0][0]==CASE_JOUEUR2) && (plateauDeJeu[1][1]==CASE_JOUEUR2) && (plateauDeJeu[2][2]==CASE_JOUEUR2)) { return victoireJoueur2 ; }
if ((plateauDeJeu[2][0]==CASE_JOUEUR2) && (plateauDeJeu[1][1]==CASE_JOUEUR2) && (plateauDeJeu[0][2]==CASE_JOUEUR2)) { return victoireJoueur2 ; }

if ((plateauDeJeu[0][0]==CASE_JOUEUR1) && (plateauDeJeu[1][1]==CASE_JOUEUR1) && (plateauDeJeu[2][2]==1)) { return victoireJoueur1 ; }
if ((plateauDeJeu[2][0]==CASE_JOUEUR1) && (plateauDeJeu[1][1]==CASE_JOUEUR1) && (plateauDeJeu[0][2]==1)) { return victoireJoueur1 ; }

for (int i = 0; i < 3; i += 1) {
for (int j = 0; j < 3; j += 1) {
if (plateauDeJeu[i][j] == CASE_VIDE) { return partieEnCours ; }
}
}

return matchNul ;
}

public void unNouveauCoup (int i, int j) {
if (!termine) {
if (plateauDeJeu[i][j] == CASE_VIDE) {
if (joueur1) {
plateauDeJeu[i][j]= CASE_JOUEUR1 ;
joueur1 = false ;
}
else {
plateauDeJeu[i][j]= CASE_JOUEUR2 ;
joueur1 = true ;
}
coups.push(new Point(i,j)) ;
miseAJourVues () ;
}
}
}

public void annuleLeDernierCoup () {
if (!coups.empty()) {
Point p = (Point) coups.pop () ;
plateauDeJeu[p.x][p.y] = CASE_VIDE ;
if (joueur1) {joueur1 = false ; }
else { joueur1 = true ; }
}
miseAJourVues () ;
}

public void recommence () {
int i, j ;
for (i 0; i < 3; i i + 1) {
for (j 0; j < 3; j j + 1) {
plateauDeJeu[i][j] = CASE_VIDE ;
}
}
termine = false ;
joueur1 = true ;
while (!coups.empty()) {
coups.pop () ;
}
miseAJourVues () ;
}
}

public class TicTacToe3 {
public static void main (String args[]) {
TicTacToe app = new TicTacToe () ;
}
}

2 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 367
28 oct. 2011 à 07:54
Bonjour,

Un pré-requis pour implémenter le pattern MVC est de disposer d'une modélisation objet ce qui n'est pas vraiment ton cas.

Si tu veux, tu peux jeter un œil à cette source : http://www.javafr.com/codes/IMPLEMENTATION-PATTERN-MVC_52767.aspx

Mais commence pas modéliser ton problème et à créer plusieurs classes correspondant aux entités de ton application. Ensuite seulement, tu pourras faire de MVC
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 367
12 nov. 2011 à 19:28
As tu trouvé une solution satisfaisante ?
0