// IDs var id_cat = 0, id_theme = 0, id_quest = 0; // Shortcuts var json, category, theme; // Timer var timing = 5, secRestantes = 0, timer; var questions = 0, currentQuestion = 1; var baseWidth; var score = 0; var reponseUser = -1, bonneReponse; var canClick = true; function play() { apiReq(); $("#play").remove(); if(json.status != 1) { var message; switch(json.source) { case 'PDO': message = "Erreur lors de la connexion à la base de donnée : "+json.message; break; case 'Connector': message = "Erreur de requête SQL : " switch(json.message) { case 'wrong_arg_nmbr_where': message += "Mauvais nombre d'arguments dans la clause WHERE."; break; case 'wrong_arg_nmbr_order_by': message += "Mauvais nombre d'arguments dans la clause ORDER BY."; break; case 'wrong_arg_numbr_limit': message += "Mauvais nombre d'arguments dans la clause LIMIT."; break; case 'unknown_arg': message += "Argument inconnu détecté."; break; } break; case 'Questset': message = "Erreur dans le chargement du jeu de questions : " if(json.message == 'expected_questset_array') { message += "Un tableau de réponses est attendu." } break; case 'Categorie': if(json.message == 'cant_find_cat') { message = "Erreur dans le chargement de la catégorie : Impossible de trouver la catégorie."; } break; } $("#game").addClass("error"); $("#game").html(message); } else { $("#navbar .current").html("<div id=\"score\">Score : "+score+" miam</div>"); $("#responsive-navbar .name a").css("display", "inline"); $(".name").append("<div id=\"score-responsive\">"+score+" miam</div>"); loadCat(id_cat); } } function apiReq() { $.ajax({ async: false, url: "./api/", dataType: 'json', success: function(data) { json = data; json.cat1.themes.forEach(function(theme) { questions += theme.questions.length; }); json.cat2.themes.forEach(function(theme) { questions += theme.questions.length; }); } }); } function loadCat(id) { if(id === 0) category = json.cat1; if(id === 1) category = json.cat2; $("#game").html("<div id=\"timer\"></div>"); $("#game").append("<div id=\"category\">Catégorie : "+category.nom_cat+"</div>"); $("#game").append("<div id=\"theme\"></div>"); loadTheme(id_theme); } function loadTheme(id) { theme = category.themes[id]; $("#theme").html("<p id=\"question\"></p>"); $("#theme").append("<ul id=\"answers\"><li id=\"rep1\">"+theme.reponse1+"</li>" +"<li id=\"rep2\">"+theme.reponse2+"</li><li id=\"both\">Les deux</li></ul>" +"<p id=\"question-count\">Question 0/0</p>"); quest(id_quest); } function quest(id) { $("#question").html(theme.questions[id].intitule); startTimer(); bonneReponse = parseInt(theme.questions[id].bonneReponse); console.info('Question ' + currentQuestion + '/' + theme.questions.length + ' : ' +theme.questions[id].intitule); $("#question-count").html("Question "+currentQuestion+"/"+questions); if(canClick) { $("#rep1").off('click'); $("#rep1").one("click", function() { reponseUser = 1; checkAnswer(); }); $("#rep2").off('click'); $("#rep2").one("click", function() { reponseUser = 2; checkAnswer(); }); $("#both").off('click'); $("#both").one("click", function() { reponseUser = 0; checkAnswer(); }); } } function checkAnswer() { canClick = false; $("#rep1").off('click'); $("#rep2").off('click'); $("#both").off('click'); stopTimer(); if(reponseUser == bonneReponse) { score += secRestantes+1; } if(score > 1) { $("#score").html("Score : "+score+" miams"); $("#score-responsive").html(score+" miams"); } else { $("#score").html("Score : "+score+" miam"); $("#score-responsive").html(score+" miam"); } switch(bonneReponse) { case 0: $("#rep1").addClass("wrong-answer"); $("#rep2").addClass("wrong-answer"); $("#both").addClass("good-answer"); break; case 1: $("#rep1").addClass("good-answer"); $("#rep2").addClass("wrong-answer"); $("#both").addClass("wrong-answer"); break; case 2: $("#rep1").addClass("wrong-answer"); $("#rep2").addClass("good-answer"); $("#both").addClass("wrong-answer"); break; } window.setTimeout(nextQuestion, 2000); } function nextQuestion() { $("#rep1").removeClass(); $("#rep2").removeClass(); $("#both").removeClass(); canClick = true; currentQuestion++; // Dernière question du thème en cours if((id_quest+1) == theme.questions.length) { // Dernier thème de la catégorie en cours if((id_theme+1) == category.themes.length) { // Dernière catégorie if((id_cat+1) == 2) { endGame(); } else { id_quest = 0; id_theme = 0; id_cat++; loadCat(id_cat); } } else { id_quest = 0; id_theme++; loadTheme(id_theme); } } else { id_quest++; quest(id_quest); } } function startTimer() { $("#timer").removeClass(); var elm = document.getElementById("timer"), newone = elm.cloneNode(true); elm.parentNode.replaceChild(newone, elm); $("#timer").addClass("timer"); baseWidth = $("#timer").width(); timer = window.setTimeout(checkAnswer, timing*1000); } function stopTimer() { window.clearTimeout(timer); $("#timer").addClass("pause"); secRestantes = Math.round($("#timer").width()/baseWidth*timing); } function endGame() { $("#game").html("<h2 id=\"score\">Vous avez marqué "+score+" miams</h2>" +"<p id=\"registerScore\">Enregistrez votre score : <input type=\"text\" id=\"login\" placeholder=\"Nom ou pseudonyme\" />" +"<input type=\"submit\" id=\"sendScore\" value=\"Valider\" /></p>"); $("#sendScore").on('click', scoreConfirm); $("#login").on('keypress', function(event) { if(event.which == 13) { scoreConfirm(); } }); } function scoreConfirm() { $("#registerScore").fadeOut(); if($("#login").val() != "") { addScore($("#login").val(), score); var message = json.message; if(message == "score_add_success") { window.setTimeout(function() { $("#registerScore").removeClass(); $("#registerScore").addClass("success"); $("#registerScore").html("Votre score a bien été enregistré.<br />"+ "<a href=\"palmares.htm\">Voir les meilleurs scores</a>"); }, 400); } else { if(message === "higher_score_present") { window.setTimeout(function() { $("#registerScore").removeClass(); $("#registerScore").addClass("error"); $("#registerScore").html("Un score supérieur ou égal existe déjà avec ce pseudonyme.<br />" +"Essayez avec un autre pseudonyme :<br />" +"<input type=\"text\" id=\"login\" placeholder=\"Nom ou pseudonyme\" />" +"<input type=\"submit\" id=\"sendScore\" value=\"Valider\" /><br />" +"<a href=\"palmares.htm\">Voir les meilleurs scores</a>"); $("#sendScore").on('click', scoreConfirm); $("#login").on('keypress', function(event) { if(event.which == 13) { scoreConfirm(); } }); }, 400); } else { window.setTimeout(function() { $("#registerScore").removeClass(); $("#registerScore").addClass("error"); $("#registerScore").html("Une erreur est survenue ("+status.message+")<br /> Réessayer :" +"<input type=\"text\" id=\"login\" placeholder=\"Nom ou pseudonyme\" />" +"<input type=\"submit\" id=\"sendScore\" value=\"Valider\" /><br />" +"<a href=\"palmares.htm\">Voir les meilleurs scores</a>"); }, 400); } } } else { window.setTimeout(function() { $("#registerScore").removeClass(); $("#registerScore").addClass("error"); $("#registerScore").html("Merci de renseigner un pseudonyme : <br />" +"<input type=\"text\" id=\"login\" placeholder=\"Nom ou pseudonyme\" />" +"<input type=\"submit\" id=\"sendScore\" value=\"Valider\" /><br />" +"<a href=\"palmares.htm\">Voir les meilleurs scores</a>"); $("#sendScore").on('click', scoreConfirm); $("#login").on('keypress', function(event) { if(event.which == 13) { scoreConfirm(); } }); }, 400); } $("#registerScore").fadeIn(); } function addScore(userLogin, userScore) { $.ajax({ async: false, url: "./api/?page=palmares", type: "POST", dataType: 'json', data: {login: userLogin, score: userScore}, success: function(data) { json = data; } }); } function displayScores() { $.get("./api/?page=palmares", function(data) { var list = "<ol>"; for(var i = 0; i < 10; i++) { list += "<li>"+data[i].login+" - "+data[i].score+"</li>"; } list += "</ol>"; $("#palmares").html(list); }); }