diff options
Diffstat (limited to 'Core/Inc/simon.h')
-rw-r--r-- | Core/Inc/simon.h | 111 |
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; +} |