toto/BE c/projet/bdd.cpp
Montaigu-Lancelin Emilie 9646d260cb version finale
2026-01-15 13:51:09 +01:00

243 lines
No EOL
8.8 KiB
C++

#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[] = { 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;
texte += " ";
int longueur = texte.length();
int pos = 0;
while (pos <= longueur - largeur) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(texte.substring(pos, pos + largeur));
delay(400);
pos++;
}
}
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
listeQ.push_back("Disney");
listeQ.push_back("Geographie");
listeQ.push_back("Sciences");
listeQ.push_back("Culture Generale");
listeQ.push_back("Animaux");
int nbT = listeQ.size();
int TActuel = 0;
lcd.clear(); //Nettoie l'écran
//Affiche les thèmes
lcd.print("Thematiques : ");
delay(1000);
// Navigue dans les thèmes
bool TChoisi = false;
while (!TChoisi) {
//Affiche le thème actuel
it = listeQ.begin();
advance(it, TActuel);
//lcd.setCursor(0, 1);
//lcd.print((*it).c_str());
//delay(2000);
//Affiche les instructions par bouton
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(String(TActuel + 1) + " " + (*it).c_str());
lcd.setCursor(0, 1);
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
TChoisi = true;
} else {
// Bouton Plat = Passer au thème suivant
TActuel = (TActuel + 1) % nbT; //permet de revenir au premier thème si aucun n'a été choisi
}
}
//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 theme Geographie
list<string> Questions_Geographie;
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 theme Sciences
list<string> Questions_Sciences;
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 theme Culture Generale
list<string> Questions_Culture_G;
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 theme Animaux
list<string> Questions_Animaux;
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();
switch (TActuel) {
case 0:
lcd.print("Disney");
delay(2000);
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, ledRouge);
break;
case 2:
lcd.print("Sciences");
delay(2000);
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_g, boutonRelief, boutonPlat, ledRouge);
break;
case 4:
lcd.print("Animaux");
delay(2000);
play(lcd, Questions_Animaux, reponses_animaux, boutonRelief, boutonPlat, ledRouge);
break;
}
}
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;
// Permet de parcourir toutes les questions
for (it = Questions.begin(); it != Questions.end(); it++) {
lcd.clear(); //Nettoie l'écran
// Affiche le numéro de la question
lcd.setCursor(0, 0);
lcd.print("Q" + String(questionNum + 1) + ": ");
delay(1000);
lcd.clear(); //Nettoie l'écran
//Faire défiler la question
defileTexte(lcd, (*it).c_str());
delay(1500);
// Affiche les choix pour l'utilisateur
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Relief=Vrai");
lcd.setCursor(0, 1);
lcd.print("Plat=Faux");
delay(1000);
// Attends la réponse de l'utilisateur
bool reponseUtilisateur = choix_bouton(boutonRelief, boutonPlat);
// Vérifie la réponse (1 pour boutonRelief/Vrai, 0 pour boutonPlat/Faux)
if (reponseUtilisateur == reponses[questionNum]) {
lcd.clear();
lcd.print("Correct !");
score++;
} else {
lcd.clear();
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);
questionNum++;
}
// Afficher le score final
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Score: " + String(score) + "/" + String(questionNum));
lcd.setCursor(0, 1);
lcd.print("Bravo !");
delay(5000);
}