summaryrefslogtreecommitdiff
path: root/prototype_simon.c
blob: 2d7fb2baf4ec8107fcc99273ae6c063208a25ccd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
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 main(void) {
	affiche_lcd("SIMON_STM32");


	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_deux_joueurs = 0; //faire une correspondance au quatrieme bouton
	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;
}