Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% ont trouvé ce document utile (0 vote)
194 vues24 pages

Demineur

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1/ 24

Printed by Colette JOHNEN (profs)

jui 17, 09 15:51 Aide.java Page 1/3 jui 17, 09 15:51 Aide.java Page 2/3
import java.lang.Object;
import java.io.*; return panel;
import javax.xml.parsers.*; }
import org.xml.sax.*;
import javax.swing.tree.*; private JPanel bouton(){
import javax.swing.*; JPanel panel = new JPanel();
import org.xml.sax.helpers.*; btnFermer = new JButton("Fermer");
import java.awt.*;
panel.setLayout(new FlowLayout(FlowLayout.RIGHT));
public class Aide{ panel.add(btnFermer);
SAXParserFactory saxParserFactory;
SAXParser saxParser; return panel;
DefaultMutableTreeNode racine; }
DefaultTreeModel dtm;
JTree tree; public Aide(File rep){
HandlerArbre handler;
XMLReader r; // creation de l’arboresence
JFrame maFen; creerArbo(rep);
JEditorPane jep;
JButton btnFermer; // ajout de l’arbre dans la fenetre
AideListener ecouteur; dtm = new DefaultTreeModel(racine);
tree = new JTree(dtm);
private void creerArbo(File rep){
Reader unReader; maFen = new JFrame("Aide");
racine = new DefaultMutableTreeNode("Aide"); JScrollPane jsp = new JScrollPane(tree);
Container c = maFen.getContentPane();
File dossier[] = rep.listFiles(); c.setLayout(new BorderLayout());
for(int i=0; i<dossier.length; i++){ c.add(jsp, BorderLayout.WEST);
try{
c.add(centerPanel(), BorderLayout.CENTER);
saxParserFactory = SAXParserFactory.newInstance(); c.add(bouton(), BorderLayout.SOUTH);
saxParser = saxParserFactory.newSAXParser();
// ecouteur
File fichier = dossier[i]; ecouteur = new AideListener(this);
unReader = new FileReader(fichier); btnFermer.addActionListener(ecouteur);
r = saxParser.getXMLReader(); tree.addTreeSelectionListener(ecouteur);
handler = new HandlerArbre(fichier);
r.setContentHandler(handler); maFen.setSize(400, 500);
maFen.setVisible(true);
r.parse(new InputSource(unReader)); }

}catch(Exception e){}; }
racine.add(handler.getBranche()); class HandlerArbre extends DefaultHandler{
} DefaultMutableTreeNode branche;
} File fichier;
//creer pile
public void chargerEditor(String url){
public HandlerArbre(File f){
fichier = f;
try{ branche = new DefaultMutableTreeNode(fichier.getName());
}
jep.setContentType("text/html");
//System.out.println("−−−> Passe"); public DefaultMutableTreeNode getBranche(){
jep.read(new FileReader(url), null); return branche;
jep.setEditable(false); }
}catch(Exception ioe){/*System.out.println("Erreur");*/}
} public void startDocument(){
//System.out.println("Les balises de " + fichier.getName() + " s
private JPanel centerPanel(){ ont ");
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout()); }
jep = new JEditorPane(); public void endDocument(){
chargerEditor("./Aide/Conseil.htm"); }
JScrollPane jsp = new JScrollPane(jep);
panel.add(jsp, BorderLayout.CENTER); public void startElement(String uri, String locName, String qName, Attri

vendredi juillet 17, 2009 Aide.java 1/24


Printed by Colette JOHNEN (profs)
jui 17, 09 15:51 Aide.java Page 3/3
butes atr){
int nb = atr.getLength();
if (nb!=0){
for(int i=0; i<nb; i++){
if(atr.getQName(i).compareTo("name")==0){
DefaultMutableTreeNode feuille = new DefaultMuta
bleTreeNode(atr.getValue(i));
//DefaultMutableTreeNode feuille = new DefaultMu
tableTreeNode("toto");
branche.add(feuille);
//System.out.println("\t "+ atr.getValue(i));
}
}
}
}
public void endElement(String uri, String locName, String qName){
}

public void characters(char[] chrs, int d, int n){


}
}

vendredi juillet 17, 2009 Aide.java 2/24


