|
@@ -1,9 +1,44 @@
|
|
|
$(function() {
|
|
|
var connection = null;
|
|
|
|
|
|
+
|
|
|
+ // when creating a word
|
|
|
+ var question = null;
|
|
|
+ var char_list = null;
|
|
|
+
|
|
|
+
|
|
|
+ // when guessing results
|
|
|
var wordlist = null;
|
|
|
var questionlist = null;
|
|
|
|
|
|
+
|
|
|
+ function validate_word(word) {
|
|
|
+ var countmap = {};
|
|
|
+ for (var i = 0; i < char_list.length; i++) {
|
|
|
+ var upper = char_list[i].toUpperCase();
|
|
|
+ if (countmap[upper] == null) {
|
|
|
+ countmap[upper] = 0;
|
|
|
+ }
|
|
|
+ countmap[upper] += 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ var uppercase_word = word.toUpperCase();
|
|
|
+ for (var i = 0; i < uppercase_word.length; i++) {
|
|
|
+ var upper = uppercase_word.charAt(i);
|
|
|
+ var count = countmap[upper];
|
|
|
+ if (count != null) {
|
|
|
+ if (count <= 0) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ countmap[upper] = count - 1;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return word.length > 0;
|
|
|
+ }
|
|
|
+
|
|
|
$('#join').click(function() {
|
|
|
var game_id = $('#gameId').val();
|
|
|
var nick = $('#nick').val();
|
|
@@ -13,7 +48,8 @@ $(function() {
|
|
|
nick: nick,
|
|
|
}
|
|
|
};
|
|
|
- connect(msg);
|
|
|
+
|
|
|
+ send(msg);
|
|
|
});
|
|
|
|
|
|
$('#create').click(function() {
|
|
@@ -25,7 +61,13 @@ $(function() {
|
|
|
nick: nick,
|
|
|
}
|
|
|
};
|
|
|
- connect(msg);
|
|
|
+
|
|
|
+ send(msg);
|
|
|
+ });
|
|
|
+
|
|
|
+ $('#leave-lobby').click(function() {
|
|
|
+ var msg = "leave_lobby";
|
|
|
+ send(msg);
|
|
|
});
|
|
|
|
|
|
$('#ready').click(function() {
|
|
@@ -37,12 +79,17 @@ $(function() {
|
|
|
|
|
|
$('#submit').click(function() {
|
|
|
var word = $('#word').val();
|
|
|
- var msg = {
|
|
|
- submit_word: {
|
|
|
- word: word
|
|
|
- }
|
|
|
- };
|
|
|
- send(msg);
|
|
|
+ if (validate_word(word)) {
|
|
|
+ var msg = {
|
|
|
+ submit_word: {
|
|
|
+ word: word
|
|
|
+ }
|
|
|
+ };
|
|
|
+ send(msg);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ statusMessage("Please use only given characters");
|
|
|
+ }
|
|
|
});
|
|
|
|
|
|
$('#submitGuess').click(function() {
|
|
@@ -55,7 +102,7 @@ $(function() {
|
|
|
list.push([wordlist[i], questionlist[number - 1]]);
|
|
|
}
|
|
|
else {
|
|
|
- $("#status").html("Please enter a valid number");
|
|
|
+ statusMessage("Please enter a valid number");
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
@@ -88,6 +135,9 @@ $(function() {
|
|
|
if (connection != null) {
|
|
|
connection.send(JSON.stringify(message));
|
|
|
}
|
|
|
+ else {
|
|
|
+ connect(message);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
function disconnect() {
|
|
@@ -96,71 +146,71 @@ $(function() {
|
|
|
}
|
|
|
|
|
|
function onReceive(msg) {
|
|
|
- var obj = jQuery.parseJSON(msg.data);
|
|
|
+ var obj = JSON.parse(msg.data);
|
|
|
if (obj.game_not_found != null) {
|
|
|
- $('#status').html("Game \"" + obj.game_not_found.game_id + "\" not found");
|
|
|
+ statusMessage("Game \"" + obj.game_not_found.game_id + "\" not found");
|
|
|
}
|
|
|
else if (obj.game_already_exists != null) {
|
|
|
- $('#status').html("Game \"" + obj.game_already_exists.game_id + "\" already exists");
|
|
|
+ statusMessage("Game \"" + obj.game_already_exists.game_id + "\" already exists");
|
|
|
+ }
|
|
|
+ else if (obj.left_lobby != null) {
|
|
|
+ setView('login');
|
|
|
+ $('#lobby-control').hide();
|
|
|
}
|
|
|
else if (obj.game_state != null) {
|
|
|
+
|
|
|
+ updatePlayerList(obj.game_state.players);
|
|
|
+
|
|
|
var gs = obj.game_state;
|
|
|
if (gs.state_data === "starting") {
|
|
|
- $('#startingform').show();
|
|
|
+ setView('starting');
|
|
|
}
|
|
|
else if (gs.state_data.creating != null) {
|
|
|
- var players = gs.players;
|
|
|
- playerlist = "";
|
|
|
- for (var i = 0; i < players.length; i++) {
|
|
|
- playerlist += players[i].nick + "(" + players[i].points + ")";
|
|
|
- if (i + 1 < players.length)
|
|
|
- playerlist += ", ";
|
|
|
- }
|
|
|
- $('#status').html("Players: " + playerlist);
|
|
|
|
|
|
var creating = gs.state_data.creating;
|
|
|
var chars = creating.available_chars;
|
|
|
- $('#question').val(creating.question);
|
|
|
- $('#letters').val(chars.join());
|
|
|
|
|
|
+ question = creating.question;
|
|
|
+ char_list = chars;
|
|
|
+ $('#question-box').html(creating.question);
|
|
|
+ $('#letter-box').html(chars.join(" "));
|
|
|
|
|
|
- $('#guessing').hide();
|
|
|
- $('#startingform').hide();
|
|
|
- $('#results').hide();
|
|
|
- $('#createform').show();
|
|
|
+ setView('creating');
|
|
|
}
|
|
|
else if (gs.state_data.guessing != null) {
|
|
|
var guesses = gs.state_data.guessing;
|
|
|
- var sub_words = guesses.submitted_words;
|
|
|
- var questions = guesses.questions;
|
|
|
- var questionsHtml = "";
|
|
|
- for (var i = 0; i < questions.length; i++) {
|
|
|
- questionsHtml += (i + 1) + ": " + questions[i] + "<br>";
|
|
|
- }
|
|
|
- $('#guessingDynTable').html(questionsHtml);
|
|
|
- $('#guessingDyn').html("");
|
|
|
- for (var i = 0; i < sub_words.length; i++) {
|
|
|
- var $label = $("<label to='g" + i + "'>" + sub_words[i][0] + "</label>");
|
|
|
- var $field = $("<input id='g" + i + "' type='text' /><br>");
|
|
|
- $('#guessingDyn').append($label);
|
|
|
- $('#guessingDyn').append($field);
|
|
|
- }
|
|
|
-
|
|
|
- questionlist = questions;
|
|
|
- wordlist = sub_words.map(pair => pair[0]);
|
|
|
-
|
|
|
- $('#startingform').hide();
|
|
|
- $('#results').hide();
|
|
|
- $('#createform').hide();
|
|
|
- $('#guessing').show();
|
|
|
+ displayGuessing(guesses);
|
|
|
}
|
|
|
}
|
|
|
else if (obj.round_result != null) {
|
|
|
displayResult(obj.round_result);
|
|
|
}
|
|
|
else {
|
|
|
- $('#status').html("Unknown Message recieved");
|
|
|
+ statusMessage("Unknown message retrieved");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ function displayGuessing(guesses) {
|
|
|
+ var sub_words = guesses.submitted_words;
|
|
|
+ var questions = guesses.questions;
|
|
|
+ var questionsHtml = "";
|
|
|
+ for (var i = 0; i < questions.length; i++) {
|
|
|
+ questionsHtml += (i + 1) + ": " + questions[i] + "<br>";
|
|
|
}
|
|
|
+ $('#guessingDynTable').html(questionsHtml);
|
|
|
+ $('#guessingDyn').html("");
|
|
|
+ for (var i = 0; i < sub_words.length; i++) {
|
|
|
+ var $label = $("<label to='g" + i + "'>" + sub_words[i][0] + "</label>");
|
|
|
+ var $field = $("<input id='g" + i + "' type='text' /><br>");
|
|
|
+ $('#guessingDyn').append($label);
|
|
|
+ $('#guessingDyn').append($field);
|
|
|
+ }
|
|
|
+
|
|
|
+ questionlist = questions;
|
|
|
+ wordlist = sub_words.map(pair => pair[0]);
|
|
|
+
|
|
|
+
|
|
|
+ setView('guessing');
|
|
|
}
|
|
|
|
|
|
function displayResult(result) {
|
|
@@ -170,6 +220,7 @@ $(function() {
|
|
|
solution_dict[sol[i][0]] = sol[i][1];
|
|
|
}
|
|
|
var $table = $('<table/>');
|
|
|
+ //$table.addClass('result-table');
|
|
|
|
|
|
var wordline = "<tr><th></th>";
|
|
|
for(var i = 0; i < result.words.length; i++) {
|
|
@@ -182,10 +233,10 @@ $(function() {
|
|
|
var wordline = "<tr><th>" + result.questions[i] + "</th>";
|
|
|
for(var j = 0; j < result.words.length; j++) {
|
|
|
if (solution_dict[result.words[j]] == result.questions[i]) {
|
|
|
- wordline += "<td bgcolor='lightgreen'>";
|
|
|
+ wordline += "<td class='result-correct'>";
|
|
|
}
|
|
|
else {
|
|
|
- wordline += "<td bgcolor='pink'>";
|
|
|
+ wordline += "<td class='result-wrong'>";
|
|
|
}
|
|
|
wordline += result.guesses[j][i] + "</td>";
|
|
|
}
|
|
@@ -195,9 +246,51 @@ $(function() {
|
|
|
|
|
|
$('#results').html($table);
|
|
|
|
|
|
+ setView('results');
|
|
|
+ }
|
|
|
+
|
|
|
+ function updatePlayerList(players) {
|
|
|
+ playerlist = "";
|
|
|
+ for (var i = 0; i < players.length; i++) {
|
|
|
+ playerlist += players[i].nick + "(" + players[i].points + ")";
|
|
|
+ if (i + 1 < players.length)
|
|
|
+ playerlist += "<br>";
|
|
|
+ }
|
|
|
+ $('#player-list').html(playerlist);
|
|
|
+ $('#lobby-control').show();
|
|
|
+ }
|
|
|
+
|
|
|
+ function setView(view) {
|
|
|
+ $('#loginform').hide();
|
|
|
$('#startingform').hide();
|
|
|
- $('#createform').hide();
|
|
|
+ $('#creating').hide();
|
|
|
$('#guessing').hide();
|
|
|
- $('#results').show();
|
|
|
+ $('#results').hide();
|
|
|
+
|
|
|
+ switch (view) {
|
|
|
+ case 'login':
|
|
|
+ $('#loginform').show();
|
|
|
+ break;
|
|
|
+ case 'starting':
|
|
|
+ $('#startingform').show();
|
|
|
+ $('#results').show();
|
|
|
+ break;
|
|
|
+ case 'creating':
|
|
|
+ $('#creating').show();
|
|
|
+ break;
|
|
|
+ case 'guessing':
|
|
|
+ $('#guessing').show();
|
|
|
+ break;
|
|
|
+ case 'results':
|
|
|
+ $('#results').show();
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ function statusMessage(message) {
|
|
|
+ $('#status').html(message);
|
|
|
+ setTimeout(function () {
|
|
|
+ $('#status').html("");
|
|
|
+ }, 4000);
|
|
|
}
|
|
|
});
|