// Code développé par Anaïs Ducourthial et deux co-lycéennes du CIV lors d'un stage Inria d'initiation à la programmaation
import java.awt.event. *;
import javax.swing. *;
// Ici on declare les variables elephants
JLabel e[] = new JLabel[4];
// et les couleurs des Elephants
int c[] = new int[4];
// et les positions des éléphants
int x[] = { 200, 350, 500, 650 };
// comme ca on va pouvoir traiter les 4 elephants avec une boucle
// Gere un clique sur un elephant de numero n
void cliqueElephant(int n) {
if(c[n] == 0) {
e[n].setIcon(getIcon("http://javascool.gforge.inria.fr/documents/sketchbook/javaProg/elephant3.gif"));
c[n] = 1;
} else if(c[n] == 1) {
e[n].setIcon(getIcon("http://javascool.gforge.inria.fr/documents/sketchbook/javaProg/elephant2.gif"));
c[n] = 2;
} else if(c[n] == 2) {
e[n].setIcon(getIcon("http://javascool.gforge.inria.fr/documents/sketchbook/javaProg/elephant1.gif"));
c[n] = 3;
} else if(c[n] == 3) {
c[n] = 4; // ca veut dire plus-d-elephant
getPane().remove(e[n]);
// On lance les cacaouettes
new Cacaouette(n);
}
}
// Ici on definit les cacouette souss forme d'objet pour que chaque paquet de cacaouette soit independant
class Cacaouette {
// Les 4 cacaouettes
JLabel ch1, ch2, cv1, cv2;
// Position des cacaouettes
int n_ch;
// Cree des cacaouettes pour l'elephant de numero n et les fait deplacer
Cacaouette(int n) {
n_ch = n;
// Cree les cacaouettes
ch1 = showIcon("http://javascool.gforge.inria.fr/documents/sketchbook/javaProg/elephanth.gif", x[n_ch], 300, 100, 100, 2);
ch2 = showIcon("http://javascool.gforge.inria.fr/documents/sketchbook/javaProg/elephanth.gif", x[n_ch] + 100, 300, 100, 100, 2);
cv1 = showIcon("http://javascool.gforge.inria.fr/documents/sketchbook/javaProg/elephantv.gif", x[n_ch] + 50, 250, 100, 100, 2);
cv2 = showIcon("http://javascool.gforge.inria.fr/documents/sketchbook/javaProg/elephantv.gif", x[n_ch] + 50, 250, 100, 100, 2);
new Thread(new Runnable() {
public void run() {
// Ces variables deviennent fausses si une cacaouette touche un elephant
boolean toucher_gauche = true, toucher_droit = true;
// Deplace les cacaouettes
for(int i = 0; i < 8 && (toucher_gauche || toucher_droit); i++) {
// Position des cacaouettes gauche et droite
int x_gauche = x[n_ch] - 15 * i, x_droite = x[n_ch] + 100 + 15 * i;
// On deplace les cacouettes
ch1.setLocation(x_gauche, 300);
ch2.setLocation(x_droite, 300);
cv1.setLocation(x[n_ch] + 50, 350 + 15 * i);
cv2.setLocation(x[n_ch] + 50, 250 - 15 * i);
sleep(200);
// Si y a un elephant juste a gauche && qu'on l'a pas encore touche && qu'il est pas explosé && que la cacaouette le touche: on clique
if((n_ch > 0) && toucher_gauche && (c[n_ch - 1] < 4) && (x_gauche <= x[n_ch - 1] + 100)) {
toucher_gauche = false;
cliqueElephant(n_ch - 1);
}
// Si y a un elephant juste a droite && qu'on l'a pas encore touche && qu'il est pas explosé && que la cacaouette le touche: on clique
if((n_ch < 3) && toucher_droit && (c[n_ch + 1] < 4) && (x_droite >= x[n_ch + 1])) {
toucher_droit = false;
cliqueElephant(n_ch + 1);
}
}
// On tue les cacaouettes
ch1.setLocation(-100, -100);
ch2.setLocation(-100, -100);
cv1.setLocation(-100, -100);
cv2.setLocation(-100, -100);
getPane().remove(ch1);
getPane().remove(ch2);
getPane().remove(cv1);
getPane().remove(cv2);
}
}
).start();
}
}
void main() {
// Efface tout
getPane().removeAll();
getPane().setOpaque(true);
getPane().setBackground(java.awt.Color.WHITE);
// Cree les elephants
for(int n = 0; n < 4; n++) {
e[n] = showIcon("http://javascool.gforge.inria.fr/documents/sketchbook/javaProg/elephant" + (n + 1) + ".gif", x[n], 300, 100, 100, 3);
c[n] = 3 - n;
}
// La souris gere les elephants
getPane().addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
// Test si on a clique sur chaque elephant
for(int n = 0; n < 4; n++)
if((e.getX() > x[n]) && (e.getX() < x[n] + 100) && (e.getY() > 300) && (e.getY() < 400)) {
cliqueElephant(n);
}
}
}
);
}