Créé dans le cadre du projet de fin d'année de la promo 2018 de CIR2 de l'ISEN Brest/Rennes, le Burger Quizz est une adaptation numérique du jeu télévisé éponyme, plus précisément d'une épreuve spécifique de ce jeu : le "Sel ou Poivre".

game.js 5.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. // IDs
  2. var id_cat = 0, id_theme = 0, id_quest = 0;
  3. // Shortcuts
  4. var json, category, theme;
  5. // Timer
  6. var timing = 5, secRestantes, timer;
  7. var baseWidth;
  8. var score = 0;
  9. var reponseUser = -1, bonneReponse;
  10. function apiReq() {
  11. $.ajax({
  12. async: false,
  13. url: "./api/",
  14. dataType: 'json',
  15. success: function(data) {
  16. json = data;
  17. }
  18. });
  19. }
  20. function loadCat(id) {
  21. if(id === 0) category = json.cat1;
  22. if(id === 1) category = json.cat2;
  23. console.log(category);
  24. $("#game").html("<p id=\"category\">Catégorie : "+category.nom_cat+"</p>");
  25. $("#game").append("<div id=\"theme\"></div>");
  26. $("#game").append("<div id=\"timer\" style=\"width:100%;height:20px;background:green\"></div>");
  27. $("#game").append("<div id=\"score\"></div>");
  28. loadTheme(id_theme);
  29. }
  30. function loadTheme(id) {
  31. theme = category.themes[id];
  32. $("#theme").html("<p id=\"question\"></p>");
  33. $("#theme").append("<ul id=\"answers\"><li id=\"rep1\">"+theme.reponse1+"</li>"
  34. +"<li id=\"rep2\">"+theme.reponse2+"</li><li id=\"both\">Les deux</li></ul>");
  35. quest(id_quest);
  36. }
  37. function quest(id) {
  38. $("#question").html(theme.questions[id].intitule);
  39. startTimer();
  40. bonneReponse = parseInt(theme.questions[id].bonneReponse);
  41. console.info('Question ' + (id_quest + 1) + '/' + theme.questions.length + ' : '
  42. +theme.questions[id].intitule);
  43. $("#rep1").off('click');
  44. $("#rep1").on("click", function() { reponseUser = 1; checkAnswer(); });
  45. $("#rep2").off('click');
  46. $("#rep2").on("click", function() { reponseUser = 2; checkAnswer(); });
  47. $("#both").off('click');
  48. $("#both").on("click", function() { reponseUser = 0; checkAnswer(); });
  49. }
  50. function checkAnswer() {
  51. stopTimer();
  52. if(reponseUser == bonneReponse) {
  53. score += secRestantes+1;
  54. }
  55. $("#score").html("Score : "+score);
  56. switch(bonneReponse) {
  57. case 0: $("#rep1").addClass("wrong-answer");
  58. $("#rep2").addClass("wrong-answer");
  59. $("#both").addClass("good-answer");
  60. break;
  61. case 1: $("#rep1").addClass("good-answer");
  62. $("#rep2").addClass("wrong-answer");
  63. $("#both").addClass("wrong-answer");
  64. break;
  65. case 2: $("#rep1").addClass("wrong-answer");
  66. $("#rep2").addClass("good-answer");
  67. $("#both").addClass("wrong-answer");
  68. break;
  69. }
  70. window.setTimeout(nextQuestion, 2000);
  71. }
  72. function nextQuestion() {
  73. $("#rep1").removeClass();
  74. $("#rep2").removeClass();
  75. $("#both").removeClass();
  76. // Dernière question du thème en cours
  77. if((id_quest+1) == theme.questions.length) {
  78. // Dernier thème de la catégorie en cours
  79. if((id_theme+1) == category.themes.length) {
  80. // Dernière catégorie
  81. if((id_cat+1) == 2) {
  82. endGame();
  83. } else {
  84. id_quest = 0;
  85. id_theme = 0;
  86. id_cat++;
  87. loadCat(id_cat);
  88. }
  89. } else {
  90. id_quest = 0;
  91. id_theme++;
  92. loadTheme(id_theme);
  93. }
  94. } else {
  95. id_quest++;
  96. quest(id_quest);
  97. }
  98. }
  99. function play() {
  100. $("#play").remove();
  101. apiReq();
  102. loadCat(id_cat);
  103. }
  104. function startTimer() {
  105. $("#timer").css("width", "100%");
  106. baseWidth = $("#timer").width();
  107. $("#timer").animate({'width' : '0%'}, timing*1000);
  108. timer = window.setTimeout(checkAnswer, timing*1000);
  109. }
  110. function stopTimer() {
  111. window.clearTimeout(timer);
  112. $("#timer").stop();
  113. secRestantes = Math.round($("#timer").width()/baseWidth*timing);
  114. }
  115. function endGame() {
  116. $("#game").html("<h2 id=\"score\">Vous avez marqué "+score+" miams</h2>"
  117. +"<p id=\"registerScore\">Enregistrez votre score : <input type=\"text\" id=\"login\" placeholder=\"Nom ou pseudonyme\" />"
  118. +"<input type=\"submit\" id=\"sendScore\" value=\"Valider\" /></p>");
  119. $("#sendScore").click(function() {
  120. addScore($("#login").val(), score);
  121. var message = json.message;
  122. $("#registerScore").fadeOut();
  123. console.log(message);
  124. if(message == "score_add_success") {
  125. $("#registerScore").addClass("success");
  126. $("#registerScore").html("Votre score a bien été enregistré<br />"+
  127. "<a href=\"palmares.htm\">Voir les meilleurs scores</a>");
  128. } else {
  129. $("#registerScore").addClass("error");
  130. if(message === "higher_score_present") {
  131. $("#registerScore").html("Un score supérieur ou égal existe déjà avec ce pseudonyme<br />"+
  132. "<a href=\"palmares.htm\">Voir les meilleurs scores</a>");
  133. } else {
  134. $("#registerScore").html("Une erreur est survenue ("+status.message+")<br />"+
  135. "<a href=\"palmares.htm\">Voir les meilleurs scores</a>");
  136. }
  137. }
  138. $("#registerScore").fadeIn();
  139. });
  140. }
  141. function addScore(userLogin, userScore) {
  142. $.ajax({
  143. async: false,
  144. url: "./api/?page=palmares",
  145. type: "POST",
  146. dataType: 'json',
  147. data: {login: userLogin, score: userScore},
  148. success: function(data) {
  149. json = data;
  150. }
  151. });
  152. }
  153. function displayScores() {
  154. $.get("./api/?page=palmares", function(data) {
  155. var list = "<ol>";
  156. for(var i = 0; i < 10; i++) {
  157. list += "<li>"+data[i].login+" - "+data[i].score+"</li>";
  158. }
  159. list += "</ol>";
  160. $("#palmares").html(list);
  161. });
  162. }