/**************************************************
** GAME VARIABLES
**************************************************/
var socket; // Socket
var gameInfos;
/**************************************************
** GAME INITIALISATION
**************************************************/
function init() {
// Connexion à socket.io
socket = io.connect('http://localhost:8000');
// Gestion des evenements
setEventHandlers();
// On demande le pseudo a l'utilisateur, on l'envoie au serveur et on l'affiche dans le titre
$("#game").html("");
$("#start").on("click", function() {
socket.emit('nouveau', $("#pseudo").val());
document.title = $("#pseudo").val() + ' - ' + document.title;
$("#game").html("Recherche d'un adversare...");
});
};
/**************************************************
** GAME EVENT HANDLERS
**************************************************/
var setEventHandlers = function() {
socket.on("message", onMessage);
socket.on("autres", onAutres);
socket.on("game", onGame);
socket.on("questions", play);
};
function onGame(game) {
gameInfos = game;
$("#game").html("Adversaire trouvé : "+game[0]+"
Début de la partie dans 5s.");
window.setTimeout(function() {
socket.emit('start', gameInfos[1])
}, 5000);
}
function onMessage(message) {
alert(message);
};
function onAutres(pseudo) {
alert("Voici un nouveau joueur : " + pseudo);
};
/**************************************************
** GAME ENGINE (SORT OF)
**************************************************/
// IDs
var id_cat = 0, id_theme = 0, id_quest = 0;
// Shortcuts
var json, category, theme;
// Timer
var timing = 5, secRestantes, timer;
var baseWidth;
var score = 0;
var reponseUser = -1, bonneReponse;
function apiReq() {
$.ajax({
async: false,
url: "../../api/",
dataType: 'json',
success: function(data) {
json = data;
}
});
}
function loadCat(id) {
if(id === 0) category = json.cat1;
if(id === 1) category = json.cat2;
console.log(category);
$("#game").html("
Catégorie : "+category.nom_cat+"
");
$("#game").append("");
$("#game").append("");
$("#game").append("");
loadTheme(id_theme);
}
function loadTheme(id) {
theme = category.themes[id];
$("#theme").html("");
$("#theme").append("- "+theme.reponse1+"
"
+"- "+theme.reponse2+"
- Les deux
");
quest(id_quest);
}
function quest(id) {
$("#question").html(theme.questions[id].intitule);
startTimer();
bonneReponse = parseInt(theme.questions[id].bonneReponse);
console.info('Question ' + (id_quest + 1) + '/' + theme.questions.length + ' : '
+theme.questions[id].intitule);
$("#rep1").off('click');
$("#rep1").on("click", function() { reponseUser = 1; checkAnswer(); });
$("#rep2").off('click');
$("#rep2").on("click", function() { reponseUser = 2; checkAnswer(); });
$("#both").off('click');
$("#both").on("click", function() { reponseUser = 0; checkAnswer(); });
}
function checkAnswer() {
stopTimer();
if(reponseUser == bonneReponse) {
score += secRestantes+1;
}
$("#score").html("Score : "+score);
switch(bonneReponse) {
case 0: $("#rep1").addClass("wrong-answer");
$("#rep2").addClass("wrong-answer");
$("#both").addClass("good-answer");
break;
case 1: $("#rep1").addClass("good-answer");
$("#rep2").addClass("wrong-answer");
$("#both").addClass("wrong-answer");
break;
case 2: $("#rep1").addClass("wrong-answer");
$("#rep2").addClass("good-answer");
$("#both").addClass("wrong-answer");
break;
}
window.setTimeout(nextQuestion, 2000);
}
function nextQuestion() {
$("#rep1").removeClass();
$("#rep2").removeClass();
$("#both").removeClass();
// Dernière question du thème en cours
if((id_quest+1) == theme.questions.length) {
// Dernier thème de la catégorie en cours
if((id_theme+1) == category.themes.length) {
// Dernière catégorie
if((id_cat+1) == 2) {
endGame();
} else {
id_quest = 0;
id_theme = 0;
id_cat++;
loadCat(id_cat);
}
} else {
id_quest = 0;
id_theme++;
loadTheme(id_theme);
}
} else {
id_quest++;
quest(id_quest);
}
}
function play(questions) {
console.log(questions);
json = questions;
loadCat(id_cat);
}
function startTimer() {
$("#timer").css("width", "100%");
baseWidth = $("#timer").width();
$("#timer").animate({'width' : '0%'}, timing*1000);
timer = window.setTimeout(checkAnswer, timing*1000);
}
function stopTimer() {
window.clearTimeout(timer);
$("#timer").stop();
secRestantes = Math.round($("#timer").width()/baseWidth*timing);
}
function endGame() {
$("#game").html("Vous avez marqué "+score+" miams
"
+"Enregistrez votre score : "
+"
");
$("#sendScore").click(function() {
addScore($("#login").val(), score);
var message = json.message;
$("#registerScore").fadeOut();
console.log(message);
if(message == "score_add_success") {
$("#registerScore").addClass("success");
$("#registerScore").html("Votre score a bien été enregistré
"+
"Voir les meilleurs scores");
} else {
$("#registerScore").addClass("error");
if(message === "higher_score_present") {
$("#registerScore").html("Un score supérieur ou égal existe déjà avec ce pseudonyme
"+
"Voir les meilleurs scores");
} else {
$("#registerScore").html("Une erreur est survenue ("+status.message+")
"+
"Voir les meilleurs scores");
}
}
$("#registerScore").fadeIn();
});
}
function addScore(userLogin, userScore) {
$.ajax({
async: false,
url: "../../api/?page=palmares",
type: "POST",
dataType: 'json',
data: {login: userLogin, score: userScore},
success: function(data) {
json = data;
}
});
}
function displayScores() {
$.get("./api/?page=palmares", function(data) {
var list = "";
for(var i = 0; i < 10; i++) {
list += "- "+data[i].login+" - "+data[i].score+"
";
}
list += "
";
$("#palmares").html(list);
});
}