summaryrefslogtreecommitdiff
path: root/Core/Inc/simon.h
diff options
context:
space:
mode:
Diffstat (limited to 'Core/Inc/simon.h')
-rw-r--r--Core/Inc/simon.h111
1 files changed, 111 insertions, 0 deletions
diff --git a/Core/Inc/simon.h b/Core/Inc/simon.h
new file mode 100644
index 0000000..01bcf6f
--- /dev/null
+++ b/Core/Inc/simon.h
@@ -0,0 +1,111 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <time.h>
+#include <unistd.h>
+#include <string.h>
+
+void fonction_led(char* couleur, int position) { //correspondance LEDs
+ if (position==0){
+ printf("( () () () )\n"); //eteind
+ } else if (strcmp(couleur,"R")==0){ //rouge
+ printf("( (R) () () )\n"); //allume (envoie la commande sur le pin correspondant)
+ } else if (strcmp(couleur,"V")==0){ //vert
+ printf("( () (V) () )\n"); //allume (envoie la commande sur le pin correspondant)
+ } else if (strcmp(couleur,"J")==0){ //jaune
+ printf("( () () (J) )\n"); //allume (envoie la commande sur le pin correspondant)
+ }
+}
+
+void affiche_lcd(char* contenu) { //correspondance LCD
+ printf ("[LCD : %s]\n", contenu); //afichage sur l'ecran LCD
+}
+
+char* choix_aleatoire(void) {
+ char* couleur_leds[3]={"R","V","J"}; //nos couleurs de led
+ srand(time(0));
+ int aleatoire = (rand() % (2 - 0 + 1)) + 0; //choix entre 0 et 2 pour avoir 3 valeurs differentes (3 couleurs/leds)
+ char* choix = couleur_leds[aleatoire];
+ return choix;
+}
+
+
+int simon(void) {
+ affiche_lcd("SIMON_STM32");
+
+ int etat_bouton_deux_joueurs = 1; //faire une correspondance au quatrieme bouton
+
+ int score = 0; //ne pas toucher
+ int deuxieme_joueur_joue = 0; //ne pas toucher
+ int score_un=0; //ne pas toucher
+ int score_deux=0; //ne pas toucher
+ char* suite_de_leds[100]={}; //ne pas toucher
+
+ while (1) { //le programme tourne en continue
+
+ int etat_bouton_start = 1; //correspondance bouton bleu
+ int perdu = 0; //ne pas toucher
+ if (etat_bouton_start){
+ affiche_lcd("LET'S GO !");
+ if (etat_bouton_deux_joueurs && !deuxieme_joueur_joue){ //lancement du mode 2J
+ affiche_lcd("MODE 2J");
+ affiche_lcd("J1!");
+ }
+ else if (!etat_bouton_deux_joueurs && !deuxieme_joueur_joue) { //lancement du mode 1J
+ affiche_lcd("MODE 1J");
+ }
+ while (perdu!= 1) { //ici on lance un niveau, tant qu'on a pas perdu
+
+ suite_de_leds[score] = choix_aleatoire();
+ score++;
+ for (int i = 0; i<score; i++){ //allume et eteinds les leds une par une par rapport au niveau
+ fonction_led(suite_de_leds[i], 1); //on
+ fonction_led(suite_de_leds[i], 0); //off
+ sleep(1); //petite attente (1s) pour ne pas avoir toute les leds qui s'allume en meme temps
+ }
+
+ affiche_lcd("A VOUS !");
+ int iLed=0;
+ do { //le joueur appuie sur les boutons
+ char bouton[100];
+ scanf("%s", bouton); //correspondance
+ char* bouton_couleur = bouton; //boutons poussoirs
+
+ if (*bouton_couleur!=*suite_de_leds[iLed]){ //le joueur se trompe
+ affiche_lcd("GAME OVER !");
+ affiche_lcd("SCORE :");
+
+ char score_char[10];
+ sprintf(score_char, "%d", score-1); //rendre un int en char
+
+ affiche_lcd(score_char);
+ perdu = 1;
+ etat_bouton_start=0;
+ } else {
+ perdu = 0; //possiblement enlevable
+ }
+ iLed++;
+ } while (iLed<score && perdu!=1);
+ //tant qu'on a des leds a faire allume et qu'on a pas perdu
+ }
+
+ if (etat_bouton_deux_joueurs && perdu==1 && !deuxieme_joueur_joue){ //si le premier joueur perd en mode 2J
+ affiche_lcd("J2!");
+ etat_bouton_deux_joueurs = 0;
+ perdu = 0;
+ etat_bouton_start=1;
+ score_un = score;
+ deuxieme_joueur_joue = 1;
+ } else if (deuxieme_joueur_joue){ //si tout le monde a joue en mode 2 joueurs, on fait la comparaison des scores
+ score_deux = score;
+ if (score_un>score_deux){affiche_lcd("JOUEUR 1 GAGNE!");}
+ else if (score_un<score_deux){affiche_lcd("JOUEUR 2 GAGNE!");}
+ else {affiche_lcd("EGALITE...");}
+ }
+
+ }
+ score=0;
+
+ }
+
+ return 0;
+}