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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  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 questions = 0, currentQuestion = 1;
  8. var baseWidth;
  9. var score = 0;
  10. var reponseUser = -1, bonneReponse;
  11. var canClick = true;
  12. function play() {
  13. apiReq();
  14. $("#play").remove();
  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. json.cat1.themes.forEach(function(theme) {
  64. questions += theme.questions.length;
  65. });
  66. json.cat2.themes.forEach(function(theme) {
  67. questions += theme.questions.length;
  68. });
  69. }
  70. });
  71. }
  72. function loadCat(id) {
  73. if(id === 0) category = json.cat1;
  74. if(id === 1) category = json.cat2;
  75. console.log(category);
  76. $("#game").html("<div id=\"timer\" style=\"width:100%;height:20px;background:green\"></div>");
  77. $("#game").append("<div id=\"category\">Catégorie : "+category.nom_cat+"</div>");
  78. $("#game").append("<div id=\"theme\"></div>");
  79. $(".current").html("<div id=\"score\">Score : "+score+" miam</div>");
  80. loadTheme(id_theme);
  81. }
  82. function loadTheme(id) {
  83. theme = category.themes[id];
  84. $("#theme").html("<p id=\"question\"></p>");
  85. $("#theme").append("<ul id=\"answers\"><li id=\"rep1\">"+theme.reponse1+"</li>"
  86. +"<li id=\"rep2\">"+theme.reponse2+"</li><li id=\"both\">Les deux</li></ul>"
  87. +"<p id=\"question-count\">Question 0/0</p>");
  88. quest(id_quest);
  89. }
  90. function quest(id) {
  91. $("#question").html(theme.questions[id].intitule);
  92. startTimer();
  93. bonneReponse = parseInt(theme.questions[id].bonneReponse);
  94. console.info('Question ' + currentQuestion + '/' + theme.questions.length + ' : '
  95. +theme.questions[id].intitule);
  96. $("#question-count").html("Question "+currentQuestion+"/"+questions);
  97. if(canClick) {
  98. $("#rep1").off('click');
  99. $("#rep1").one("click", function() { reponseUser = 1; checkAnswer(); });
  100. $("#rep2").off('click');
  101. $("#rep2").one("click", function() { reponseUser = 2; checkAnswer(); });
  102. $("#both").off('click');
  103. $("#both").one("click", function() { reponseUser = 0; checkAnswer(); });
  104. }
  105. }
  106. function checkAnswer() {
  107. canClick = false;
  108. $("#rep1").off('click');
  109. $("#rep2").off('click');
  110. $("#both").off('click');
  111. stopTimer();
  112. if(reponseUser == bonneReponse) {
  113. score += secRestantes+1;
  114. }
  115. if(score > 1) {
  116. $("#score").html("Score : "+score+" miams");
  117. } else {
  118. $("#score").html("Score : "+score+" miam");
  119. }
  120. switch(bonneReponse) {
  121. case 0: $("#rep1").addClass("wrong-answer");
  122. $("#rep2").addClass("wrong-answer");
  123. $("#both").addClass("good-answer");
  124. break;
  125. case 1: $("#rep1").addClass("good-answer");
  126. $("#rep2").addClass("wrong-answer");
  127. $("#both").addClass("wrong-answer");
  128. break;
  129. case 2: $("#rep1").addClass("wrong-answer");
  130. $("#rep2").addClass("good-answer");
  131. $("#both").addClass("wrong-answer");
  132. break;
  133. }
  134. window.setTimeout(nextQuestion, 2000);
  135. }
  136. function nextQuestion() {
  137. $("#rep1").removeClass();
  138. $("#rep2").removeClass();
  139. $("#both").removeClass();
  140. canClick = true;
  141. currentQuestion++;
  142. // Dernière question du thème en cours
  143. if((id_quest+1) == theme.questions.length) {
  144. // Dernier thème de la catégorie en cours
  145. if((id_theme+1) == category.themes.length) {
  146. // Dernière catégorie
  147. if((id_cat+1) == 2) {
  148. endGame();
  149. } else {
  150. id_quest = 0;
  151. id_theme = 0;
  152. id_cat++;
  153. loadCat(id_cat);
  154. }
  155. } else {
  156. id_quest = 0;
  157. id_theme++;
  158. loadTheme(id_theme);
  159. }
  160. } else {
  161. id_quest++;
  162. quest(id_quest);
  163. }
  164. }
  165. function startTimer() {
  166. $("#timer").css("width", "100%");
  167. baseWidth = $("#timer").width();
  168. $("#timer").animate({'width' : '0%'}, timing*1000);
  169. timer = window.setTimeout(checkAnswer, timing*1000);
  170. }
  171. function stopTimer() {
  172. window.clearTimeout(timer);
  173. $("#timer").stop();
  174. secRestantes = Math.round($("#timer").width()/baseWidth*timing);
  175. }
  176. function endGame() {
  177. $("#game").html("<h2 id=\"score\">Vous avez marqué "+score+" miams</h2>"
  178. +"<p id=\"registerScore\">Enregistrez votre score : <input type=\"text\" id=\"login\" placeholder=\"Nom ou pseudonyme\" />"
  179. +"<input type=\"submit\" id=\"sendScore\" value=\"Valider\" /></p>");
  180. $("#sendScore").on('click', scoreConfirm);
  181. $("#login").on('keypress', function(event) {
  182. if(event.which == 13) {
  183. scoreConfirm();
  184. }
  185. });
  186. }
  187. function scoreConfirm() {
  188. $("#registerScore").fadeOut();
  189. if($("#login").val() != "") {
  190. addScore($("#login").val(), score);
  191. var message = json.message;
  192. if(message == "score_add_success") {
  193. window.setTimeout(function() {
  194. $("#registerScore").removeClass();
  195. $("#registerScore").addClass("success");
  196. $("#registerScore").html("Votre score a bien été enregistré.<br />"+
  197. "<a href=\"palmares.htm\">Voir les meilleurs scores</a>");
  198. }, 400);
  199. } else {
  200. if(message === "higher_score_present") {
  201. window.setTimeout(function() {
  202. $("#registerScore").removeClass();
  203. $("#registerScore").addClass("error");
  204. $("#registerScore").html("Un score supérieur ou égal existe déjà avec ce pseudonyme.<br />"
  205. +"Essayez avec un autre pseudonyme :<br />"
  206. +"<input type=\"text\" id=\"login\" placeholder=\"Nom ou pseudonyme\" />"
  207. +"<input type=\"submit\" id=\"sendScore\" value=\"Valider\" /><br />"
  208. +"<a href=\"palmares.htm\">Voir les meilleurs scores</a>");
  209. $("#sendScore").on('click', scoreConfirm);
  210. $("#login").on('keypress', function(event) {
  211. if(event.which == 13) {
  212. scoreConfirm();
  213. }
  214. });
  215. }, 400);
  216. } else {
  217. window.setTimeout(function() {
  218. $("#registerScore").removeClass();
  219. $("#registerScore").addClass("error");
  220. $("#registerScore").html("Une erreur est survenue ("+status.message+")<br /> Réessayer :"
  221. +"<input type=\"text\" id=\"login\" placeholder=\"Nom ou pseudonyme\" />"
  222. +"<input type=\"submit\" id=\"sendScore\" value=\"Valider\" /><br />"
  223. +"<a href=\"palmares.htm\">Voir les meilleurs scores</a>");
  224. }, 400);
  225. }
  226. }
  227. } else {
  228. window.setTimeout(function() {
  229. $("#registerScore").removeClass();
  230. $("#registerScore").addClass("error");
  231. $("#registerScore").html("Merci de renseigner un pseudonyme : <br />"
  232. +"<input type=\"text\" id=\"login\" placeholder=\"Nom ou pseudonyme\" />"
  233. +"<input type=\"submit\" id=\"sendScore\" value=\"Valider\" /><br />"
  234. +"<a href=\"palmares.htm\">Voir les meilleurs scores</a>");
  235. $("#sendScore").on('click', scoreConfirm);
  236. $("#login").on('keypress', function(event) {
  237. if(event.which == 13) {
  238. scoreConfirm();
  239. }
  240. });
  241. }, 400);
  242. }
  243. $("#registerScore").fadeIn();
  244. }
  245. function addScore(userLogin, userScore) {
  246. $.ajax({
  247. async: false,
  248. url: "./api/?page=palmares",
  249. type: "POST",
  250. dataType: 'json',
  251. data: {login: userLogin, score: userScore},
  252. success: function(data) {
  253. json = data;
  254. }
  255. });
  256. }
  257. function displayScores() {
  258. $.get("./api/?page=palmares", function(data) {
  259. var list = "<ol>";
  260. for(var i = 0; i < 10; i++) {
  261. list += "<li>"+data[i].login+" - "+data[i].score+"</li>";
  262. }
  263. list += "</ol>";
  264. $("#palmares").html(list);
  265. });
  266. }