version finale

This commit is contained in:
Montaigu-Lancelin Emilie 2026-01-15 13:51:09 +01:00
parent 077992fa7b
commit 9646d260cb
8 changed files with 148 additions and 68 deletions

View file

@ -11,9 +11,10 @@
#include "bouton.h" #include "bouton.h"
#define buttonPinRelief D8 #define buttonPinRelief D8
#define buttonPinPlat D6 #define buttonPinPlat D6
#define ledRougePin D7
Application::Application() Application::Application()
: ledPin(D7), colorR(255), colorG(100), colorB(100), boutonRelief(buttonPinRelief), boutonPlat(buttonPinPlat) {} : ledPin(D7), colorR(255), colorG(100), colorB(100), boutonRelief(buttonPinRelief), boutonPlat(buttonPinPlat), ledRouge(ledRougePin){}
Application::~Application() { Application::~Application() {
/*if (boutonRelief != nullptr) { /*if (boutonRelief != nullptr) {
@ -37,9 +38,17 @@ void Application::init(void) {
void Application::run(void) { void Application::run(void) {
gameOver = false;
nb_erreurs = 0;
lcd.clear(); lcd.clear();
lcd.print("On commence a jouer?"); lcd.print("C'est parti !");
delay(1500); delay(1500);
listequestions_init(lcd, boutonRelief, boutonPlat); listequestions_init(lcd, boutonRelief, boutonPlat,ledRouge);
delay(100); delay(100);
if (gameOver) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("GAME OVER");
delay(5000);
}
} }

View file

@ -1,7 +1,7 @@
/********************************************************************* /*********************************************************************
* @file Apllication.h * @file Apllication.h
* @author <mettre l'adresse mail ou nom prenom> * @author Montaigu Emilie, Ouvrard Marine
* @brief Fichier header de l'application * @brief Fichier source de l'application
*********************************************************************/ *********************************************************************/
#ifndef APPLICATION_H_ #ifndef APPLICATION_H_
#define APPLICATION_H_ #define APPLICATION_H_
@ -9,6 +9,7 @@
#include "ecran.h" #include "ecran.h"
#include "bdd.h" #include "bdd.h"
#include "bouton.h" #include "bouton.h"
#include "led.h"
/** /**
* @class Application * @class Application
* @brief Classe Application * @brief Classe Application
@ -22,6 +23,7 @@ public:
ecran lcd; ecran lcd;
bouton boutonRelief; bouton boutonRelief;
bouton boutonPlat; bouton boutonPlat;
led ledRouge;
/** /**
* @fn Application(); * @fn Application();
* @brief Constructeur par defaut * @brief Constructeur par defaut

View file

@ -1,20 +1,21 @@
#include "bdd.h" #include "bdd.h"
#include "ecran.h" #include "ecran.h"
#include "bouton.h" #include "bouton.h"
#include "led.h"
#include <iostream> #include <iostream>
#include <list> #include <list>
#include <string> #include <string>
#include <algorithm> #include <algorithm>
bool gameOver = false;
using namespace std; using namespace std;
int nb_erreurs = 0;
// Tableau avec les réponses aux questions par catégorie // Tableau avec les réponses aux questions par catégorie
// 1 = VRAI et 0 = FAUX // 1 = VRAI et 0 = FAUX
int reponses_disney[] = { 0, 1, 0 }; int reponses_disney[] = { 1, 0, 1, 1, 1, 0, 1, 1, 1, 0 };
int reponses_geographie[] = { 0, 1, 1 }; int reponses_geographie[] = { 1, 1, 0, 1, 1, 1, 0, 0, 1, 0 };
int reponses_sciences[] = { 1, 0, 1 }; int reponses_sciences[] = { 1, 0, 1, 0, 1, 1, 0, 0, 1, 0 };
int reponses_culture[] = { 1, 1, 1 }; int reponses_culture_g[] = { 1, 1, 1, 0, 1, 0, 0, 1, 0, 1 };
int reponses_animaux[] = { 0, 0, 1 }; int reponses_animaux[] = { 1, 0, 1, 1, 0, 1, 1, 1, 0, 0 };
void defileTexte(ecran &lcd, String texte) { void defileTexte(ecran &lcd, String texte) {
int largeur = 32; int largeur = 32;
@ -31,7 +32,7 @@ void defileTexte(ecran &lcd, String texte) {
} }
} }
void listequestions_init(ecran &lcd, bouton &boutonRelief, bouton &boutonPlat) { void listequestions_init(ecran &lcd, bouton &boutonRelief, bouton &boutonPlat,led &ledRouge) {
list<string> listeQ; //Crée la liste de thèmes list<string> listeQ; //Crée la liste de thèmes
list<string>::iterator it; //Déclare un iterateur list<string>::iterator it; //Déclare un iterateur
//Pousse les thème dans une liste //Pousse les thème dans une liste
@ -58,20 +59,21 @@ void listequestions_init(ecran &lcd, bouton &boutonRelief, bouton &boutonPlat) {
//Affiche le thème actuel //Affiche le thème actuel
it = listeQ.begin(); it = listeQ.begin();
advance(it, TActuel); advance(it, TActuel);
lcd.setCursor(0, 1); //lcd.setCursor(0, 1);
lcd.print((*it).c_str()); //lcd.print((*it).c_str());
delay(2000); //delay(2000);
//Affiche les instruction par bouton //Affiche les instructions par bouton
lcd.clear(); lcd.clear();
lcd.setCursor(0, 0); lcd.setCursor(0, 0);
lcd.print(String(TActuel + 1) + (*it).c_str()); lcd.print(String(TActuel + 1) + " " + (*it).c_str());
lcd.setCursor(0, 1); lcd.setCursor(0, 1);
lcd.print("Relief=OK, Plat=>"); lcd.print("Relief OK Plat >");
delay(1000); delay(1000);
// Attends la réponse de l'utilisateur // Attends la réponse de l'utilisateur
bool choixUtilisateur = choix_bouton(boutonRelief, boutonPlat); bool choixUtilisateur = choix_bouton(boutonRelief, boutonPlat);
lcd.clear();
if (choixUtilisateur == 1) { if (choixUtilisateur == 1) {
// Bouton Relief = Valider le thème // Bouton Relief = Valider le thème
@ -82,35 +84,69 @@ void listequestions_init(ecran &lcd, bouton &boutonRelief, bouton &boutonPlat) {
} }
} }
//Banque de questions pour le thème Disney //Banque de questions pour le theme Disney
list<string> Questions_Disney; list<string> Questions_Disney = { "Mickey est une souris ?",
Questions_Disney.push_back("Patrick est le nom du cameleon de Raiponce ?"); "Patrick est le nom du cameleon dans Raiponce ?",
Questions_Disney.push_back("La robe de Tiana est verte ?"); "La robe de Tiana est verte ?",
Questions_Disney.push_back("Cendrillon etait le premier disney ?"); "Simba est un lion ?",
"Elsa est la soeur d Anna ?",
"Aladdin se passe en Chine ?",
"Cendrillon perd une pantoufle en verre ?",
"Ariel est une sirene ?",
"Le Genie est bleu ?",
"Bambi est un cochon ?" };
//Banque de questions pour le thème Geographie //Banque de questions pour le theme Geographie
list<string> Questions_Geographie; list<string> Questions_Geographie;
Questions_Geographie.push_back("Rio de Janeiro est la capitale du Bresil ?"); Questions_Geographie.push_back("Paris est la capitale de la France ?");
Questions_Geographie.push_back("L'Inde est le pays le plus peuple ?"); Questions_Geographie.push_back("Le Sahara est le plus grand desert du monde ?");
Questions_Geographie.push_back("Les Pyrenees Atlantiques ont 64 en numéro de département ?"); Questions_Geographie.push_back("Le Bresil parle principalement espagnol ?");
Questions_Geographie.push_back("La Russie est plus grande que la Chine ?");
Questions_Geographie.push_back("L'Europe est un continent ?");
Questions_Geographie.push_back("Le Nil traverse plus de 5 pays ?");
Questions_Geographie.push_back("L'Australie possede une frontiere terrestre ?");
Questions_Geographie.push_back("Le Mont Blanc se situe en Italie ?");
Questions_Geographie.push_back("L'Afrique est traversee par l'equateur ?");
Questions_Geographie.push_back("Tokyo est la capitale de la Coree du Sud ?");
//Banque de questions pour le thème Sciences //Banque de questions pour le theme Sciences
list<string> Questions_Sciences; list<string> Questions_Sciences;
Questions_Geographie.push_back("Le corps humain contient assez de fer pour faire un clou ?"); Questions_Sciences.push_back("Le corps humain contient assez de fer pour faire un clou ?");
Questions_Geographie.push_back("Les cheveux continuent de pousser après la mort ?"); Questions_Sciences.push_back("Les cheveux continuent de pousser apres la mort ?");
Questions_Geographie.push_back("Le cerveau ne ressent pas la douleur?"); Questions_Sciences.push_back("Le cerveau ne ressent pas la douleur ?");
Questions_Sciences.push_back("L'eau bout toujours a 100 degres Celsius ?");
Questions_Sciences.push_back("La Terre tourne autour du Soleil ?");
Questions_Sciences.push_back("Les plantes produisent de l'oxygene ?");
Questions_Sciences.push_back("Les humains utilisent seulement 10% de leur cerveau ?");
Questions_Sciences.push_back("Le son se propage plus vite dans l'air que dans l'eau ?");
Questions_Sciences.push_back("Le sang est rouge a l'interieur du corps ?");
Questions_Sciences.push_back("Les dinosaures ont vecu en meme temps que les humains ?");
//Banque de questions pour le thème Culture Générale //Banque de questions pour le theme Culture Generale
list<string> Questions_Culture_G; list<string> Questions_Culture_G;
Questions_Geographie.push_back("Le Soleil est une étoile ?"); Questions_Culture_G.push_back("Le Soleil est une etoile ?");
Questions_Geographie.push_back("Le français est parlé sur tous les continents ?"); Questions_Culture_G.push_back("Le francais est parle sur tous les continents ?");
Questions_Geographie.push_back("Les Romains utilisaient déjà le béton ?"); Questions_Culture_G.push_back("Les Romains utilisaient deja le beton ?");
Questions_Culture_G.push_back("La Tour Eiffel a ete construite au XXe siecle ?");
Questions_Culture_G.push_back("L'eau est composee de deux atomes d'hydrogene et d'un atome d'oxygene ?");
Questions_Culture_G.push_back("Napoleon Bonaparte etait italien ?");
Questions_Culture_G.push_back("Le pingouin peut voler ?");
Questions_Culture_G.push_back("La Joconde est exposee au Louvre ?");
Questions_Culture_G.push_back("Le zero a ete invente avant les chiffres romains ?");
Questions_Culture_G.push_back("La Lune influence les marees ?");
//Banque de questions pour le thème Animaux //Banque de questions pour le theme Animaux
list<string> Questions_Animaux; list<string> Questions_Animaux;
Questions_Geographie.push_back("Les requins doivent nager en permanence pour survivre ?"); Questions_Animaux.push_back("Les requins doivent nager en permanence pour survivre ?");
Questions_Geographie.push_back("Les chauves-souris sont aveugles ?"); Questions_Animaux.push_back("Les chauves-souris sont aveugles ?");
Questions_Geographie.push_back("Les poissons dorment ?"); Questions_Animaux.push_back("Les poissons dorment ?");
Questions_Animaux.push_back("Les dauphins sont des mammiferes ?");
Questions_Animaux.push_back("Les autruches peuvent voler ?");
Questions_Animaux.push_back("Les elephants ont une excellente memoire ?");
Questions_Animaux.push_back("Le koala est un marsupial ?");
Questions_Animaux.push_back("Les pieuvres ont trois coeurs ?");
Questions_Animaux.push_back("Le cameleon change de couleur pour se camoufler uniquement ?");
Questions_Animaux.push_back("Les grenouilles respirent uniquement avec leurs poumons ?");
// Lance le quiz selon le thème choisi // Lance le quiz selon le thème choisi
lcd.clear(); lcd.clear();
@ -118,32 +154,32 @@ void listequestions_init(ecran &lcd, bouton &boutonRelief, bouton &boutonPlat) {
case 0: case 0:
lcd.print("Disney"); lcd.print("Disney");
delay(2000); delay(2000);
play(lcd, Questions_Disney, reponses_disney, boutonRelief, boutonPlat); play(lcd, Questions_Disney, reponses_disney, boutonRelief, boutonPlat, ledRouge);
break; break;
case 1: case 1:
lcd.print("Geographie"); lcd.print("Geographie");
delay(2000); delay(2000);
play(lcd, Questions_Geographie, reponses_geographie, boutonRelief, boutonPlat); play(lcd, Questions_Geographie, reponses_geographie, boutonRelief, boutonPlat, ledRouge);
break; break;
case 2: case 2:
lcd.print("Sciences"); lcd.print("Sciences");
delay(2000); delay(2000);
play(lcd, Questions_Sciences, reponses_sciences, boutonRelief, boutonPlat); play(lcd, Questions_Sciences, reponses_sciences, boutonRelief, boutonPlat, ledRouge);
break; break;
case 3: case 3:
lcd.print("Culture Generale"); lcd.print("Culture Generale");
delay(2000); delay(2000);
play(lcd, Questions_Culture_G, reponses_culture, boutonRelief, boutonPlat); play(lcd, Questions_Culture_G, reponses_culture_g, boutonRelief, boutonPlat, ledRouge);
break; break;
case 4: case 4:
lcd.print("Animaux"); lcd.print("Animaux");
delay(2000); delay(2000);
play(lcd, Questions_Animaux, reponses_animaux, boutonRelief, boutonPlat); play(lcd, Questions_Animaux, reponses_animaux, boutonRelief, boutonPlat, ledRouge);
break; break;
} }
} }
void play(ecran &lcd, list<string> Questions, int reponses[], bouton &boutonRelief, bouton &boutonPlat) { void play(ecran &lcd, list<string> Questions, int reponses[], bouton &boutonRelief, bouton &boutonPlat, led &ledRouge) {
int score = 0; int score = 0;
int questionNum = 0; int questionNum = 0;
list<string>::iterator it; list<string>::iterator it;
@ -181,7 +217,16 @@ void play(ecran &lcd, list<string> Questions, int reponses[], bouton &boutonReli
score++; score++;
} else { } else {
lcd.clear(); lcd.clear();
lcd.print("Faux !"); lcd.print("Erreur !");
lcd.setCursor(0, 1);
nb_erreurs++;
lcd.print(String("Nb err: ") + nb_erreurs);
ledRouge.cligno();
if (nb_erreurs == 3) {
gameOver = true;
return;
}
} }
delay(2000); delay(2000);

View file

@ -1,10 +1,12 @@
#ifndef bdd_H #ifndef bdd_H
#define bdd_H #define bdd_H
#include "ecran.h" #include "ecran.h"
#include "led.h"
#include "bouton.h" #include "bouton.h"
#include <list> #include <list>
#include <string> #include <string>
extern bool gameOver;
extern int nb_erreurs;
using namespace std; using namespace std;
//Permet de faire défiler le texte sur l'écran //Permet de faire défiler le texte sur l'écran
@ -12,9 +14,9 @@ using namespace std;
void defileTexte(ecran &lcd, String texte); void defileTexte(ecran &lcd, String texte);
// Affiche les thèmes disponibles et lance le quiz correspondant // Affiche les thèmes disponibles et lance le quiz correspondant
void listequestions_init(ecran &lcd, bouton &boutonRelief, bouton &boutonPlat); void listequestions_init(ecran &lcd, bouton &boutonRelief, bouton &boutonPlat, led &ledRouge);
//Fonction principale pour jouer à un quiz //Fonction principale pour jouer à un quiz
void play(ecran &lcd, list<string> Questions, int reponses[], bouton &boutonRelief, bouton &boutonPlat); void play(ecran &lcd, list<string> Questions, int reponses[], bouton &boutonRelief, bouton &boutonPlat, led &ledRouge);
#endif #endif

View file

@ -8,45 +8,49 @@ bouton::bouton()
bouton::bouton(int pin) bouton::bouton(int pin)
: capteur(pin), etat(0) {} : capteur(pin), etat(0) {}
//ccesseur de etat //Accesseur de etat
bool bouton::lire_etat() { bool bouton::lire_etat() {
bool res;
int buttonState = digitalRead(this->getpin()); int buttonState = digitalRead(this->getpin());
if (buttonState == HIGH) res = 1; if (buttonState == HIGH) {
else res = 0; this->etat = 1; // Met à jour etat
return res; } else {
this->etat = 0; // Met à jour etat
}
return this->etat;
}
// Redéfinition de l'opérateur
bool bouton::operator!() const {
return this->etat == 0;
} }
bool choix_bouton(bouton &Brelief, bouton &Bplat) { bool choix_bouton(bouton &Brelief, bouton &Bplat) {
Serial.println("A"); //a enlever
//Attends que les 2 bouttons soient relachés //Attends que les 2 bouttons soient relachés
while (Brelief.lire_etat() == 1 || Bplat.lire_etat() == 1) { while (!(!Brelief) || !(!Bplat)) {
Brelief.lire_etat();
Bplat.lire_etat();
delay(10); delay(10);
} }
Serial.println("A"); //a enlever
//Attends que l'un des boutons soit appuyé //Attends que l'un des boutons soit appuyé
while (Brelief.lire_etat() == 0 && Bplat.lire_etat() == 0) { while (!Brelief && !Bplat) {
Brelief.lire_etat();
Bplat.lire_etat();
delay(10); delay(10);
} }
//Stocke l'état des boutons //Stocke l'état des boutons
bool reliefPresse = Brelief.lire_etat(); bool reliefPresse = Brelief.lire_etat();
bool platPresse = Bplat.lire_etat(); bool platPresse = Bplat.lire_etat();
Serial.println("A"); //a enlever
//Boucle qui renvoie 1 si bouton relief et renvoie 0 si bouton plat //Boucle qui renvoie 1 si bouton relief et renvoie 0 si bouton plat
if (reliefPresse) { if (reliefPresse) {
Serial.println("A");
while (Brelief.lire_etat() == 1) { while (Brelief.lire_etat() == 1) {
delay(10); delay(10);
} }
return 1; return 1;
} else if (platPresse) { } else if (platPresse) {
Serial.println("A");
while (Bplat.lire_etat() == 1) { while (Bplat.lire_etat() == 1) {
delay(10); delay(10);
} }

View file

@ -11,6 +11,7 @@ public:
bouton(); bouton();
bouton(int pin); bouton(int pin);
bool lire_etat(); //Accesseur de etat bool lire_etat(); //Accesseur de etat
bool operator!() const;
}; };
//Renvoie 1 si bouton relief et renvoie 0 si bouton plat //Renvoie 1 si bouton relief et renvoie 0 si bouton plat

View file

@ -1,10 +1,24 @@
#include "led.h" #include "led.h"
#include <Arduino.h>
//Constructeur //Constructeur par defaut
led::led() led::led() : actionneur(), pin(0), etat(0) {}
: actionneur(), pin(0), etat(0) {}
// Constructeur avec pin
led::led(int p) : actionneur(), pin(p), etat(0) {}
// Getter pour le pin
int led::getPin() const {
return this->pin;
}
//Initialise la LED en OUTPUT //Initialise la LED en OUTPUT
void led::init() { void led::init() {
pinMode(pin, OUTPUT); pinMode(this->pin, OUTPUT);
}
void led::cligno() {
digitalWrite(this->pin, HIGH);
delay(3000);
digitalWrite(this->pin, LOW);
} }

View file

@ -9,7 +9,10 @@ private:
bool etat; bool etat;
public: public:
led(); led();
led(int p);
void init(void); //Initialise la LED en OUTPUT void init(void); //Initialise la LED en OUTPUT
void cligno(void);
int getPin() const;
}; };
#endif #endif