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 6.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  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. $("#multi").remove();
  110. apiReq();
  111. loadCat(id_cat);
  112. }
  113. function startTimer() {
  114. $("#timer").css("width", "100%");
  115. baseWidth = $("#timer").width();
  116. $("#timer").animate({'width' : '0%'}, timing*1000);
  117. timer = window.setTimeout(checkAnswer, timing*1000);
  118. }
  119. function stopTimer() {
  120. window.clearTimeout(timer);
  121. $("#timer").stop();
  122. secRestantes = Math.round($("#timer").width()/baseWidth*timing);
  123. }
  124. function endGame() {
  125. $("#game").html("<h2 id=\"score\">Vous avez marqué "+score+" miams</h2>"
  126. +"<p id=\"registerScore\">Enregistrez votre score : <input type=\"text\" id=\"login\" placeholder=\"Nom ou pseudonyme\" />"
  127. +"<input type=\"submit\" id=\"sendScore\" value=\"Valider\" /></p>");
  128. $("#sendScore").on('click', scoreConfirm);
  129. $("#login").on('keypress', function(event) {
  130. if(event.which == 13) {
  131. scoreConfirm();
  132. }
  133. });
  134. }
  135. function scoreConfirm() {
  136. console.log("qsfd");
  137. addScore($("#login").val(), score);
  138. var message = json.message;
  139. $("#registerScore").fadeOut();
  140. console.log(message);
  141. if(message == "score_add_success") {
  142. window.setTimeout(function() {
  143. $("#registerScore").addClass("success");
  144. $("#registerScore").html("Votre score a bien été enregistré<br />"+
  145. "<a href=\"palmares.htm\">Voir les meilleurs scores</a>");
  146. }, 400);
  147. } else {
  148. if(message === "higher_score_present") {
  149. window.setTimeout(function() {
  150. $("#registerScore").addClass("error");
  151. $("#registerScore").html("Un score supérieur ou égal existe déjà avec ce pseudonyme<br />"
  152. +"Essayez avec un autre pseudonyme : <input type=\"text\" id=\"login\" placeholder=\"Nom ou pseudonyme\" />"
  153. +"<input type=\"submit\" id=\"sendScore\" value=\"Valider\" /><br />"
  154. +"<a href=\"palmares.htm\">Voir les meilleurs scores</a>");
  155. $("#sendScore").on('click', scoreConfirm);
  156. $("#login").on('keypress', function(event) {
  157. if(event.which == 13) {
  158. scoreConfirm();
  159. }
  160. });
  161. }, 400);
  162. } else {
  163. window.setTimeout(function() {
  164. $("#registerScore").addClass("error");
  165. $("#registerScore").html("Une erreur est survenue ("+status.message+")<br />"+
  166. "<a href=\"palmares.htm\">Voir les meilleurs scores</a>");
  167. }, 400);
  168. }
  169. }
  170. $("#registerScore").fadeIn();
  171. }
  172. function addScore(userLogin, userScore) {
  173. $.ajax({
  174. async: false,
  175. url: "./api/?page=palmares",
  176. type: "POST",
  177. dataType: 'json',
  178. data: {login: userLogin, score: userScore},
  179. success: function(data) {
  180. json = data;
  181. }
  182. });
  183. }
  184. function displayScores() {
  185. $.get("./api/?page=palmares", function(data) {
  186. var list = "<ol>";
  187. for(var i = 0; i < 10; i++) {
  188. list += "<li>"+data[i].login+" - "+data[i].score+"</li>";
  189. }
  190. list += "</ol>";
  191. $("#palmares").html(list);
  192. });
  193. }