Besoin d'aide pour un quiz ;-;

Pour toutes les discussions javascript, jQuery et autres frameworks
Répondre
AL1EN
Messages : 3
Enregistré le : 21 févr. 2024, 12:47

Besoin d'aide pour un quiz ;-;

Message par AL1EN » 21 févr. 2024, 13:00

Bonjour à n'importe qui qui lis ça,

J'essaie d'apprendre le JavaScript, le CSS et l'HTML, j'ai donc tenté de programmer un quiz en suivant une vidéo pour ne pas partir de rien... Malgré tout il semblerait qu'il y ait un problème puisque la page HTML reste bloqué sur la première question et dans l'incapacité de cliquer sur un bouton réponse ._. J'ai relu mes trois programmes plusieurs fois pour éliminer les problèmes types oublis de virgules/points virgules, parenthèses ou accolades mal fermées, je suppose donc que le problème n'est pas de ce côté là. Pourtant il est sous mon nez et je ne le vois pas... Si quelqu'un pouvait relire au moins la partie JavaScript puisque je suppose que le problème vient de là je lui en serai reconnaissant ;-;

Merci d'avance à ceux qui prendront le temps.

Voici un lien WeTransfer si la totalité des fichiers vous intéresse : https://we.tl/t-V72vc7u6GJ



La partie JavaScript :

Code : Tout sélectionner

const questions = [
    {
	question : "Genshin Impact est un...",
	answers : [
	    { text : "MMORPG", correct : false},
	    { text : "RPG free-to-play", correct : true},
	    { text : "Platformer", correct : false},
	    { text : "jeu de combat", correct : false}
	]
     },
     {
	question : "Quelle est la première région de Teyvat à être explorée ?",
	answers : [
	    { text : "Inazuma", correct : false},
	    { text : "Sumeru", correct : false},
	    { text : "Liyue", correct : false},
	    { text : "Mondstadt", correct : true}
	]
     },
     {
	question : "Quel est l'élément de l'oeil divin du voyageur (le jumeau que l'on incarne) ?",
	answers : [
	    { text : "L'élément de l'oeil divin est aléatoire", correct : false},
	    { text : "Nous n'avons pas d'oeil divin et donc pas de pouvoir élémentaire", correct : false},
	    { text : "L'élément de l'oeil divin change selon les régions", correct : false},
	    { text : "Nous avons un pouvoir élémentaire aléaoire (sauf Pyro et Cryo) mais pas d'oeil divin", correct : true}
	]
     },
     {
	question : "De quelle région réelle est inspiré Mondstadt ? ",
	answers : [
	    { text : "La France", correct : false},
	    { text : "La Russie", correct : false},
	    { text : "L'Allemagne", correct : true},
	    { text : "Le Mexique", correct : false}
	]
     },
     {
	question : "Avec quel type d'arme se bat Amber ? ",
	answers : [
	    { text : "Un catalyseur", correct : false},
	    { text : "Un arc", correct : true},
	    { text : "Une arme d'Hast", correct : false},
	    { text : "Une épée à une main", correct : false}
	]
     },
     {
	question : "Dans quelle(s) région(s) peut-on rencontrer Catherine de la Guilde des Aventuriers ? ",
	answers : [
	    { text : "Uniquement Mondstadt", correct : false},
	    { text : "Mondstadt, Liyue et Fontaine", correct : false},
	    { text : "Toutes les régions sauf Inazuma", correct : false},
	    { text : "TOUTES elle se téléporte", correct : true}
	]
     },
     {
	question : "Où peut-on trouver des baies à crochet ? ",
	answers : [
	    { text : "Sur le territoire des loups", correct : true},
	    { text : "Sur le Mont Aozang", correct : false},
	    { text : "Sur l'île de Seira", correct : false},
	    { text : "Dans le bois des murmures", correct : false}
	]
     },
     {
	question : "Qu'est ce que Paimon aime le plus ? ",
	answers : [
	    { text : "L'argent", correct : false},
	    { text : "Le voyageur", correct : false},
	    { text : "La nourriture", correct : true},
	    { text : "Dormir", correct : false}
	]
     },
     {
	question : "Quel est le métier de Lisa ? ",
	answers : [
	    { text : "Grande maîtresse intérimaire de l'Ordre de Favonius", correct : false},
	    { text : "Bibliothécaire de l'ordre de Favonius", correct : true},
	    { text : "Gérante du Domaine de l'Aube", correct : false},
	    { text : "Diaconesse de l'église de Favonius", correct : false}
	]
     },
     {
	question : "Quel élément comprend le plus de personnages jouables ?",
	answers : [
	    { text : "Pyro", correct : false},
	    { text : "Anémo", correct : false},
	    { text : "Hydro", correct : false},
	    { text : "Cryo", correct : true}
	]
     }
];

const questionElement = document.getElementById("question");
const answerButtons = document.getElementById("answer-buttons");
const nextButton = document.getElementById("next-btn");

let currentQuestionIndex = 0;
let score = 0;

function startQuiz(){
	currentQuestionIndex = 0;
	score = 0;
	nextButton.innerHTML = "Question suivante";
	showQuestion();
}

