Appuyer sur 'R' pour démarrer une nouvelle partie
// simon / voir http://codelab.fr/2328
// emoc x codelab.fr / code distribué sous licence GNU-GPL
//
// principe : simon choisit une case, au joueur de cliquer sur la case choisie
// puis simon choisit une 2e case, au joueur de répéter la séquence
// dans cette version il n'y a pas de limite à la longueur de la séquence!
// disposition
// 0 - 1
// 2 - 3
// R pour redémarrer
boolean ATTENTE_JOUEUR = false;
boolean LIRE_SEQUENCE = true;
boolean NOUVELLE_CASE = true;
int touche_pressee = 12;
int compteur = 0;
int compteur_clic = 0;
String sequence_simon = "";
String sequence_joueur = "";
int compteur_carac = 0;
String next_carac = "z";
boolean[] touches = new boolean[4];
color[] touches_couleurs = {color(0, 255, 0, 190),color(255, 0, 0, 190),
color(255, 255, 0, 190), color(0, 0, 255, 190)};
void setup() {
size(400, 400);
frameRate(25);
sequence_simon = "" + floor(random(4));
}
void draw() {
if (ATTENTE_JOUEUR) {
if (compteur_clic > 0) compteur_clic --;
if (NOUVELLE_CASE) {
// comparer les valeurs
if(!sequence_simon.substring(0, sequence_joueur.length()).equals(sequence_joueur)) {
// les 2 séquences sont différentes BUZZZZZ et fin!
println("perdu! (la séquence faisait " + sequence_simon.length() + " cases) r pour recommencer une partie");
NOUVELLE_CASE = false;
sequence_joueur = "";
} else { // les 2 séquences sont identiques, on continue
if (sequence_joueur.length() == sequence_simon.length()) {
if (compteur_clic == 0) {
println("La séquence fait " + sequence_simon.length() + ", on rajoute une case");
sequence_simon += "" + floor(random(4));
ATTENTE_JOUEUR = false;
LIRE_SEQUENCE = true;
NOUVELLE_CASE = false;
}
}
}
}
if (compteur_clic == 0) {
for (int i=0; i < 4; i++) {
touches[i] = false;
}
}
} else {
compteur_clic = 0;
if (LIRE_SEQUENCE) {
compteur = 12;
LIRE_SEQUENCE = false;
} else compteur--;
if (compteur == -6) { // pourquoi -6 ? pour ménager un flash noir qui sépare 2 cases identiques
if (compteur_carac < sequence_simon.length()) { // soit la séquence n'est pas terminée
next_carac = sequence_simon.substring(compteur_carac,compteur_carac+1);
compteur_carac ++;
compteur = 12;
println(next_carac);
} else { // soit on est au bout de la séquence et on passe en mode ATTENTE_JOUEUR
next_carac = "z";
compteur_carac = 0;
sequence_joueur = "";
ATTENTE_JOUEUR = true;
}
}
for (int i=0; i < 4; i++) {
if ((next_carac.equals(""+i)) && (compteur > 0)) {
touches[i] = true;
} else touches[i] = false;
}
}
// affichage ********************************
background(0);
noStroke();
for (int i=0; i < 4; i++) {
float touche_alpha;
if (touches[i]) touche_alpha = 255;
else touche_alpha = 190;
color cc = color(red(touches_couleurs[i]), green(touches_couleurs[i]), blue(touches_couleurs[i]), touche_alpha);
fill(cc);
rect(i%2*(width/2), floor(i/2)*(height/2), width /2, height / 2);
}
}
void mousePressed() {
int case_declenchee = 0;
println("compteur_clic" + compteur_clic);
if ((ATTENTE_JOUEUR) && (compteur_clic == 0)) {
compteur_clic = 6;
case_declenchee = floor((float)mouseX/200) + (floor((float)mouseY/200) * 2);
println("case declenchee" + case_declenchee); // + " xx " + xx + " yy " + yy);
touches[case_declenchee] = true;
sequence_joueur += "" + case_declenchee;
println("sequence joueur : " + sequence_joueur + " / sequence_simon : " + sequence_simon );
NOUVELLE_CASE = true;
}
}
void keyPressed() {
if (key == 'r') {
// RESET
println("Nouvelle partie");
ATTENTE_JOUEUR = false;
LIRE_SEQUENCE = true;
NOUVELLE_CASE = true;
compteur = 0;
compteur_clic = 0;
sequence_simon = "";
sequence_joueur = "";
compteur_carac = 0;
next_carac = "z";
for (int i=0; i < 4; i++) {
touches[i] = false;
}
}
}