mock.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. var lexik = null;
  2. var enigma = null;
  3. var score = 0;
  4. var time = 0;
  5. $(document).ready(function() {
  6. var oReq = new XMLHttpRequest();
  7. oReq.open("GET", "resources/french", true);
  8. oReq.responseType = "arraybuffer";
  9. oReq.onload = function(oEvent) {
  10. var arrayBuffer = oReq.response;
  11. // if you want to access the bytes:
  12. var byteArray = new Uint8Array(arrayBuffer);
  13. var gunzip = new Zlib.Gunzip(new Uint8Array(byteArray));
  14. var plain = gunzip.decompress();
  15. lexik = JSON.parse(Utf8ArrayToStr(plain));
  16. };
  17. oReq.send();
  18. });
  19. function generateEnigma(level) {
  20. var min = 3, max = 7;
  21. switch( level ) {
  22. case 'E' :
  23. min = 3;
  24. max = 7;
  25. break;
  26. case 'M' :
  27. min = 3;
  28. max = 6;
  29. break;
  30. case 'H' :
  31. min = 4;
  32. max = 7;
  33. break;
  34. default :
  35. min = 3;
  36. max = 6;
  37. }
  38. var mustRun = false;
  39. var letters;
  40. var allWords = {};
  41. do {
  42. letters = getRandomSet(max);
  43. allWords = getWords2param(letters, min);
  44. var wordsCount = 0;
  45. for (var i = min; i < max + 1; i++) {
  46. var words = allWords[i];
  47. if (words != null) {
  48. wordsCount += words.length;
  49. }
  50. }
  51. mustRun = wordsCount < (max + min) * 0.7;
  52. } while (mustRun);
  53. return {letters: letters, words: allWords, minLength: min, maxLength: max};
  54. }
  55. function getRandomSet( maxLetter) {
  56. var statistics = lexik.statistics;
  57. var max = 0.0;
  58. for (var i = 0; i < 26; i++) {
  59. max += statistics[i];
  60. }
  61. var letters = [];
  62. for (var i = 0; i < maxLetter; i++) {
  63. letters[i] = getRandomLetter(max, statistics);
  64. }
  65. return letters.sort();
  66. }
  67. function getRandomLetter(max, statistics) {
  68. var r = Math.random() * max;
  69. max = 0.0;
  70. for (var i = 0; i < 26; i++) {
  71. max += statistics[i];
  72. if (r < max) {
  73. return String.fromCharCode(i + 97);
  74. }
  75. }
  76. return 'z';
  77. }
  78. function getWords2param(letters, minimum) {
  79. var words = [];
  80. for (var i = letters.length; i > 2; i--) {
  81. var newWords = getWords(letters, minimum, i);
  82. if (newWords != null && newWords.length > 0 ) {
  83. for( var j = 0; j < newWords.length; j++) {
  84. if( words.indexOf(newWords[j]) == -1 ) {
  85. words.push(newWords[j]);
  86. }
  87. }
  88. }
  89. }
  90. var lists = {};
  91. for (var i = 0; i < words.length; i++) {
  92. var word = words[i];
  93. var list = lists[word.length];
  94. if (list === undefined) {
  95. list = [];
  96. lists[word.length] = list;
  97. }
  98. list.push(word);
  99. }
  100. for (var i = letters.length; i > 2; i--) {
  101. var list = lists[i];
  102. if (list !== undefined) {
  103. list = list.sort();
  104. }
  105. }
  106. return lists;
  107. }
  108. function getWords(letters, minimum, size) {
  109. if (size < minimum) {
  110. return null;
  111. }
  112. var setSize = letters.length;
  113. if (size == setSize) {
  114. var currentNode = lexik.nodes.nodes[letters[0]];
  115. if (currentNode == null) {
  116. return null;
  117. }
  118. for (var i = 1; i < setSize; i++) {
  119. currentNode = currentNode.nodes[letters[i]];
  120. if (currentNode == null) {
  121. return null;
  122. }
  123. if (i == setSize - 1) {
  124. return currentNode.words;
  125. }
  126. }
  127. return null;
  128. }
  129. var results = [];
  130. for (var i = 0; i < setSize - size; i++) {
  131. for (var j = 0; j < setSize; j++) {
  132. var words = getWords(letters.slice(0,j).concat(letters.slice(j+1)), minimum, size - i);
  133. if (words != null && words.length > 0) {
  134. results = results.concat(words);
  135. }
  136. }
  137. }
  138. return results.sort();
  139. }
  140. $.mockjax({
  141. url: "/wordFighter/levelChoice",
  142. status: 200
  143. });
  144. $.mockjax({
  145. url: "/wordFighter/ready",
  146. status: 200
  147. });
  148. $.mockjax({
  149. url: "/wordFighter/newEnigma",
  150. contentType: "application/json",
  151. response: function(data) {
  152. enigma = generateEnigma(data.data.level);
  153. if( time != 0 ) {
  154. enigma.remaining_time = 60 - (new Date().getTime() - time) / 1000;
  155. score = 0;
  156. } else {
  157. enigma.remaining_time = 60;
  158. }
  159. time = new Date().getTime();
  160. this.responseText = JSON.stringify(enigma)
  161. }
  162. });
  163. $.mockjax( {
  164. url: '/wordFighter/get_ready',
  165. contentType: 'text/html',
  166. responseText: '<div>\
  167. <div style="height: 261px;">\
  168. <div id="fighter1portrait" class="portrait"></div>\
  169. </div>\
  170. </div>\
  171. <div style="height: 261px;width: 96px;">\
  172. <div id="versus" style="width: 96px;height: 16px;margin-left: -48px;margin-top: -8px;position: relative;left: 50%;top: 50%;">\
  173. <div id="howToPlay"></div>\
  174. </div>\
  175. </div>\
  176. <div>\
  177. <div style="height: 261px;">\
  178. <div id="fighter2portrait" class="portrait"></div>\
  179. </div>\
  180. </div>'
  181. })
  182. $.mockjax( {
  183. url: '/wordFighter/gameOver',
  184. contentType: 'text/html',
  185. responseText: ''
  186. });