Printed by Colette JOHNEN (profs)
jui 17, 09 15:51 AideListener.java Page 1/1
import java.io.*;
import javax.swing.tree.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class AideListener implements ActionListener, TreeSelectionListener{
Aide arbo;
JButton fermer;
JEditorPane jep;

public AideListener(Aide a){


arbo = a;
fermer = a.btnFermer;
jep = a.jep;
}

public void actionPerformed(ActionEvent e){


try{
jep.setPage("./Aide/Conseil.htm#Statistiques");
}catch(IOException ioe){System.out.println("Erreur chgt jep");}
jep.scrollToReference("Statistiques");
}
private String chemin(TreePath tp){
StringTokenizer st = new StringTokenizer(tp.toString(), "[, ]");
String ficSelect = new String(".");
while(st.hasMoreElements()){
ficSelect = new String(ficSelect +"/"+ st.nextToken() );
}
return ficSelect;
}

public void valueChanged(TreeSelectionEvent tse){


try{
JTree tree = (JTree)tse.getSource();
TreePath tp = tree.getSelectionPath();
String dernier = tp.getLastPathComponent().toString();
if(tp.getPathCount()==2){
arbo.chargerEditor(chemin(tp));
System.out.println("Charger " + chemin(tp)
);
}
if(tp.getPathCount()==3){
arbo.chargerEditor(chemin(tp));
jep.scrollToReference(dernier);
System.out.print("Charger " + chemin(tp.getParentP
ath()));
System.out.println(" // " + dernier);
}
jep.repaint();
}catch(NullPointerException npe){};
}

vendredi juillet 17, 2009 AideListener.java 3/24


Printed by Colette JOHNEN (profs)
jui 17, 09 16:24 DButton.java Page 1/1
import javax.swing.*;
import java.awt.*;
public class DButton extends JButton{
int x,y;

public DButton(int i, int j){


super();
x = i;
y = j;
}
public int getX(){
return x;
}
public int getY(){
return y;
}
}

vendredi juillet 17, 2009 DButton.java 4/24


Printed by Colette JOHNEN (profs)
jui 17, 09 16:25 DCase.java Page 1/1
public class DCase{

private boolean mine;


private int mimesAlentour;
private boolean drapeau;
private boolean decouverte;
private boolean selection;
public DCase(){
mine = false;
decouverte = false;
drapeau = false;
selection = false;
mimesAlentour = −1;
}

public boolean estMine(){


return mine;
}
public int getMinesAlentour(){
return mimesAlentour;
}
public boolean yaDrapreau(){
return drapeau;
}
public boolean estDecouverte(){
return decouverte;
}

public void setDecouverte(){


decouverte = true;
}
public void selectionner(){
selection = true;
}

public void deselectionner(){


selection = false;
}
public boolean select(){
return selection;
}

public void drapeauAction(){


if(!decouverte)
drapeau = (!drapeau);
}
public void poserBombe(){
mine = true;
}

public void setMinesAlentour(int nb){


mimesAlentour = nb;
}
}

vendredi juillet 17, 2009 DCase.java 5/24


Printed by Colette JOHNEN (profs)
jui 17, 09 16:45 DChronoLabel.java Page 1/1
import java.awt.*;
import javax.swing.*;
public class DChronoLabel extends JLabel implements Runnable{
private Thread t;
private boolean enMarche, pause;
private int temps;
public DChronoLabel(){
super();
initChrono();
}
public boolean estActif(){ return enMarche; }
public Thread getThread(){ return t; }

public void run(){


temps = 0;
enMarche = true;
pause = false;
while(enMarche){
temps++;
setText(convertirTemps());
while(pause){ }
try{
t.sleep(1000);
}
catch (InterruptedException ie){;}
}
}
public void mettreEnPause(){ pause = true; }

public void enleverPause(){ pause = false; }


public void stop(){ enMarche = false; }
String convertirTemps(){
Integer i = new Integer(temps);
if(temps<10)
return ("00"+i.toString());
else
if(temps<100)
return ("0"+i.toString());
else
return i.toString();
}
public void initChrono(){
setText("000");
temps = 0;
enMarche = false;
t = new Thread(this);
}
public int getTime(){return temps;}
}

vendredi juillet 17, 2009 DChronoLabel.java 6/24


Printed by Colette JOHNEN (profs)
jui 17, 09 16:26 DFenetre.java Page 1/5 jui 17, 09 16:26 DFenetre.java Page 2/5
import javax.swing.*; this.setSize(20*nb_col + 6, 20*nb_lgn + 50 + 23 + 25);
import java.awt.*; this.setResizable(false);
import java.awt.event.*; this.setVisible(true);
this.repaint();
public class DFenetre extends JFrame {
}
final static int DEBUTANT = 1;
final static int INTER = 2; private void menu(){
final static int EXPERT = 3; /* creation du menu de jeu */
final static int PERSO = 4; jeu = new JMenu("Jeu");
nouvelle = new JMenuItem("Nouvelle partie");
int nb_col; nouvelle.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,
int nb_lgn; InputEvent.CTRL_MASK));
int nb_mines; nouvelle.setToolTipText("Partie avec les mêmes paramètres");
jeu.add(nouvelle);
JMenuBar barreMenus; jeu.addSeparator();
JMenu jeu, options, aPropos;
ButtonGroup groupRadio=new ButtonGroup();
public JRadioButtonMenuItem debutant, intermediaire, expert, perso;
public JMenuItem nouvelle, quitter, aide, createur, design, stat; debutant = new JRadioButtonMenuItem("Débutant");
debutant.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D,
private JLabel minesRestantes; InputEvent.CTRL_MASK));
private DChronoLabel temps; debutant.setToolTipText("81 cases 10 mines");
private JPanel nord;
private int tailleX, tailleY; intermediaire = new JRadioButtonMenuItem("Intermédiaire");
intermediaire.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_I,
private JButton go; InputEvent.CTRL_MASK));
private DButton[][] boutons; intermediaire.setToolTipText("256 cases 40 mines");
private DPartie partie;
expert = new JRadioButtonMenuItem("Expert");
private DImageur imageur; expert.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,
private DPanneau centre; InputEvent.CTRL_MASK));
expert.setToolTipText("480 cases 99 mines");
int type;
perso = new JRadioButtonMenuItem("Personnalisé...");
public DFenetre(DPartie p){ perso.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,
super("Demineur"); InputEvent.CTRL_MASK));
menu(); perso.setToolTipText("Partie avec vos votres paramètres");
type = DEBUTANT;
imageur = new DImageur(p); jeu.add(debutant);
miseEnPage(); jeu.add(intermediaire);
connecterPartie(p); jeu.add(expert);
} jeu.add(perso);
public void connecterPartie(DPartie p){ groupRadio.add(debutant);
partie = p; groupRadio.add(intermediaire);
nb_lgn = p.getMatrice().getHauteur(); groupRadio.add(expert);
nb_col = p.getMatrice().getLargeur(); groupRadio.add(perso);
nb_mines = p.getMatrice().getMines();
jeu.addSeparator();
miseAJourCompteur(); quitter = new JMenuItem("Quitter");
goCool(); quitter.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,
InputEvent.CTRL_MASK));
/* partie centrale : damier */
if(centre!=null) jeu.add(quitter);
getContentPane().remove(centre);
centre = new DPanneau(imageur, nb_lgn, nb_col); /* creation du menu de options */
options = new JMenu("Options");
EcouteurSouris ecouteurSouris =
new EcouteurSouris(this, partie); design = new JMenuItem("Graphisme");
centre.addMouseListener(ecouteurSouris); design.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G,
centre.addMouseMotionListener(ecouteurSouris); InputEvent.CTRL_MASK));
design.setToolTipText("Pour choisir le style d’image");
getContentPane().add(centre, BorderLayout.CENTER); options.add(design);
options.addSeparator();
/* Affichage */
stat = new JMenuItem("Statistiques");

