123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287 |
- // 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);
- });
- }
|