function showQuestion(){
	resetState();
	let currentQuestion = questions[currentQuestionIndex];
	let questionNo = currentQuestionIndex + 1;
	questionElement.innerHTML = questionNo + ". " + currentQuestion.question;

	currentQuestion.answers.forEach(answer => {
	    const button = document.createElement("button");
	    button.innerHTML = answer.text;
	    button.classList.add("btn");
	    answerButtons.appendChild(button);
	    if(answer.correct){
		     button.dataset.correct = answer.correct;
	    }
	    button.addEventListener("click", selectAnswer);
	});
}


function resetState(){
     nextButton.style.display = "none";
     while(answerButtons.firstChild){
	 answerButtons.removeChild(answerButtons.firstChild);
     }
}

function selectAnswer(e){
     const selectedBtn = e.target;
     const isCorrect = selectedBtn.datset.correct === "true";
     if(isCorrect){
         selectedBtn.classList.add("correct");
	 score++;
     }else{
         selectedBtn.classList.add("incorrect");
     }
     Array.from(answerButtons.children).forEach(button => {
	if(button.datset.correct === "true"){
	     button.classList.add("correct");
	}
	button.disabled = true;
     });
     nextButton.style.display = "block";
}

function showScore(){
     resetState();
     questionElement.innerHTML = "Ton score est de ${score} sur ${questions.length} !";
     nextButton.innerHTML = "Rejouer";
     nextButton.style.display = "block";
}

function handleNextButton(){
     currentQuestionIndex++;
     if(currentQuestionIndex < question.length){
	    showQuestion();
     }else{
	     showScore();
     }
}

nextButton.addEventListener("click", ()=>{
     if(currentQuestionIndex < questions.length){
	     handleNextButton();
     }else{
	     startQuiz();
     }
});


startQuiz();

Avatar du membre
webmaster
Administrateur du site
Messages : 578
Enregistré le : 28 févr. 2017, 15:19

Re: Besoin d'aide pour un quiz ;-;

Message par webmaster » 21 févr. 2024, 15:27

Bonjour

Relire un script est souvent limité
Il faut regarder ce que remonte la console du navigateur pour cibler le probleme
Voir ce tuto ici pour tout savoir sur la console JS :
https://www.toutjavascript.com/savoir/n ... script.php
TJS : 25 ans et mon livre Tout JavaScript chez Dunod
https://www.toutjavascript.com/livre/index.php

AL1EN
Messages : 3
Enregistré le : 21 févr. 2024, 12:47

Re: Besoin d'aide pour un quiz ;-;

Message par AL1EN » 22 févr. 2024, 00:29

Merci beaucoup !

En effet je n'y avais pas pensé et ça a réglé quasiment tous mes problèmes sauf un... Le score du joueur ne s'affiche pas comme je le voudrais...

Code : Tout sélectionner

function showScore(){
     resetState();
     questionElement.innerHTML = "Ton score est de ${score} sur 10 !";
     nextButton.innerHTML = "Rejouer";
     nextButton.style.display = "block";
}

function handleNextButton(){
     currentQuestionIndex++;
     if(currentQuestionIndex < questions.length){
	    showQuestion();
     }else{
	     showScore();
     }
}
Quand je vais sur ma page le quiz fonctionne mais à la fin au lieu de mettre le score en chiffre comme souhaité il est affiché "Ton score est de ${score} sur 10 !".

Je pense qu'ici c'est donc un problème d'appel de variable mais je n'ai fais que me baser sur une vidéo et j'admet ne pas avoir les connaissances pour faire ce genre de choses par moi-même...

Merci à ceux qui prendront le temps de répondre pour m'aider à progresser :)

AL1EN
Messages : 3
Enregistré le : 21 févr. 2024, 12:47

Re: Besoin d'aide pour un quiz ;-;

Message par AL1EN » 22 févr. 2024, 00:36

J'ai résolu mon propre problème ;-;

Beaucoup de stress pour pas grand chose, si ça peut intéresser quelqu'un il suffisait d'écrire ça :

Code : Tout sélectionner

questionElement.innerHTML = "Ton score est de " + score + " sur 10 !";


Merci et bon courage pour la suite :D

Avatar du membre
webmaster
Administrateur du site
Messages : 578
Enregistré le : 28 févr. 2017, 15:19

Re: Besoin d'aide pour un quiz ;-;

Message par webmaster » 22 févr. 2024, 08:44

En effet, ou alors il faut utiliser le séparateur de chaine ` `qui autorise cette notation

Code : Tout sélectionner

questionElement.innerHTML = `Ton score est de ${score} sur 10 !`;
Content d'avoir un peu aidé
TJS : 25 ans et mon livre Tout JavaScript chez Dunod
https://www.toutjavascript.com/livre/index.php

otis
Messages : 4
Enregistré le : 15 déc. 2023, 10:00

Re: Besoin d'aide pour un quiz ;-;

Message par otis » 12 mars 2024, 08:32

J'ai apprécié la volonté de l'auteur d'explorer les multiples facettes d'une question controversée et de présenter un point de vue équilibré. Strands NYT

Répondre