vendredi juillet 17, 2009 DFenetre.java 7/24


Printed by Colette JOHNEN (profs)
jui 17, 09 16:26 DFenetre.java Page 3/5 jui 17, 09 16:26 DFenetre.java Page 4/5
stat.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
InputEvent.CTRL_MASK)); public JMenuItem getStat(){
stat.setToolTipText("Pour connaitre les scores"); return stat;
options.add(stat); }
/* creation du menu A propos */ public JMenuItem getQuitter(){
aPropos = new JMenu("?"); return quitter;
}
aide = new JMenuItem("Aide");
aide.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, public JMenuItem getAide(){
InputEvent.CTRL_MASK)); return aide;
aide.setToolTipText("Pour obtenir de l’aide"); }
aPropos.add(aide);
public JMenuItem getCreateur(){
aPropos.addSeparator(); return createur;
}
createur = new JMenuItem("Créateurs");
createur.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, public int getHauteur(){
InputEvent.CTRL_MASK)); return nb_lgn;
createur.setToolTipText("Par qui ?"); }
aPropos.add(createur);
public int getLargeur(){
/* ajout des menus à la barre */ return nb_col;
barreMenus = new JMenuBar(); }
barreMenus.add(jeu);
barreMenus.add(options); public int getMines(){
barreMenus.add(aPropos); return nb_mines;
this.setJMenuBar(barreMenus); }
}
private void miseEnPage(){
public void ecouterMenu(ActionListener al){ Container c = this.getContentPane();
debutant.addActionListener(al); c.setLayout(new BorderLayout(5, 5));
intermediaire.addActionListener(al);
expert.addActionListener(al); /* partie haute de l’IHM */
perso.addActionListener(al); nord = new JPanel();
nouvelle.addActionListener(al); nord.setLayout(new GridBagLayout());
quitter.addActionListener(al); GridBagConstraints gbc = new GridBagConstraints();
design.addActionListener(al); gbc.anchor = GridBagConstraints.CENTER;
stat.addActionListener(al); gbc.weightx = 1;
aide.addActionListener(al); gbc.weighty = 1;
createur.addActionListener(al); gbc.insets = new Insets(5,0,1,0);

} /* en haut a gauche */
minesRestantes = new JLabel("00");
public JMenuItem getNouvelle(){ //nord.add(minesRestantes, BorderLayout.WEST);
return nouvelle; nord.add(minesRestantes, gbc);
} /* centre */
go = new JButton();
public JMenuItem getDebutant(){
return debutant; goCool();
} nord.add(go, gbc);

public JMenuItem getIntermediaire(){ temps = new DChronoLabel();


return intermediaire; nord.add(temps,gbc);
} c.add(nord, BorderLayout.NORTH);
}
public JMenuItem getExpert(){
return expert; public JButton getGo(){
} return go;
}
public JMenuItem getPerso(){
return perso; public JMenu getMenuPartie(){
} return jeu;
}
public JMenuItem getDesign(){
return design; public DPanneau getPanneauCentral(){
} return centre;

vendredi juillet 17, 2009 DFenetre.java 8/24


Printed by Colette JOHNEN (profs)
jui 17, 09 16:26 DFenetre.java Page 5/5
}

public DImageur getImageur(){


return imageur;
}
public void goPerdu(){
go.setIcon(new ImageIcon(imageur.getRepertoire()+"/Perdu.GIF"));
}

public void goGagne(){


go.setIcon(new ImageIcon(imageur.getRepertoire()+"/Gagne.GIF"));
}
public void goOups(){
go.setIcon(new ImageIcon(imageur.getRepertoire()+"/Oups.GIF"));
}
public void goCool(){
go.setIcon(new ImageIcon(imageur.getRepertoire()+"/Cool.GIF"));
}
public void miseAJourCompteur(){
int nb = partie.getMatrice().getMines()
−partie.getMatrice().nbrDrapeau();
Integer integer = new Integer(nb);
if((nb>9) || (nb<0))
minesRestantes.setText(integer.toString());
else
minesRestantes.setText("0"+integer.toString());
}
public void lancerChrono(){
if(!temps.estActif())
temps.getThread().start();
}
public void arretChrono(){
temps.stop();
}
public void initChrono(){
temps.initChrono();
}
public void pauseChrono(){
temps.mettreEnPause();
}
public void repriseChrono(){
temps.enleverPause();
}
public int getChrono(){
return temps.getTime();
}
}

vendredi juillet 17, 2009 DFenetre.java 9/24


