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"
#define buttonPinRelief D8
#define buttonPinPlat D6
#define ledRougePin D7
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() {
/*if (boutonRelief != nullptr) {
@ -37,9 +38,17 @@ void Application::init(void) {
void Application::run(void) {
gameOver = false;
nb_erreurs = 0;
lcd.clear();
lcd.print("On commence a jouer?");
lcd.print("C'est parti !");
delay(1500);
listequestions_init(lcd, boutonRelief, boutonPlat);
listequestions_init(lcd, boutonRelief, boutonPlat,ledRouge);
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
* @author <mettre l'adresse mail ou nom prenom>
* @brief Fichier header de l'application
* @author Montaigu Emilie, Ouvrard Marine
* @brief Fichier source de l'application
*********************************************************************/
#ifndef APPLICATION_H_
#define APPLICATION_H_
@ -9,6 +9,7 @@
#include "ecran.h"
#include "bdd.h"
#include "bouton.h"
#include "led.h"
/**
* @class Application
* @brief Classe Application
@ -22,6 +23,7 @@ public:
ecran lcd;
bouton boutonRelief;
bouton boutonPlat;
led ledRouge;
/**
* @fn Application();
* @brief Constructeur par defaut

View file

@ -1,20 +1,21 @@
#include "bdd.h"
#include "ecran.h"
#include "bouton.h"
#include "led.h"
#include <iostream>
#include <list>
#include <string>
#include <algorithm>
bool gameOver = false;
using namespace std;
int nb_erreurs = 0;
// Tableau avec les réponses aux questions par catégorie
// 1 = VRAI et 0 = FAUX
int reponses_disney[] = { 0, 1, 0 };
int reponses_geographie[] = { 0, 1, 1 };
int reponses_sciences[] = { 1, 0, 1 };
int reponses_culture[] = { 1, 1, 1 };
int reponses_animaux[] = { 0, 0, 1 };
int reponses_disney[] = { 1, 0, 1, 1, 1, 0, 1, 1, 1, 0 };
int reponses_geographie[] = { 1, 1, 0, 1, 1, 1, 0, 0, 1, 0 };
int reponses_sciences[] = { 1, 0, 1, 0, 1, 1, 0, 0, 1, 0 };
int reponses_culture_g[] = { 1, 1, 1, 0, 1, 0, 0, 1, 0, 1 };
int reponses_animaux[] = { 1, 0, 1, 1, 0, 1, 1, 1, 0, 0 };
void defileTexte(ecran &lcd, String texte) {
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>::iterator it; //Déclare un iterateur
//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
it = listeQ.begin();
advance(it, TActuel);
lcd.setCursor(0, 1);
lcd.print((*it).c_str());
delay(2000);
//lcd.setCursor(0, 1);
//lcd.print((*it).c_str());
//delay(2000);
//Affiche les instruction par bouton
//Affiche les instructions par bouton
lcd.clear();
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.print("Relief=OK, Plat=>");
lcd.print("Relief OK Plat >");
delay(1000);
// Attends la réponse de l'utilisateur
bool choixUtilisateur = choix_bouton(boutonRelief, boutonPlat);
lcd.clear();
if (choixUtilisateur == 1) {
// 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
list<string> Questions_Disney;
Questions_Disney.push_back("Patrick est le nom du cameleon de Raiponce ?");
Questions_Disney.push_back("La robe de Tiana est verte ?");
Questions_Disney.push_back("Cendrillon etait le premier disney ?");
//Banque de questions pour le theme Disney
list<string> Questions_Disney = { "Mickey est une souris ?",
"Patrick est le nom du cameleon dans Raiponce ?",
"La robe de Tiana est verte ?",
"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;
Questions_Geographie.push_back("Rio de Janeiro est la capitale du Bresil ?");
Questions_Geographie.push_back("L'Inde est le pays le plus peuple ?");
Questions_Geographie.push_back("Les Pyrenees Atlantiques ont 64 en numéro de département ?");
Questions_Geographie.push_back("Paris est la capitale de la France ?");
Questions_Geographie.push_back("Le Sahara est le plus grand desert du monde ?");
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;
Questions_Geographie.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_Geographie.push_back("Le cerveau ne ressent pas la douleur?");
Questions_Sciences.push_back("Le corps humain contient assez de fer pour faire un clou ?");
Questions_Sciences.push_back("Les cheveux continuent de pousser apres la mort ?");
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;
Questions_Geographie.push_back("Le Soleil est une étoile ?");
Questions_Geographie.push_back("Le français est parlé sur tous les continents ?");
Questions_Geographie.push_back("Les Romains utilisaient déjà le béton ?");
Questions_Culture_G.push_back("Le Soleil est une etoile ?");
Questions_Culture_G.push_back("Le francais est parle sur tous les continents ?");
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;
Questions_Geographie.push_back("Les requins doivent nager en permanence pour survivre ?");
Questions_Geographie.push_back("Les chauves-souris sont aveugles ?");
Questions_Geographie.push_back("Les poissons dorment ?");
Questions_Animaux.push_back("Les requins doivent nager en permanence pour survivre ?");
Questions_Animaux.push_back("Les chauves-souris sont aveugles ?");
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
lcd.clear();
@ -118,32 +154,32 @@ void listequestions_init(ecran &lcd, bouton &boutonRelief, bouton &boutonPlat) {
case 0:
lcd.print("Disney");
delay(2000);
play(lcd, Questions_Disney, reponses_disney, boutonRelief, boutonPlat);
play(lcd, Questions_Disney, reponses_disney, boutonRelief, boutonPlat, ledRouge);
break;
case 1:
lcd.print("Geographie");
delay(2000);
play(lcd, Questions_Geographie, reponses_geographie, boutonRelief, boutonPlat);
play(lcd, Questions_Geographie, reponses_geographie, boutonRelief, boutonPlat, ledRouge);
break;
case 2:
lcd.print("Sciences");
delay(2000);
play(lcd, Questions_Sciences, reponses_sciences, boutonRelief, boutonPlat);
play(lcd, Questions_Sciences, reponses_sciences, boutonRelief, boutonPlat, ledRouge);
break;
case 3:
lcd.print("Culture Generale");
delay(2000);
play(lcd, Questions_Culture_G, reponses_culture, boutonRelief, boutonPlat);
play(lcd, Questions_Culture_G, reponses_culture_g, boutonRelief, boutonPlat, ledRouge);
break;
case 4:
lcd.print("Animaux");
delay(2000);
play(lcd, Questions_Animaux, reponses_animaux, boutonRelief, boutonPlat);
play(lcd, Questions_Animaux, reponses_animaux, boutonRelief, boutonPlat, ledRouge);
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 questionNum = 0;
list<string>::iterator it;
@ -181,7 +217,16 @@ void play(ecran &lcd, list<string> Questions, int reponses[], bouton &boutonReli
score++;
} else {
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);

View file

@ -1,10 +1,12 @@
#ifndef bdd_H
#define bdd_H
#include "ecran.h"
#include "led.h"
#include "bouton.h"
#include <list>
#include <string>
extern bool gameOver;
extern int nb_erreurs;
using namespace std;
//Permet de faire défiler le texte sur l'écran
@ -12,9 +14,9 @@ using namespace std;
void defileTexte(ecran &lcd, String texte);
// 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
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

View file

@ -8,45 +8,49 @@ bouton::bouton()
bouton::bouton(int pin)
: capteur(pin), etat(0) {}
//ccesseur de etat
//Accesseur de etat
bool bouton::lire_etat() {
bool res;
int buttonState = digitalRead(this->getpin());
if (buttonState == HIGH) res = 1;
else res = 0;
return res;
if (buttonState == HIGH) {
this->etat = 1; // Met à jour etat
} 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) {
Serial.println("A"); //a enlever
//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);
}
Serial.println("A"); //a enlever
//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);
}
//Stocke l'état des boutons
bool reliefPresse = Brelief.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
if (reliefPresse) {
Serial.println("A");
while (Brelief.lire_etat() == 1) {
delay(10);
}
return 1;
} else if (platPresse) {
Serial.println("A");
while (Bplat.lire_etat() == 1) {
delay(10);
}

View file

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

View file

@ -1,10 +1,24 @@
#include "led.h"
#include <Arduino.h>
//Constructeur
led::led()
: actionneur(), pin(0), etat(0) {}
//Constructeur par defaut
led::led() : 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
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;
public:
led();
led(int p);
void init(void); //Initialise la LED en OUTPUT
void cligno(void);
int getPin() const;
};
#endif