243 lines
No EOL
8.8 KiB
C++
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);
|
|
} |