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
| public class Image3X3 {
public int dimX = 3;
public int dimY = 3;
JFrame fen1 = new JFrame("Image 3X3");
JPanel centre = new JPanel();
private CoeurTaquin3X3 coeur = new CoeurTaquin3X3();
private int nbrBouton = dimX*dimY;
private JButton[] bouton = new JButton[nbrBouton];
private int nbrFois = 1000;
private String refImage = "images/bugs.png";
private String refBlanc = "images/blanc1.png";
private BufferedImage bufferedImage = null;
private BufferedImage bufferedBlanc = null;
int hauteurFen = 370;
int largeurFen = 350;
int coupJouer = 0;
Image3X3() {
fenetre();
jouer();
}
void jouer() {
ouvreImage();
coeur.melanger(nbrFois);
dessiner();
}
// Ouvre les images
private void ouvreImage() {
try {
bufferedImage = ImageIO.read(this.getClass().getResource(refImage));
}
catch (Exception e) {
e.printStackTrace();
}
try {
bufferedBlanc = ImageIO.read(this.getClass().getResource(refBlanc));
}
catch (Exception e) {
e.printStackTrace();
}
// Calcule la dimension d'une icone, carré d'image
int hauteurIcone = bufferedImage.getHeight()/dimX;
int largeurIcone = bufferedImage.getWidth()/dimY;
// Sépare l'image en icones et l'incorpore dans chaque case du tableau
for (int i=0; i<dimX; i++) {
for (int j=0; j<dimY; j++) {
int noCase = coeur.getNumeroCase(i,j);
if (noCase == nbrBouton) {
coeur.setImageCase(i, j, bufferedBlanc);
}
else {
coeur.setImageCase(i, j, bufferedImage.getSubimage(i*hauteurIcone, j*largeurIcone,largeurIcone,hauteurIcone));
}
}
}
}
void dessiner() {
int k = 0;
for (int i=0; i<dimX; i++) {
for (int j=0; j<dimY; j++) {
// Met les boutons dans une liste
bouton[k] = new JButton();
// Pour chaque bouton, on met un écouteur d'évènement
bouton[k].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// Détermine quel bouton a été cliqué
Object source = e.getSource();
JButton bou = (JButton)source;
// Obtient et nettoie le text du bouton
String texte = bou.getName().trim();
// Si le texte est un nombre, on l'échange avec la case vide
if (unNombre(texte)) {
// Appel de la méthode echanger de la classe CoeurTaquin et transforme le texte en nombre
if (coeur.echanger(Integer.parseInt(texte))) {
coupJouer ++; // Compte le nombres de clic de souris
remplirBoutons(); // Réaffiche les boutons
}
}
// Appel de la méthode enOrdre de la classe CoeurTaquin
if (coeur.enOrdre()) {
remplirBoutons();
JOptionPane.showMessageDialog(fen1, " Bravo!\n" +
" Vous avez réussi!\n" +
" Coups joués = "+coupJouer);
}
}
});
// Ajout des boutons au centre la la fenêtre
centre.add(bouton[k]);
k++;
}
}
remplirBoutons();
}
// Met sur les boutons les numéros de case et les fragments d'image
private void remplirBoutons() {
int k = 0;
for (int i=0; i<dimX; i++) {
for (int j=0; j<dimY; j++) {
// Obtient le numéro de la case et on le met dans le bouton
int noCase = coeur.getNumeroCase(j, i);
if (noCase == nbrBouton) {
bouton[k].setName(" ");
}
else {
bouton[k].setName(String.valueOf(noCase));
}
// Met un fragment sur caque bouton à partir de la classe CoeurTaquin
bouton[k].setIcon(new ImageIcon(coeur.getImageCase(j, i)));
k++;
}
}
}
// Vérifie si c'est un nombre
public static boolean unNombre(String s) {
try {
Integer.parseInt(s);
}
catch(NumberFormatException e) {
return false;
}
return true;
}
// Création de la fenêtre
private void fenetre() {
centre.setLayout(new GridLayout(3, 3, 0, 0));
fen1.setSize(largeurFen, hauteurFen);
fen1.setLocationRelativeTo(null);
fen1.setResizable(false);
fen1.setVisible(true);
fen1.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
fen1.add(centre);
}
} |
Partager