exercices-node/Exercice-1/scriptReadline.js

112 lines
2.8 KiB
JavaScript

const readline = require('readline');
// interface pporu écriture et lecture
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
// tableau de devinettes
const devinettes = [
{
question: "Quelle est la capitale de la France ?",
reponse: "paris"
},
{
question: "Quel est le plus grand océan de la planète ?",
reponse: "pacifique"
},
{
question: "Combien de continents y a-t-il sur Terre ?",
reponse: "7"
},
{
question: "Quelle planète est connue comme la planète rouge ?",
reponse: "mars"
},
{
question: "Quel est l'animal le plus rapide du monde ?",
reponse: "guepard"
}
];
// variable pour le jeu
let devinetteActuelle = 0;
let score = 0;
let tentatives = 0;
// fonction pour rendre le jeu plus naturel
const afficherAvecDelai = (message, delai = 1000) => {
return new Promise(resolve => {
setTimeout(() => {
console.log(message);
resolve();
}, delai);
});
};
// démarre le jeu avec un message d'accueil
const demarrerJeu = async () => {
await afficherAvecDelai("Bienvenue au jeu de devinettes !");
await afficherAvecDelai("Répondez aux questions suivantes :", 500);
poserDevinette();
};
//prend en paramètre la réponse et la devinette
//re'utilise la fonction délai pour une interaction fluide
const verifierReponse = async (reponse, devinette) => {
const reponseNormalisee = reponse.trim().toLowerCase();
if (reponseNormalisee === devinette.reponse) {
await afficherAvecDelai("Bonne réponse !", 300);
score++;
devinetteActuelle++;
tentatives = 0;
poserDevinette();
} else {
tentatives++;
let message = "Incorrecte ";
if (tentatives === 1) {
message += "Réessayez !";
} else if (tentatives === 3) {
message += "Un dernier essai !";
} else {
message += `La bonne réponse était "${devinette.reponse}".`;
await afficherAvecDelai(message, 300);
tentatives = 0;
devinetteActuelle++;
poserDevinette();
return;
}
await afficherAvecDelai(message, 300);
poserDevinette();
}
};
// fonction qui gère pose les devinette, se termine qand la taille du tableau
// dépasse l'index (débute à 0)
const poserDevinette = () => {
if (devinettes.length > devinetteActuelle) {
const devinette = devinettes[devinetteActuelle];
rl.question(`${devinette.question} `, (reponse) => {
verifierReponse(reponse, devinette);
});
} else {
terminerJeu();
}
};
// fonction pour terminer le jeu
const terminerJeu = async () => {
await afficherAvecDelai("\n Bien joué ! Tu as terminé les deveinettes.", 500);
await afficherAvecDelai(`Voici ton score : ${score}/${devinettes.length}`, 500);
rl.close();
};
// démarrer le jeu
demarrerJeu();