Printed by Colette JOHNEN (profs)
jui 17, 09 16:28 DImageChooser.java Page 1/3 jui 17, 09 16:28 DImageChooser.java Page 2/3
import javax.swing.*; if(i==nbrFichiers)
import java.awt.event.*; return "6.GIF";
import java.io.*;
import java.util.*; for(i=0; i<nbrFichiers ;i++)
if(fichiers[i].equals("7.GIF"))
public class DImageChooser extends JFileChooser { break;
if(i==nbrFichiers)
public DImageChooser(DImageur imageur, DPanneau panneau){ return "7.GIF";
super("./Images/");
setApproveButtonText("OK"); for(i=0; i<nbrFichiers ;i++)
setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); if(fichiers[i].equals("8.GIF"))
int returnVal = this.showOpenDialog(new JFrame()); break;
if(returnVal == JFileChooser.APPROVE_OPTION){ if(i==nbrFichiers)
String path = getSelectedFile().getPath(); return "8.GIF";
String fichier;
if((fichier= estValide(path))==null){ for(i=0; i<nbrFichiers ;i++)
panneau.repaint(); if(fichiers[i].equals("Cool.GIF"))
imageur.setRepertoire(path); break;
} if(i==nbrFichiers)
else return "Cool.GIF";
JOptionPane.showMessageDialog(this,
fichier + " est manquant ou invalide" for(i=0; i<nbrFichiers ;i++)
,"Répertoire invalide",JOptionPane.ERROR_MESSAGE); if(fichiers[i].equals("Croix.GIF"))
} break;
} if(i==nbrFichiers)
return "Croix.GIF";
public String estValide(String rep){ for(i=0; i<nbrFichiers ;i++)
int i; if(fichiers[i].equals("Drapeau.GIF"))
File path = new File(rep); break;
String[] fichiers = path.list(); if(i==nbrFichiers)
int nbrFichiers = fichiers.length; return "Drapeau.GIF";

for(i=0; i<nbrFichiers ;i++)


for(i=0; i<nbrFichiers ;i++) if(fichiers[i].equals("Gagne.GIF"))
if(fichiers[i].equals("1.GIF")) break;
break; if(i==nbrFichiers)
if(i==nbrFichiers) return "Gagne.GIF";
return "1.GIF";
for(i=0; i<nbrFichiers ;i++)
for(i=0; i<nbrFichiers ;i++) if(fichiers[i].equals("Inconnue.GIF"))
if(fichiers[i].equals("2.GIF")) break;
break; if(i==nbrFichiers)
if(i==nbrFichiers) return "Inconnue.GIF";
return "2.GIF";
for(i=0; i<nbrFichiers ;i++)
for(i=0; i<nbrFichiers ;i++) if(fichiers[i].equals("Mine.GIF"))
if(fichiers[i].equals("3.GIF")) break;
break; if(i==nbrFichiers)
if(i==nbrFichiers) return "Mine.GIF";
return "3.GIF";
for(i=0; i<nbrFichiers ;i++)
for(i=0; i<nbrFichiers ;i++) if(fichiers[i].equals("Oups.GIF"))
if(fichiers[i].equals("4.GIF")) break;
break; if(i==nbrFichiers)
if(i==nbrFichiers) return "Oups.GIF";
return "4.GIF";
for(i=0; i<nbrFichiers ;i++)
for(i=0; i<nbrFichiers ;i++) if(fichiers[i].equals("Perdu.GIF"))
if(fichiers[i].equals("5.GIF")) break;
break; if(i==nbrFichiers)
if(i==nbrFichiers) return "Perdu.GIF";
return "5.GIF";
for(i=0; i<nbrFichiers ;i++)
for(i=0; i<nbrFichiers ;i++) if(fichiers[i].equals("Select.GIF"))
if(fichiers[i].equals("6.GIF")) break;
break; if(i==nbrFichiers)

vendredi juillet 17, 2009 DImageChooser.java 10/24


Printed by Colette JOHNEN (profs)
jui 17, 09 16:28 DImageChooser.java Page 3/3
return "Select.GIF";

for(i=0; i<nbrFichiers ;i++)


if(fichiers[i].equals("Vide.GIF"))
break;
if(i==nbrFichiers)
return "Vide.GIF";
return null;
}
}

vendredi juillet 17, 2009 DImageChooser.java 11/24


Printed by Colette JOHNEN (profs)
jui 17, 09 16:28 DImageur.java Page 1/2 jui 17, 09 16:28 DImageur.java Page 2/2
import javax.swing.*; switch(partie.getMatrice().getCase(i,j).getMinesAlentour()){
import java.awt.*; case 0: return new ImageIcon(repertoire+"/Vide.GIF");
case 1: return new ImageIcon(repertoire+"/1.GIF");
public class DImageur{ case 2: return new ImageIcon(repertoire+"/2.GIF");
case 3: return new ImageIcon(repertoire+"/3.GIF");
private DPartie partie; case 4: return new ImageIcon(repertoire+"/4.GIF");
public String repertoire = "./Images/Classic"; case 5: return new ImageIcon(repertoire+"/5.GIF");
case 6: return new ImageIcon(repertoire+"/6.GIF");
public DImageur(DPartie p){ case 7: return new ImageIcon(repertoire+"/7.GIF");
partie = p; case 8: return new ImageIcon(repertoire+"/8.GIF");
} default : return new ImageIcon(repertoire+"/Drapeau.GIF");
}
public String getRepertoire(){ }
return repertoire; }
} }
public void setRepertoire(String s){ }
repertoire = s;
}

