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.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. /**************************************************
  2. ** GAME VARIABLES
  3. **************************************************/
  4. var socket; // Socket
  5. var gameInfos;
  6. /**************************************************
  7. ** GAME INITIALISATION
  8. **************************************************/
  9. var disconnect = true;
  10. var scoreAdversaire = 0;
  11. var pseudo ='';
  12. function init() {
  13. // Connexion à socket.io
  14. socket = io.connect('http://172.17.7.66:8000');
  15. // Gestion des evenements
  16. setEventHandlers();
  17. // On demande le pseudo a l'utilisateur, on l'envoie au serveur et on l'affiche dans le titre
  18. $("#game").html("<input type=\"text\" id=\"pseudo\" /><input type=\"submit\" id=\"start\" value=\"Valider\" />");
  19. $("#start").on("click", function() {
  20. pseudo = $("#pseudo").val();
  21. socket.emit('nouveau', pseudo);
  22. document.title = $("#pseudo").val() + ' - ' + document.title;
  23. $("#game").html("Recherche d'un adversare...");
  24. });
  25. $("#pseudo").on('keypress', function(event) {
  26. if(event.which == 13) {
  27. pseudo = $("#pseudo").val();
  28. socket.emit('nouveau', pseudo);
  29. document.title = $("#pseudo").val() + ' - ' + document.title;
  30. $("#game").html("Recherche d'un adversare...");
  31. }
  32. });
  33. };
  34. /**************************************************
  35. ** GAME EVENT HANDLERS
  36. **************************************************/
  37. var setEventHandlers = function() {
  38. socket.on("message", onMessage);
  39. socket.on("autres", onAutres);
  40. socket.on("game", onGame);
  41. socket.on("questions", play);
  42. socket.on("lolheded", endGame);
  43. socket.on("end", onEnd);
  44. };
  45. function onEnd(score) {
  46. disconnect = false;
  47. scoreAdversaire = score;
  48. endGame();
  49. }
  50. function onGame(game) {
  51. gameInfos = game;
  52. $("#game").html("Adversaire trouvé : "+game[0]+"<br />Début de la partie dans 5s.");
  53. window.setTimeout(function() {
  54. socket.emit('start', gameInfos[1])
  55. }, 5000);
  56. }
  57. function onMessage(message) {
  58. alert(message);
  59. };
  60. function onAutres(pseudo) {
  61. alert("Voici un nouveau joueur : " + pseudo);
  62. };
  63. /**************************************************
  64. ** GAME ENGINE (SORT OF)
  65. **************************************************/
  66. // IDs
  67. var id_cat = 0, id_theme = 0, id_quest = 0;
  68. // Shortcuts
  69. var json, category, theme;
  70. // Timer
  71. var timing = 5, secRestantes, timer;
  72. var baseWidth;
  73. var score = 0;
  74. var reponseUser = -1, bonneReponse;
  75. var canClick = true;
  76. function apiReq() {
  77. $.ajax({
  78. async: false,
  79. url: "../../api/",
  80. dataType: 'json',
  81. success: function(data) {
  82. json = data;
  83. }
  84. });
  85. }
  86. function loadCat(id) {
  87. if(id === 0) category = json.cat1;
  88. if(id === 1) category = json.cat2;
  89. console.log(category);
  90. $("#game").html("<p id=\"category\">Catégorie : "+category.nom_cat+"</p>");
  91. $("#game").append("<div id=\"theme\"></div>");
  92. $("#game").append("<div id=\"timer\" style=\"width:100%;height:20px;background:green\"></div>");
  93. $("#game").append("<div id=\"score\"></div>");
  94. loadTheme(id_theme);
  95. }
  96. function loadTheme(id) {
  97. theme = category.themes[id];
  98. $("#theme").html("<p id=\"question\"></p>");
  99. $("#theme").append("<ul id=\"answers\"><li id=\"rep1\">"+theme.reponse1+"</li>"
  100. +"<li id=\"rep2\">"+theme.reponse2+"</li><li id=\"both\">Les deux</li></ul>");
  101. quest(id_quest);
  102. }
  103. function quest(id) {
  104. $("#question").html(theme.questions[id].intitule);
  105. startTimer();
  106. bonneReponse = parseInt(theme.questions[id].bonneReponse);
  107. console.info('Question ' + (id_quest + 1) + '/' + theme.questions.length + ' : '
  108. +theme.questions[id].intitule);
  109. if(canClick) {
  110. $("#rep1").off('click');
  111. $("#rep1").one("click", function() { reponseUser = 1; checkAnswer(); });
  112. $("#rep2").off('click');
  113. $("#rep2").one("click", function() { reponseUser = 2; checkAnswer(); });
  114. $("#both").off('click');
  115. $("#both").one("click", function() { reponseUser = 0; checkAnswer(); });
  116. }
  117. }
  118. function checkAnswer() {
  119. canClick = false;
  120. $("#rep1").off('click');
  121. $("#rep2").off('click');
  122. $("#both").off('click');
  123. stopTimer();
  124. if(reponseUser == bonneReponse) {
  125. score += secRestantes+1;
  126. }
  127. $("#score").html("Score : "+score);
  128. switch(bonneReponse) {
  129. case 0: $("#rep1").addClass("wrong-answer");
  130. $("#rep2").addClass("wrong-answer");
  131. $("#both").addClass("good-answer");
  132. break;
  133. case 1: $("#rep1").addClass("good-answer");
  134. $("#rep2").addClass("wrong-answer");
  135. $("#both").addClass("wrong-answer");
  136. break;
  137. case 2: $("#rep1").addClass("wrong-answer");
  138. $("#rep2").addClass("good-answer");
  139. $("#both").addClass("wrong-answer");
  140. break;
  141. }
  142. window.setTimeout(nextQuestion, 2000);
  143. }
  144. function nextQuestion() {
  145. $("#rep1").removeClass();
  146. $("#rep2").removeClass();
  147. $("#both").removeClass();
  148. canClick = true;
  149. // Dernière question du thème en cours
  150. if((id_quest+1) == theme.questions.length) {
  151. // Dernier thème de la catégorie en cours
  152. if((id_theme+1) == category.themes.length) {
  153. // Dernière catégorie
  154. if((id_cat+1) == 2) {
  155. pauseGame();
  156. } else {
  157. id_quest = 0;
  158. id_theme = 0;
  159. id_cat++;
  160. loadCat(id_cat);
  161. }
  162. } else {
  163. id_quest = 0;
  164. id_theme++;
  165. loadTheme(id_theme);
  166. }
  167. } else {
  168. id_quest++;
  169. quest(id_quest);
  170. }
  171. }
  172. function play(questions) {
  173. console.log(questions);
  174. json = questions;
  175. loadCat(id_cat);
  176. }
  177. function startTimer() {
  178. $("#timer").css("width", "100%");
  179. baseWidth = $("#timer").width();
  180. $("#timer").animate({'width' : '0%'}, timing*1000);
  181. timer = window.setTimeout(checkAnswer, timing*1000);
  182. }
  183. function stopTimer() {
  184. window.clearTimeout(timer);
  185. $("#timer").stop();
  186. secRestantes = Math.round($("#timer").width()/baseWidth*timing);
  187. }
  188. function pauseGame() {
  189. $("#game").html("<h2 id=\"score\">Vous avez marqué "+score+" miams</h2>"
  190. +"<p id=\"registerScore\">En attente de l'adversaire...</p>");
  191. // On indique au serveur qu'on a fini
  192. var options = [gameInfos[1], score];
  193. socket.emit('findugame', options);
  194. }
  195. function endGame() {
  196. stopTimer();
  197. $("#game").html("<h2 id=\"score\">Vous avez marqué "+score+" miams</h2>"
  198. +"<p id=\"registerScore\">");
  199. if(disconnect) {
  200. $("#game").append(gameInfos[0]+" s'est déconnecté.");
  201. } else {
  202. $("#game").append("Votre adversaire a marqué "+scoreAdversaire+" miams.<br />Le gagnant est... ");
  203. if(score > scoreAdversaire) {
  204. $("#game").append(pseudo+" (vous).");
  205. } else if(score < scoreAdversaire) {
  206. $("#game").append(gameInfos[0]+".");
  207. } else {
  208. $("#game").append("personne (égalité).");
  209. }
  210. }
  211. $("#game").append("</p>");
  212. }
  213. function addScore(userLogin, userScore) {
  214. $.ajax({
  215. async: false,
  216. url: "../../api/?page=palmares",
  217. type: "POST",
  218. dataType: 'json',
  219. data: {login: userLogin, score: userScore},
  220. success: function(data) {
  221. json = data;
  222. }
  223. });
  224. }
  225. function displayScores() {
  226. $.get("./api/?page=palmares", function(data) {
  227. var list = "<ol>";
  228. for(var i = 0; i < 10; i++) {
  229. list += "<li>"+data[i].login+" - "+data[i].score+"</li>";
  230. }
  231. list += "</ol>";
  232. $("#palmares").html(list);
  233. });
  234. }