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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. /**************************************************
  2. ** GAME VARIABLES
  3. **************************************************/
  4. var socket; // Socket
  5. var gameInfos;
  6. /**************************************************
  7. ** GAME INITIALISATION
  8. **************************************************/
  9. function init() {
  10. // Connexion à socket.io
  11. socket = io.connect('http://localhost:8000');
  12. // Gestion des evenements
  13. setEventHandlers();
  14. // On demande le pseudo a l'utilisateur, on l'envoie au serveur et on l'affiche dans le titre
  15. $("#game").html("<input type=\"text\" id=\"pseudo\" /><input type=\"submit\" id=\"start\" value=\"Valider\" />");
  16. $("#start").on("click", function() {
  17. socket.emit('nouveau', $("#pseudo").val());
  18. document.title = $("#pseudo").val() + ' - ' + document.title;
  19. $("#game").html("Recherche d'un adversare...");
  20. });
  21. };
  22. /**************************************************
  23. ** GAME EVENT HANDLERS
  24. **************************************************/
  25. var setEventHandlers = function() {
  26. socket.on("message", onMessage);
  27. socket.on("autres", onAutres);
  28. socket.on("game", onGame);
  29. socket.on("questions", play);
  30. };
  31. function onGame(game) {
  32. gameInfos = game;
  33. $("#game").html("Adversaire trouvé : "+game[0]+"<br />Début de la partie dans 5s.");
  34. window.setTimeout(function() {
  35. socket.emit('start', gameInfos[1])
  36. }, 5000);
  37. }
  38. function onMessage(message) {
  39. alert(message);
  40. };
  41. function onAutres(pseudo) {
  42. alert("Voici un nouveau joueur : " + pseudo);
  43. };
  44. /**************************************************
  45. ** GAME ENGINE (SORT OF)
  46. **************************************************/
  47. // IDs
  48. var id_cat = 0, id_theme = 0, id_quest = 0;
  49. // Shortcuts
  50. var json, category, theme;
  51. // Timer
  52. var timing = 5, secRestantes, timer;
  53. var baseWidth;
  54. var score = 0;
  55. var reponseUser = -1, bonneReponse;
  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\"></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. $("#rep1").off('click');
  90. $("#rep1").on("click", function() { reponseUser = 1; checkAnswer(); });
  91. $("#rep2").off('click');
  92. $("#rep2").on("click", function() { reponseUser = 2; checkAnswer(); });
  93. $("#both").off('click');
  94. $("#both").on("click", function() { reponseUser = 0; checkAnswer(); });
  95. }
  96. function checkAnswer() {
  97. stopTimer();
  98. if(reponseUser == bonneReponse) {
  99. score += secRestantes+1;
  100. }
  101. $("#score").html("Score : "+score);
  102. switch(bonneReponse) {
  103. case 0: $("#rep1").addClass("wrong-answer");
  104. $("#rep2").addClass("wrong-answer");
  105. $("#both").addClass("good-answer");
  106. break;
  107. case 1: $("#rep1").addClass("good-answer");
  108. $("#rep2").addClass("wrong-answer");
  109. $("#both").addClass("wrong-answer");
  110. break;
  111. case 2: $("#rep1").addClass("wrong-answer");
  112. $("#rep2").addClass("good-answer");
  113. $("#both").addClass("wrong-answer");
  114. break;
  115. }
  116. window.setTimeout(nextQuestion, 2000);
  117. }
  118. function nextQuestion() {
  119. $("#rep1").removeClass();
  120. $("#rep2").removeClass();
  121. $("#both").removeClass();
  122. // Dernière question du thème en cours
  123. if((id_quest+1) == theme.questions.length) {
  124. // Dernier thème de la catégorie en cours
  125. if((id_theme+1) == category.themes.length) {
  126. // Dernière catégorie
  127. if((id_cat+1) == 2) {
  128. endGame();
  129. } else {
  130. id_quest = 0;
  131. id_theme = 0;
  132. id_cat++;
  133. loadCat(id_cat);
  134. }
  135. } else {
  136. id_quest = 0;
  137. id_theme++;
  138. loadTheme(id_theme);
  139. }
  140. } else {
  141. id_quest++;
  142. quest(id_quest);
  143. }
  144. }
  145. function play(questions) {
  146. console.log(questions);
  147. json = questions;
  148. loadCat(id_cat);
  149. }
  150. function startTimer() {
  151. $("#timer").css("width", "100%");
  152. baseWidth = $("#timer").width();
  153. $("#timer").animate({'width' : '0%'}, timing*1000);
  154. timer = window.setTimeout(checkAnswer, timing*1000);
  155. }
  156. function stopTimer() {
  157. window.clearTimeout(timer);
  158. $("#timer").stop();
  159. secRestantes = Math.round($("#timer").width()/baseWidth*timing);
  160. }
  161. function endGame() {
  162. $("#game").html("<h2 id=\"score\">Vous avez marqué "+score+" miams</h2>"
  163. +"<p id=\"registerScore\">Enregistrez votre score : <input type=\"text\" id=\"login\" placeholder=\"Nom ou pseudonyme\" />"
  164. +"<input type=\"submit\" id=\"sendScore\" value=\"Valider\" /></p>");
  165. $("#sendScore").click(function() {
  166. addScore($("#login").val(), score);
  167. var message = json.message;
  168. $("#registerScore").fadeOut();
  169. console.log(message);
  170. if(message == "score_add_success") {
  171. $("#registerScore").addClass("success");
  172. $("#registerScore").html("Votre score a bien été enregistré<br />"+
  173. "<a href=\"palmares.htm\">Voir les meilleurs scores</a>");
  174. } else {
  175. $("#registerScore").addClass("error");
  176. if(message === "higher_score_present") {
  177. $("#registerScore").html("Un score supérieur ou égal existe déjà avec ce pseudonyme<br />"+
  178. "<a href=\"palmares.htm\">Voir les meilleurs scores</a>");
  179. } else {
  180. $("#registerScore").html("Une erreur est survenue ("+status.message+")<br />"+
  181. "<a href=\"palmares.htm\">Voir les meilleurs scores</a>");
  182. }
  183. }
  184. $("#registerScore").fadeIn();
  185. });
  186. }
  187. function addScore(userLogin, userScore) {
  188. $.ajax({
  189. async: false,
  190. url: "../../api/?page=palmares",
  191. type: "POST",
  192. dataType: 'json',
  193. data: {login: userLogin, score: userScore},
  194. success: function(data) {
  195. json = data;
  196. }
  197. });
  198. }
  199. function displayScores() {
  200. $.get("./api/?page=palmares", function(data) {
  201. var list = "<ol>";
  202. for(var i = 0; i < 10; i++) {
  203. list += "<li>"+data[i].login+" - "+data[i].score+"</li>";
  204. }
  205. list += "</ol>";
  206. $("#palmares").html(list);
  207. });
  208. }