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

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