| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- var lexik = null;
- var enigma = null;
- var score = 0;
- var time = 0;
-
- $(document).ready(function() {
- var oReq = new XMLHttpRequest();
- oReq.open("GET", "resources/french", true);
- oReq.responseType = "arraybuffer";
-
- oReq.onload = function(oEvent) {
- var arrayBuffer = oReq.response;
-
- // if you want to access the bytes:
- var byteArray = new Uint8Array(arrayBuffer);
- var gunzip = new Zlib.Gunzip(new Uint8Array(byteArray));
- var plain = gunzip.decompress();
- lexik = JSON.parse(Utf8ArrayToStr(plain));
- };
-
- oReq.send();
- });
- function generateEnigma(level) {
- var min = 3, max = 7;
-
- switch( level ) {
- case 'E' :
- min = 3;
- max = 7;
- break;
- case 'M' :
- min = 3;
- max = 6;
- break;
- case 'H' :
- min = 4;
- max = 7;
- break;
- default :
- min = 3;
- max = 6;
- }
-
- var mustRun = false;
- var letters;
- var allWords = {};
- do {
- letters = getRandomSet(max);
- allWords = getWords2param(letters, min);
- var wordsCount = 0;
- for (var i = min; i < max + 1; i++) {
- var words = allWords[i];
- if (words != null) {
- wordsCount += words.length;
- }
- }
- mustRun = wordsCount < (max + min) * 0.7;
- } while (mustRun);
- return {letters: letters, words: allWords, minLength: min, maxLength: max};
- }
- function getRandomSet( maxLetter) {
- var statistics = lexik.statistics;
- var max = 0.0;
- for (var i = 0; i < 26; i++) {
- max += statistics[i];
- }
- var letters = [];
- for (var i = 0; i < maxLetter; i++) {
- letters[i] = getRandomLetter(max, statistics);
- }
- return letters.sort();
- }
- function getRandomLetter(max, statistics) {
- var r = Math.random() * max;
- max = 0.0;
- for (var i = 0; i < 26; i++) {
- max += statistics[i];
- if (r < max) {
- return String.fromCharCode(i + 97);
- }
- }
- return 'z';
- }
- function getWords2param(letters, minimum) {
- var words = [];
- for (var i = letters.length; i > 2; i--) {
- var newWords = getWords(letters, minimum, i);
- if (newWords != null && newWords.length > 0 ) {
- for( var j = 0; j < newWords.length; j++) {
- if( words.indexOf(newWords[j]) == -1 ) {
- words.push(newWords[j]);
- }
- }
- }
- }
- var lists = {};
- for (var i = 0; i < words.length; i++) {
- var word = words[i];
- var list = lists[word.length];
- if (list === undefined) {
- list = [];
- lists[word.length] = list;
- }
- list.push(word);
- }
- for (var i = letters.length; i > 2; i--) {
- var list = lists[i];
- if (list !== undefined) {
- list = list.sort();
- }
- }
- return lists;
- }
- function getWords(letters, minimum, size) {
- if (size < minimum) {
- return null;
- }
- var setSize = letters.length;
-
- if (size == setSize) {
- var currentNode = lexik.nodes.nodes[letters[0]];
- if (currentNode == null) {
- return null;
- }
- for (var i = 1; i < setSize; i++) {
- currentNode = currentNode.nodes[letters[i]];
- if (currentNode == null) {
- return null;
- }
- if (i == setSize - 1) {
- return currentNode.words;
- }
- }
- return null;
- }
-
- var results = [];
- for (var i = 0; i < setSize - size; i++) {
- for (var j = 0; j < setSize; j++) {
- var words = getWords(letters.slice(0,j).concat(letters.slice(j+1)), minimum, size - i);
- if (words != null && words.length > 0) {
- results = results.concat(words);
- }
- }
- }
- return results.sort();
- }
- $.mockjax({
- url: "/wordFighter/levelChoice",
- status: 200
- });
- $.mockjax({
- url: "/wordFighter/ready",
- status: 200
- });
- $.mockjax({
- url: "/wordFighter/newEnigma",
- contentType: "application/json",
- response: function(data) {
- enigma = generateEnigma(data.data.level);
- if( time != 0 ) {
- enigma.remaining_time = 60 - (new Date().getTime() - time) / 1000;
- score = 0;
- } else {
- enigma.remaining_time = 60;
- }
- time = new Date().getTime();
- this.responseText = JSON.stringify(enigma)
- }
- });
- $.mockjax( {
- url: '/wordFighter/get_ready',
- contentType: 'text/html',
- responseText: '<div>\
- <div style="height: 261px;">\
- <div id="fighter1portrait" class="portrait"></div>\
- </div>\
- </div>\
- <div style="height: 261px;width: 96px;">\
- <div id="versus" style="width: 96px;height: 16px;margin-left: -48px;margin-top: -8px;position: relative;left: 50%;top: 50%;">\
- <div id="howToPlay"></div>\
- </div>\
- </div>\
- <div>\
- <div style="height: 261px;">\
- <div id="fighter2portrait" class="portrait"></div>\
- </div>\
- </div>'
- })
- $.mockjax( {
- url: '/wordFighter/gameOver',
- contentType: 'text/html',
- responseText: ''
- });
|