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".

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