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; } } }