toto/BE c/projet/bdd.cpp
2026-01-15 12:23:17 +01:00

198 lines
No EOL
5.9 KiB
C++

#include "bdd.h"
#include "ecran.h"
#include "bouton.h"
#include <iostream>
#include <list>
#include <string>
#include <algorithm>
using namespace std;
// 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 };
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) {
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 instruction 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);
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 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 thème 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 ?");
//Banque de questions pour le thème 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?");
//Banque de questions pour le thème Culture Générale
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 ?");
//Banque de questions pour le thème 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 ?");
// 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);
break;
case 1:
lcd.print("Geographie");
delay(2000);
play(lcd, Questions_Geographie, reponses_geographie, boutonRelief, boutonPlat);
break;
case 2:
lcd.print("Sciences");
delay(2000);
play(lcd, Questions_Sciences, reponses_sciences, boutonRelief, boutonPlat);
break;
case 3:
lcd.print("Culture Generale");
delay(2000);
play(lcd, Questions_Culture_G, reponses_culture, boutonRelief, boutonPlat);
break;
case 4:
lcd.print("Animaux");
delay(2000);
play(lcd, Questions_Animaux, reponses_animaux, boutonRelief, boutonPlat);
break;
}
}
void play(ecran &lcd, list<string> Questions, int reponses[], bouton &boutonRelief, bouton &boutonPlat) {
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("Faux !");
}
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);
}