ImageIcon getImage(int i, int j){


if(!partie.perdu() && !partie.gagne()){
if(partie.getMatrice().getCase(i,j).yaDrapreau())
return new ImageIcon(repertoire+"/Drapeau.GIF");
if(!partie.getMatrice().getCase(i,j).estDecouverte()){
if(partie.getMatrice().getCase(i,j).select())
return new ImageIcon(repertoire+"/Select.GIF");
else
return new ImageIcon(repertoire+"/Inconnue.GIF");
}
switch(partie.getMatrice().getCase(i,j).getMinesAlentour()){
case 0: return new ImageIcon(repertoire+"/Vide.GIF");
case 1: return new ImageIcon(repertoire+"/1.GIF");
case 2: return new ImageIcon(repertoire+"/2.GIF");
case 3: return new ImageIcon(repertoire+"/3.GIF");
case 4: return new ImageIcon(repertoire+"/4.GIF");
case 5: return new ImageIcon(repertoire+"/5.GIF");
case 6: return new ImageIcon(repertoire+"/6.GIF");
case 7: return new ImageIcon(repertoire+"/7.GIF");
case 8: return new ImageIcon(repertoire+"/8.GIF");
default : return new ImageIcon(repertoire+"/Mine.GIF");
}
}
else{
if(partie.perdu()){
if((partie.getMatrice().getCase(i,j).yaDrapreau())
&& !(partie.getMatrice().getCase(i,j).estMine() ))
return new ImageIcon(repertoire+"/Croix.GIF");
if(partie.getMatrice().getCase(i,j).estMine())
return new ImageIcon(repertoire+"/Mine.GIF");
if(!partie.getMatrice().getCase(i,j).estDecouverte())
return new ImageIcon(repertoire+"/Inconnue.GIF");
switch(partie.getMatrice().getCase(i,j).getMinesAlentour()){
case 0: return new ImageIcon(repertoire+"/Vide.GIF");
case 1: return new ImageIcon(repertoire+"/1.GIF");
case 2: return new ImageIcon(repertoire+"/2.GIF");
case 3: return new ImageIcon(repertoire+"/3.GIF");
case 4: return new ImageIcon(repertoire+"/4.GIF");
case 5: return new ImageIcon(repertoire+"/5.GIF");
case 6: return new ImageIcon(repertoire+"/6.GIF");
case 7: return new ImageIcon(repertoire+"/7.GIF");
case 8: return new ImageIcon(repertoire+"/8.GIF");
default : return new ImageIcon(repertoire+"/Mine.GIF");
}
}
else {

vendredi juillet 17, 2009 DImageur.java 12/24


Printed by Colette JOHNEN (profs)
jui 17, 09 16:46 DMatrice.java Page 1/4 jui 17, 09 16:46 DMatrice.java Page 2/4
import java.lang.*; if(!matrice[i−1][j].estDecouverte())
import java.util.Random; devoilerCase(i−1,j);
}
public class DMatrice{ catch(ArrayIndexOutOfBoundsException e){ }
private int hauteur, largeur, nbMines; // parametres de la partie try{
private DCase[][] matrice; if(!matrice[i−1][j+1].estDecouverte())
private int caseNonMineeRestante; devoilerCase(i−1,j+1);
private boolean explosion; }
catch(ArrayIndexOutOfBoundsException e){ }
public DMatrice(int h, int l, int nb){
hauteur = h; try{
largeur = l; if(!matrice[i][j−1].estDecouverte())
nbMines = nb; devoilerCase(i,j−1);
explosion = false; }
matrice = new DCase[h][l]; catch(ArrayIndexOutOfBoundsException e){ }
for(int i=0; i<hauteur; i++)
for(int j=0; j<largeur; j++) try{
matrice[i][j] = new DCase(); if(!matrice[i][j+1].estDecouverte())
miner(); devoilerCase(i,j+1);
preparerAlentour(); }
caseNonMineeRestante = hauteur*largeur−nbMines; catch(ArrayIndexOutOfBoundsException e){ }
}
try{
public DCase getCase(int i, int j) { if(!matrice[i+1][j−1].estDecouverte())
try{ devoilerCase(i+1,j−1);
return matrice[i][j]; }
} catch(ArrayIndexOutOfBoundsException e){ }
catch(ArrayIndexOutOfBoundsException e){ return null; }
} try{
if(!matrice[i+1][j].estDecouverte())
public int getHauteur(){ devoilerCase(i+1,j);
return hauteur; }
} catch(ArrayIndexOutOfBoundsException e){ }
public int getLargeur(){ try{
return largeur; if(!matrice[i+1][j+1].estDecouverte())
} devoilerCase(i+1,j+1);
}
public int getMines(){ catch(ArrayIndexOutOfBoundsException e){ }
return nbMines; }
} }
}
catch(ArrayIndexOutOfBoundsException e){ }
public void devoilerCase(int i,int j){ }
/* Case découverte */
try{ public void drapeauAction(int i, int j){
matrice[i][j].setDecouverte(); matrice[i][j].drapeauAction();
caseNonMineeRestante−−; }
}
catch(ArrayIndexOutOfBoundsException e){ } private void preparerAlentour(){
int minesCompteur;
/* on regarde si la case est minée */ for(int i=0; i<hauteur; i++)
try{ for(int j=0; j<largeur; j++){
if(matrice[i][j].estMine()) minesCompteur=0;
explosion = true; if(!matrice[i][j].estMine()){
else{ try{
/* propagation éventuelle */ if(matrice[i−1][j−1].estMine())
if(matrice[i][j].getMinesAlentour()==0){ minesCompteur++;
try{ }
if(!matrice[i−1][j−1].estDecouverte()) catch(ArrayIndexOutOfBoundsException e){ }
devoilerCase(i−1,j−1);
} try{
catch(ArrayIndexOutOfBoundsException e){ } if(matrice[i−1][j].estMine())
minesCompteur++;
try{ }

vendredi juillet 17, 2009 DMatrice.java 13/24


Printed by Colette JOHNEN (profs)
jui 17, 09 16:46 DMatrice.java Page 3/4 jui 17, 09 16:46 DMatrice.java Page 4/4
catch(ArrayIndexOutOfBoundsException e){ } return compteur;
}
try{
if(matrice[i−1][j+1].estMine()) public boolean aExplose(){
minesCompteur++; return explosion;
} }
catch(ArrayIndexOutOfBoundsException e){ }
public int getCaseNonMineeRestante(){
try{ return caseNonMineeRestante;
if(matrice[i][j−1].estMine()) }
minesCompteur++;
} public void afficher(){
catch(ArrayIndexOutOfBoundsException e){ } System.out.println("****carte****");
for(int i=0; i<hauteur; i++){
try{ for(int j=0; j<largeur; j++){
if(matrice[i][j+1].estMine()) if(matrice[i][j].estMine())
minesCompteur++; System.out.print("M ");
} else
catch(ArrayIndexOutOfBoundsException e){ } System.out.print(matrice[i][j].getMinesAlentour()+" ");
}
try{ System.out.println("");
if(matrice[i+1][j−1].estMine())
minesCompteur++; }
} System.out.println("****carte connue****");
catch(ArrayIndexOutOfBoundsException e){ } for(int i=0; i<hauteur; i++){
for(int j=0; j<largeur; j++){
try{ if(!matrice[i][j].estDecouverte())
if(matrice[i+1][j].estMine()) System.out.print("* ");
minesCompteur++; else
} if(matrice[i][j].estMine())
catch(ArrayIndexOutOfBoundsException e){ } System.out.print("M ");
else
try{ System.out.print(matrice[i][j].getMinesAlentour()+" ");
if(matrice[i+1][j+1].estMine()) }
minesCompteur++; System.out.println("");
} }
catch(ArrayIndexOutOfBoundsException e){ } }
}
/* les mines ont étés comptés*/
matrice[i][j].setMinesAlentour(minesCompteur);
}
}
}

private void miner(){


int x,y;
int i=0;
Random alea = new Random();
while(i<nbMines){
x = alea.nextInt(hauteur);
y = alea.nextInt(largeur);
if(!matrice[x][y].estMine()){
matrice[x][y].poserBombe();
i++;
}
}
}
public int nbrDrapeau(){
int compteur = 0;
for(int i=0;i<hauteur;i++)
for(int j=0;j<largeur;j++){
if(matrice[i][j].yaDrapreau())
compteur++;
}

vendredi juillet 17, 2009 DMatrice.java 14/24


Printed by Colette JOHNEN (profs)
jui 17, 09 16:32 DPanneau.java Page 1/1
import javax.swing.*;
import java.awt.*;
public class DPanneau extends JPanel{
private DImageur imageur;
private int hauteur, largeur;
public DPanneau(DImageur im, int h, int l){
super();
imageur = im;
hauteur = h;
largeur = l;
}

public void paintComponent(Graphics g){


super.paintComponent(g);
for(int i=0; i<hauteur; i++)
for(int j=0;j<largeur; j++){
g.drawImage(imageur.getImage(i,j).getImage(),j*20,i*20,this);
}
}
}

vendredi juillet 17, 2009 DPanneau.java 15/24


Printed by Colette JOHNEN (profs)
jui 17, 09 16:33 DPartie.java Page 1/1
public class DPartie {

private DMatrice dm;


private boolean commence, perdu;
public DPartie(int h, int l, int nb){
nouvellePartie(h,l,nb);
}
public void nouvellePartie(int h, int l, int nb){
commence = false;
perdu = false;
dm = new DMatrice(h,l,nb);
}

public DMatrice getMatrice(){


return dm;
}
public void commencer(){
commence = true;
}

public boolean gagne(){


return (dm.getCaseNonMineeRestante()==0);
}
public boolean perdu(){
return dm.aExplose();
}
public boolean fini(){
return(commence && (!perdu()) && (!gagne()));
}
}

vendredi juillet 17, 2009 DPartie.java 16/24


Printed by Colette JOHNEN (profs)
jui 17, 09 16:33 EcouteurFenetre.java Page 1/1
import java.awt.event.*;

public class EcouteurFenetre extends WindowAdapter{


private DFenetre fenetre;
public EcouteurFenetre(DFenetre f){
fenetre = f;
}

public void windowClosing(WindowEvent e){


System.exit(0);
}
public void windowIconified(WindowEvent e){
fenetre.pauseChrono();
}
public void windowDeiconified(WindowEvent e){
fenetre.repriseChrono();
}
}

vendredi juillet 17, 2009 EcouteurFenetre.java 17/24


Printed by Colette JOHNEN (profs)
jui 17, 09 16:33 EcouteurGo.java Page 1/1
import java.awt.event.*;

public class EcouteurGo implements ActionListener{


DFenetre fenetre;
DPartie partie;

public EcouteurGo(DFenetre f, DPartie p){


fenetre = f;
partie = p;
}

public void actionPerformed(ActionEvent ae){


fenetre.arretChrono();
fenetre.initChrono();
partie.nouvellePartie(partie.getMatrice().getHauteur(),
partie.getMatrice().getLargeur(),
partie.getMatrice().getMines());
fenetre.connecterPartie(partie);
}
}

vendredi juillet 17, 2009 EcouteurGo.java 18/24


Printed by Colette JOHNEN (profs)
jui 17, 09 16:50 EcouteurMenu.java Page 1/2 jui 17, 09 16:50 EcouteurMenu.java Page 2/2
import java.awt.event.*; "Réalisé par Igor DAURIAC et Nicolas FRANCOIS, Projet IHM",
import javax.swing.*; "Créateurs...",JOptionPane.INFORMATION_MESSAGE);
import java.io.*; }
}
public class EcouteurMenu implements ActionListener{
private DPartie partie;
private DFenetre fenetre;
public EcouteurMenu(DFenetre f, DPartie p){
partie = p;
fenetre = f;
}

public void actionPerformed(ActionEvent ae){


if(ae.getSource() == fenetre.getNouvelle()){
fenetre.arretChrono();
fenetre.initChrono();
partie.nouvellePartie(partie.getMatrice().getHauteur(),
partie.getMatrice().getLargeur(),
partie.getMatrice().getMines());
fenetre.connecterPartie(partie);
}
if(ae.getSource() == fenetre.getDebutant()){
fenetre.arretChrono();
fenetre.initChrono();
partie.nouvellePartie(9,9,10);
fenetre.type = fenetre.DEBUTANT;
fenetre.connecterPartie(partie);
}
if(ae.getSource() == fenetre.getIntermediaire()){
fenetre.arretChrono();
fenetre.initChrono();
partie.nouvellePartie(16,16,40);
fenetre.type = fenetre.INTER;
fenetre.connecterPartie(partie);
}
if(ae.getSource() == fenetre.getExpert()){
fenetre.arretChrono();
fenetre.initChrono();
partie.nouvellePartie(16,30,99);
fenetre.type = fenetre.EXPERT;
fenetre.connecterPartie(partie);
}
if(ae.getSource() == fenetre.getPerso()){
Pref pref = new Pref(fenetre, partie);
fenetre.type = fenetre.PERSO;
}
if(ae.getSource() == fenetre.getDesign()){
DImageChooser choix =
new DImageChooser(fenetre.getImageur(),
fenetre.getPanneauCentral() );
}
if(ae.getSource() == fenetre.getQuitter())
System.exit(0);
if(ae.getSource()==fenetre.getAide()){
File f = new File("./Aide");
Aide a = new Aide(f);;
}
if(ae.getSource()==fenetre.getCreateur())
JOptionPane.showMessageDialog(fenetre,

vendredi juillet 17, 2009 EcouteurMenu.java 19/24


Printed by Colette JOHNEN (profs)
jui 17, 09 16:43 EcouteurSouris.java Page 1/2 jui 17, 09 16:43 EcouteurSouris.java Page 2/2
import java.awt.event.*;
import java.io.*; }
}
me.getComponent().repaint();
public class EcouteurSouris implements MouseListener, MouseMotionListener{ }
private DPartie partie; public void mouseExited(MouseEvent me){
private DFenetre fenetre; if(gauchePresse)
private int sourisX, sourisY; fenetre.goCool();
private boolean gauchePresse; }
public EcouteurSouris(DFenetre f, DPartie p){ public void mouseEntered(MouseEvent me){
partie = p; if(gauchePresse)
fenetre = f; fenetre.goOups();
gauchePresse = false; }
}
public void mouseDragged(MouseEvent me){
public void mouseReleased(MouseEvent me){ int x = me.getX()/20;
sourisX = me.getX()/20; int y = me.getY()/20;
sourisY = me.getY()/20; if(((x!=sourisX) || (y!=sourisY)) && gauchePresse){
try{ try{
if(!partie.perdu() && !partie.gagne() partie.getMatrice().getCase(sourisY,
&& !(partie.getMatrice().getCase(sourisY, sourisX).deselectionner();
sourisX).yaDrapreau())){ }
catch(NullPointerException npe){ }
if(me.getButton()==me.BUTTON1){ sourisX = x;
gauchePresse = false; sourisY = y;
try{ try{
partie.getMatrice().getCase(sourisY, partie.getMatrice().getCase(sourisY,
sourisX).selectionner(); sourisX).selectionner();
} }
catch(NullPointerException npe){ } catch(NullPointerException npe){ }
try{ me.getComponent().repaint();
partie.getMatrice().devoilerCase(sourisY,sourisX); }
} }
catch(NullPointerException npe){ } public void mouseMoved(MouseEvent me){ }
fenetre.lancerChrono();
if(partie.gagne()){ public void mouseClicked(MouseEvent e){ }
fenetre.goGagne(); }
fenetre.arretChrono();
}
else
if(partie.perdu()){
fenetre.goPerdu();
fenetre.arretChrono();
}
else
fenetre.goCool();
}
}
}
catch(NullPointerException npe){ }
me.getComponent().repaint();
}
public void mousePressed(MouseEvent me){
sourisX = me.getX()/20;
sourisY = me.getY()/20;
if(!partie.perdu() && !partie.gagne()){
if(me.getButton()==me.BUTTON1){
gauchePresse = true;
partie.getMatrice().getCase(sourisY,sourisX).selectionner();
fenetre.goOups();
}
if(me.getButton()==me.BUTTON3){
partie.getMatrice().drapeauAction(sourisY,sourisX);
fenetre.miseAJourCompteur();

vendredi juillet 17, 2009 EcouteurSouris.java 20/24


Printed by Colette JOHNEN (profs)
jui 17, 09 16:24 Main.java Page 1/1
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args){
DPartie partie = new DPartie(9,9,10);
DFenetre fenetre = new DFenetre(partie);
EcouteurGo e = new EcouteurGo(fenetre,partie);
fenetre.getGo().addActionListener(e);
EcouteurFenetre ecouteurFenetre = new EcouteurFenetre(fenetre);
fenetre.addWindowListener(ecouteurFenetre);
EcouteurMenu ecouteurMenu = new EcouteurMenu(fenetre,partie);
fenetre.ecouterMenu(ecouteurMenu);
}
}

vendredi juillet 17, 2009 Main.java 21/24


Printed by Colette JOHNEN (profs)
jui 17, 09 16:38 Onglet.java Page 1/2 jui 17, 09 16:38 Onglet.java Page 2/2
import javax.swing.*; }
import java.awt.*;
import java.io.*;
public Onglet(){
public class Onglet{ maFen = new JFrame("Onglet");
JFrame maFen; /* mise en page */
JTabbedPane jtp; miseEnPage();
/* affichage */
private JPanel panelCarte(){ maFen.setSize(300, 200);
JPanel panel = new JPanel(); maFen.setVisible(true);
panel.setLayout(new BorderLayout(10,10)); }
panel.add(new JTextArea("Carte"), BorderLayout.CENTER); }
return panel;
}

