176 lines
3.8 KiB
JavaScript
176 lines
3.8 KiB
JavaScript
if (typeof(sw) == 'undefined') {
|
|
var sw = {};
|
|
sw.apiPrefix = '/';
|
|
}
|
|
|
|
|
|
(function($) {
|
|
|
|
|
|
//helper functions
|
|
var shuffle = function(obj) {
|
|
return obj.sort( function() { return 0.5 - Math.random(); } );
|
|
};
|
|
var getKey = function(obj) {
|
|
var word = [];
|
|
for(var k in obj) word.push(k);
|
|
return word[0];
|
|
};
|
|
|
|
var selectWordsForGame = function() {
|
|
//select a random word from the list
|
|
var words = sw.words[Math.round(Math.random() * sw.words.length)];
|
|
|
|
var word = getKey(words);
|
|
var similar = words[word];
|
|
//i really should include _
|
|
var filtered = [];
|
|
for(var i=0; i<similar.length; i++) {
|
|
if(similar[i] != word) {
|
|
filtered.push(similar[i]);
|
|
}
|
|
}
|
|
filtered = shuffle(filtered);
|
|
filtered = filtered.slice(0, 3);
|
|
filtered.push(word);
|
|
filtered = shuffle(filtered);
|
|
|
|
sw.currentWord = word;
|
|
return {word: word, similar: filtered};
|
|
};
|
|
|
|
var startGame = function() {
|
|
$("#main").empty().html('views/index.ejs', selectWordsForGame());
|
|
};
|
|
|
|
var gameOver = function() {
|
|
sw.gameover = true;
|
|
var result = 'Bravissimo!';
|
|
|
|
if (sw.wrongWords > 1 || sw.finaltime > 60) {
|
|
result = 'insomma...';
|
|
};
|
|
if (sw.wrongWords > 1 || sw.finaltime > 50) {
|
|
result = 'puoi fare meglio!';
|
|
};
|
|
if (sw.wrongWords > 1 && sw.finaltime < 40) {
|
|
result = 'sei velocissimo ma hai commesso errori';
|
|
};
|
|
|
|
$("#main").empty().html('views/gameover.ejs', {result: result, time: sw.finaltime, wrong: sw.wrongWords, correct: sw.correctWords});
|
|
};
|
|
|
|
var startNewGame = function() {
|
|
var playforwords = 10;
|
|
sw.correctWords = 0;
|
|
sw.wrongWords = 0;
|
|
sw.time = moment();
|
|
sw.gameover = false;
|
|
|
|
var updateBadges = function() {
|
|
$('.num-of-words-wrong').html(sw.wrongWords + (sw.wrongWords == 1 ? ' word' : ' words'));
|
|
$('.num-of-words').html(sw.correctWords + (sw.correctWords == 1 ? ' word' : ' words'));
|
|
$('.time-words').html(moment.duration(moment() - sw.time).seconds());
|
|
|
|
if(playforwords > sw.correctWords + sw.wrongWords) {
|
|
setTimeout(function() {
|
|
updateBadges();
|
|
}, 100);
|
|
} else {
|
|
sw.finaltime = moment.duration(moment() - sw.time).seconds();
|
|
sw.gameover = true;
|
|
}
|
|
};
|
|
updateBadges();
|
|
|
|
startGame();
|
|
};
|
|
|
|
//start app
|
|
var w = $.ajax({
|
|
url: sw.apiPrefix + "words.json",
|
|
dataType: 'json'
|
|
});
|
|
|
|
|
|
w.done(function(words) {
|
|
var start = $('.start');
|
|
start.removeClass('disabled');
|
|
start.html(' Start ');
|
|
start.animate({
|
|
opacity : 1
|
|
}, 1000, 'linear');
|
|
|
|
sw.words = words.words;
|
|
});
|
|
|
|
//events
|
|
$(document).on('click', '.start', function() {
|
|
startNewGame();
|
|
});
|
|
|
|
$(document).on('click', '.word-button', function(ev, el) {
|
|
el = $(ev.currentTarget);
|
|
if (el.hasClass('disabled')) {
|
|
return;
|
|
}
|
|
$('.word-button').addClass('disabled');
|
|
if(sw.currentWord == el.html()) {
|
|
sw.correctWords = sw.correctWords + 1;
|
|
el.addClass('btn-success');
|
|
} else {
|
|
sw.wrongWords = sw.wrongWords + 1;
|
|
el.addClass('btn-danger');
|
|
}
|
|
|
|
setTimeout(function() {
|
|
$('.word-button[data-word="' + sw.currentWord + '"]').addClass('btn-success');
|
|
|
|
if(sw.gameover) {
|
|
setTimeout(function() {
|
|
gameOver();
|
|
}, 1000);
|
|
} else {
|
|
setTimeout(function() {
|
|
startGame();
|
|
}, 1000);
|
|
}
|
|
}, 1000);
|
|
});
|
|
|
|
|
|
//globals
|
|
sw.words = [];
|
|
sw.correctWords = 0;
|
|
sw.wrongWords = 0;
|
|
sw.time = 0;
|
|
sw.finaltime = 0;
|
|
sw.gameover = false;
|
|
sw.currentWord;
|
|
})(jQuery);
|
|
|
|
|
|
|
|
//utils
|
|
(function() {
|
|
window.Utils = {};
|
|
|
|
Utils.ellipsis = function(text, maxLength){
|
|
if(typeof maxLength === 'undefined'){
|
|
maxLength = 9000; //a large number
|
|
}
|
|
|
|
if (text.length <= maxLength)
|
|
return text;
|
|
|
|
var xMaxFit = maxLength - 1;
|
|
var xTruncateAt = text.lastIndexOf(' ', xMaxFit);
|
|
if (xTruncateAt == -1 || xTruncateAt < maxLength / 2)
|
|
xTruncateAt = xMaxFit;
|
|
|
|
return text.substr(0, xTruncateAt) + "…";
|
|
};
|
|
|
|
})();
|
|
|