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

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