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
|
public class essai2 extends JApplet {
private static final long serialVersionUID = 1L;
class MaThread extends Thread { //============================= Classe MaThread
int r = 0, x = 0, y = 0;
boolean finir;
JPanel panneauDisque;
ImageHandler image;
MaThread(JPanel panel,ImageHandler image) { //----------- Constructeur
this.panneauDisque=panel;
this.image = image;
}
synchronized void stopper() { //------------ Pour arreter de la Thread
finir = true;
notify();
}
public void run() { //------------------- Démarrage de la Thread
finir = false;
//Animation = Ecrire pleins de "Bravo !" dans le fond d'écran
//Cette Animation s'arrête si on clic sur l'écran (finir -> false)
for (int i = 0; i < 30; i++) {
try { sleep(200); }
catch (InterruptedException exc) {finir=true; break;}
if (finir) break;
int L = panneauDisque.getSize().width;
int H = panneauDisque.getSize().height;
Graphics2D g2d = image.getImage(L,H).createGraphics();
g2d.setFont( new Font( "Tiresias PCFont Z", Font.BOLD, 40 ) );
g2d.setColor(new Color((528424*i)%Integer.MAX_VALUE)); //variation de couleur
r += 10 ;
x = (int) (L/2 + r*Math.cos(i*Math.PI/6)); //coordonnées d'une spirale
y = (int) (H/2 - r*Math.sin(i*Math.PI/6));
g2d.drawString( "Bravo !", x, y );
g2d.dispose();
repaint();
}
} // Fin de la méthode run de la thread
} //Fin de la classe MaThread
public class ImageHandler {
BufferedImage image = null;
public BufferedImage getImage() {
return image;
}
public BufferedImage getImage(int width, int height) {
if ( (width>0 && height>0 ) && (image==null || image.getWidth()<width || image.getHeight()<height) ) {
// si la taille du panel est > 0, si l'image n'existe pas ou que l'image précédente était plus petite, on créé une nouvelle image
BufferedImage newimage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
if (image!=null) {
// on dessine l'image précédente dans la nouvelle image, pour ne pas perdre les "bravos" précédents
Graphics2D g=newimage.createGraphics();
g.drawImage(image, 0,0, null);
g.dispose();
}
image=newimage;
}
return image;
}
}
class PanneauCentre extends JPanel { //======================= Classe PanneauCentre
private static final long serialVersionUID = 1L;
JButton boutonGagné;
JButton[] pion = new JButton[15];
boolean bravo = false, finir = false;
MaThread thread = null;
JPanel panneau;
ImageHandler imageHandler = new ImageHandler() ;
public PanneauCentre () { //-------------------------------------- Constructeur
setLayout(new FlowLayout());
//Remplissage de la grille avec des boutons et des labels
for (int k=0 ; k<pion.length; k++) {
pion[k] = new JButton("bouton"+k);
pion[k].setEnabled(false);
add(pion[k]);
JPanel vide = new JPanel();
add(vide);
}
boutonGagné = new JButton ("Valider la partie");
add(boutonGagné);
this.panneau = this;
jeu(); //on lance le jeu
} // Fin du constructeur PanneauCentre
public void paintComponent(Graphics g) { //----- Toile de fond paintComponent
int L = this.getSize().width;
int H = this.getSize().height;
super.paintComponent(g);
if (imageHandler.getImage() != null) g.drawImage(imageHandler.getImage(), 0, 0, null);
} // Fin de PaintComponent
public void jeu() { //----------------- Une partie de jeu
/*
* le déroulement du jeu (diverses instructions)
*/
boutonGagné.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { //validation de la partie
bravo = true;
if ((thread == null)||(!thread.isAlive())) {
thread = new MaThread(panneau,imageHandler);
thread.start(); // déclenchement de l'animation
}
getContentPane().addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){ //arrêt de l'animation dès
if (thread != null) thread.stopper(); //qu'on clique sur l'écran
thread = null;
}
public void mouseReleased(MouseEvent e){
if (thread != null) thread.stopper();
thread = null;
}
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
});
}
});
} //Fin de la méthode "jeu"
}//Fin de la classe PanneauCentre
public void init() {
this.setSize(250, 250);
JPanel panneau = new PanneauCentre();
getContentPane().add(panneau);
}
} |
Partager