1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
|
package pobj.game.demineur.view;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.InputEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import pobj.game.demineur.model.Case;
import pobj.game.demineur.data.*;
/**
* La répresentation graphique d'une case
* @author caroline chopinaud
*/
public class CaseView extends JButton {
/** La vue du démineur */
private DemineurView view;
/** Le modèle de la case représentée */
private Case caseModel;
/** La colonne où se situe la case */
private int col;
/** La ligne où se situe la case */
private int row;
/** */
private boolean solution = false;
/** le contrôleur associé à la vue */
private CaseController caseController;
// PARTIE STATIQUE (Attributs de classes pour les images)
/** Une image de drapeau */
private final static ImageIcon FLAG = new ImageIcon(CaseView.class.getResource("/pobj/game/demineur/data/drapeau.png"));
/** Une image de ? */
private final static ImageIcon QUESTION = new ImageIcon(CaseView.class.getResource("/pobj/game/demineur/data/question.png"));
/** Une image vide */
private final static ImageIcon VIDE = new ImageIcon(CaseView.class.getResource("/pobj/game/demineur/data/vide.png"));
/** Une image de mine */
private final static ImageIcon MINE = new ImageIcon(CaseView.class.getResource("/pobj/game/demineur/data/mine.png"));
/** Des images de chiffres */
private final static ImageIcon[] TABNUMERO = new ImageIcon[8];
/** bloc d'initialisation du tableau des images */
static {
for (int i = 0; i < TABNUMERO.length; i++){
TABNUMERO[i] = new ImageIcon(CaseView.class.getResource("/pobj/game/demineur/data/"+(i+1)+".png"));
}
}
/**
* Création d'une representation d'une Case
* @param col la colonne de la case
* @param row la ligne de la case
* @param view la vue du Démineur
* @param caseModel le modèle de la case
*/
public CaseView(int col, int row, DemineurView view, Case caseModel){
this.view = view;
this.caseController = new CaseController();
this.col = col;
this.row = row;
this.caseModel = caseModel;
addMouseListener(new CaseController());
}
/**
* Dessine une case suivant son état dans le modèle
*/
public void drawCase() {
if (caseModel.isRevealed()) {
this.setEnabled(false);
if (caseModel.existMine()) {
this.setIcon(MINE);
}
else {
if (caseModel.nbAdjacentMines() != 0) {
this.setIcon(TABNUMERO[caseModel.nbAdjacentMines() - 1]);
}
else {
this.setIcon(VIDE);
}
}
}
else {
if (caseModel.isMarked())
this.setIcon(FLAG);
else if (caseModel.isUndecided())
this.setIcon(QUESTION);
else
this.setIcon(VIDE);
}
//this.repaint(); GEL LE JPANEL DU HAUT !!
}
/**
* Accesseur la ligne de la case
* @return la ligne de la case
*/
public int getRow(){
return row;
}
/**
* Accesseur à la colonne de la case
* @return la colonne de la case
*/
public int getCol(){
return col;
}
@Override
public void paint(Graphics g){
super.paint(g);
drawCase();
}
private class CaseController implements MouseListener {
public CaseController() {}
public void mouseClicked(MouseEvent arg0) {
ViewChangeEvent ve;
/* si c'est un clique gauche */
if ((arg0.getModifiers() & InputEvent.BUTTON1_MASK) != 0) {
//System.out.println("je revele la case " + row + " " + col);
ve = new ViewChangeEvent(ViewChangeEvent.REVEALED, col+2, row+2);
view.fireModelChange(ve);
}
/* si c'est un clique droit */
else if ((arg0.getModifiers() & InputEvent.BUTTON3_MASK) != 0) {
//System.out.println("je marque la case " + row + " " + col);
ve = new ViewChangeEvent(ViewChangeEvent.MARKED, col+2, row+2);
view.fireModelChange(ve);
}
}
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
}
} // CaseView |
Partager