private JPanel panelCasierJud(){


JPanel panel = new JPanel();
panel.setLayout(new BorderLayout(10,10));
panel.add(new JTextArea("Casier Judiciaire"),
BorderLayout.CENTER);
return panel;
}

private JPanel panelDebutant(){


JPanel panel = new JPanel();
panel.setLayout(new BorderLayout(10,10));
panel.add(new JTextArea("Debutant"), BorderLayout.CENTER);
return panel;
}
private JPanel panelConfirme(){
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout(10,10));
panel.add(new JTextArea("Confirme"), BorderLayout.CENTER);
return panel;
}
private JPanel panelExpert(){
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout(10,10));
panel.add(new JTextArea("Expert"), BorderLayout.CENTER);
return panel;
}
private void miseEnPage(){
Container c = maFen.getContentPane();
c.setLayout(new BorderLayout());
JTabbedPane jtp1 = new JTabbedPane();
JTabbedPane jtp2 = new JTabbedPane();
try{
jtp = new JTabbedPane();
}catch(IllegalArgumentException iae){
System.out.println("Erreur construction jtp");
}
jtp1.add(panelCarte(), "Carte");
jtp1.add(panelCasierJud(), "Casier Judiciaire");

jtp2.add(panelDebutant(), "Debutant");
jtp2.add(panelConfirme(), "Confirme");
jtp2.add(panelExpert(), "Expert");
jtp.add(jtp1, "jtp1");
jtp.add(jtp2, "jtp2");
c.add(jtp, BorderLayout.CENTER);

vendredi juillet 17, 2009 Onglet.java 22/24


Printed by Colette JOHNEN (profs)
jui 17, 09 16:41 Pref.java Page 1/3 jui 17, 09 16:41 Pref.java Page 2/3
import javax.swing.*;
import java.awt.*; private JPanel saisie(){
import java.awt.event.*; /* Creation */
jtfLargeur = new JTextField(Integer.toString(largeur));
public class Pref implements ActionListener, FocusListener{ jtfHauteur = new JTextField(Integer.toString(hauteur));
jtfMines = new JTextField(Integer.toString(mines));
JFrame maFen; JPanel panel = new JPanel();
JTextField jtfLargeur, jtfHauteur, jtfMines; /* Ajout */
JLabel jlLargeur, jlHauteur, jlMines; panel.setLayout(new GridLayout(3,1, 15,5));
JButton btnOk, btnAnnuler; panel.add(jtfLargeur);
panel.add(jtfHauteur);
static int NB_MINES_MIN = 10; panel.add(jtfMines);
static int NB_MINES_MAX = 665; /* Retour */
static int DIMENSION_MIN = 9; return panel;
static int DIMENSION_MAX = 25; }
int hauteur, largeur, mines; private JPanel boutons(){
/* Creation */
boolean validation = false; btnOk = new JButton("Ok");
btnAnnuler = new JButton("Annuler");
private DFenetre fenetre; /* Ajout */
private DPartie partie; JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
public Pref(int lng, int lrg, int nbMines){ panel.add(btnOk, BorderLayout.NORTH);
maFen = new JFrame("Preferences"); panel.add(btnAnnuler, BorderLayout.SOUTH);
hauteur = lng; /* Retour */
largeur = lrg; return panel;
mines = nbMines; }
miseEnPage();
ajoutEcouteurs(); private void ajoutEcouteurs(){
maFen.setSize(300, 200); btnOk.addActionListener(this);
maFen.setVisible(true); btnAnnuler.addActionListener(this);
}
jtfLargeur.addFocusListener(this);
jtfHauteur.addFocusListener(this);
public Pref(DFenetre fen, DPartie p){ jtfMines.addFocusListener(this);
maFen = new JFrame("Preferences"); }
fenetre = fen;
partie = p; private void miseEnPage(){
System.out.println("Choix"); Container c = maFen.getContentPane();

hauteur = fenetre.getHauteur(); // Ajout des lables, zones de saisie et des boutons


largeur = fenetre.getLargeur(); Container container = new Container();
mines = fenetre.getMines(); container.setLayout(new BorderLayout(20, 0));
container.add(label(), BorderLayout.WEST);
miseEnPage(); container.add(saisie(), BorderLayout.CENTER);
ajoutEcouteurs(); container.add(boutons(), BorderLayout.EAST);
maFen.setSize(300, 200); c.setLayout(new BorderLayout());
maFen.setVisible(true); c.add(container, BorderLayout.NORTH);
} }

private JPanel label(){


/* Creation */ public void actionPerformed(ActionEvent e){
jlLargeur = new JLabel("Largeur");
jlHauteur = new JLabel("Hauteur"); if(e.getSource().equals(btnOk)){
jlMines = new JLabel("Mines"); validation = true;
JPanel panel = new JPanel(); maFen.setVisible(false);
/* Ajout */
panel.setLayout(new GridLayout(3,1, 15,5)); hauteur = Integer.parseInt(jtfHauteur.getText());
panel.add(jlLargeur); largeur = Integer.parseInt(jtfLargeur.getText());
panel.add(jlHauteur); mines = Integer.parseInt(jtfMines.getText());
panel.add(jlMines); if (mines>hauteur*largeur)
/* Retour */ mines = hauteur*largeur−5;
return panel;
} fenetre.arretChrono();

vendredi juillet 17, 2009 Pref.java 23/24


Printed by Colette JOHNEN (profs)
jui 17, 09 16:41 Pref.java Page 3/3
fenetre.initChrono();

partie.nouvellePartie(hauteur,largeur,mines);
fenetre.connecterPartie(partie);
}
else{
validation = false;
}
}
public void focusGained(FocusEvent e){ }
public void focusLost(FocusEvent e){
JTextField jtf = (JTextField)e.getSource();
int val = Integer.parseInt(jtf.getText());
if(jtf.equals(jtfMines)){
if(val<NB_MINES_MIN)
jtf.setText(Integer.toString(NB_MINES_MIN));
if(val>NB_MINES_MAX)
jtf.setText(Integer.toString(NB_MINES_MAX));
}
else{
if(val<DIMENSION_MIN)
jtf.setText(Integer.toString(DIMENSION_MIN));
if(val>DIMENSION_MAX)
jtf.setText(Integer.toString(DIMENSION_MAX));
}
}
public boolean getValidation(){return validation;}
public int getLargeur(){return largeur; }

public int getHauteur(){return hauteur;}


public int getMines(){return mines;}
public static void main(String[] args){
Pref p = new Pref(10, 10 ,10);
System.out.println("Fin");
System.out.println(p.getLargeur()+" "+p.getHauteur()+" "
+p.getMines());
}
}

vendredi juillet 17, 2009 Pref.java 24/24

Vous aimerez peut-être aussi