diff options
-rw-r--r-- | game.html | 18 | ||||
-rw-r--r-- | game.js | 158 | ||||
-rw-r--r-- | style.css | 28 |
3 files changed, 203 insertions, 1 deletions
@@ -8,5 +8,23 @@ <script src="game.js"></script> </head> <body> + <button type="button" id="btn_join">Join a Game !</button> + <button type="button" id="btn_pick_black">Become the Judge</button> + <button type="button" id="btn_collect">Collect the Cards</button> + + <div id="black_card"> + </div> + <table id="white_cards"> + <tr><td class="card_desc"></td></tr> + <tr><td class="card_desc"></td></tr> + <tr><td class="card_desc"></td></tr> + <tr><td class="card_desc"></td></tr> + <tr><td class="card_desc"></td></tr> + <tr><td class="card_desc"></td></tr> + <tr><td class="card_desc"></td></tr> + <tr><td class="card_desc"></td></tr> + <tr><td class="card_desc"></td></tr> + <tr><td class="card_desc"></td></tr> + </table> </body> </html> @@ -1,15 +1,171 @@ $(document).ready(function() { - var ws = new WebSocket('ws://' + document.location.host + ':1236'); + request_queue = [] + var map_white_idx_row = {}; + + var ws = new WebSocket('ws://' + document.location.hostname + ':1236'); + + var self = this; ws.onopen = function() { + console.log('connection established'); + $('#btn_join').show(); }; ws.onclose = function() { }; ws.onmessage = function(evt) { + message = JSON.parse(evt.data); + + if (message['type'] == 'notification') { + handle_notification(message['content']); + } else { + handle_response(message['content']); + } + }; + + var handle_notification = function(msg) { + console.log('notification:'); + console.log(msg); + }; + + var handle_response = function(response) { + rq = request_queue.shift(); + + if (response['status'] != 0) { + alert(response['info']); + } + + switch (rq) { + case 'join_game': + console.log(response); + if (response['status'] != 0) { + break; + } + $('#btn_join').hide(); + $('#btn_pick_black').show(); + console.log('just joined the game'); + /* self.request_show_cards(); */ + /* XXX intentional fallback */ + case 'view_player_cards': + if (response['status'] == 0) { + $('#white_cards').show(); + for (i in response['result']) { + element = $('.card_desc').eq(i); + element.html(response['result'][i][1]); + element.dblclick(gen_callback_white_card(i)); + map_white_idx_row[response['result'][i][0]] = i; + } + } + break; + case 'pick_black_card': + if (response['status'] != 0) { + break; + } + $('#btn_collect').show(); + $('#btn_pick_black').hide(); + /* self.request_show_black_card(); */ + /* XXX intentional fallback */ + + case 'view_black_card': + if (response['status'] == 0) { + $('#black_card').show(); + $('#black_card').html(response['result']); + } + break; + case 'play_white_card': + if (response['status'] == 0) { + row = map_white_idx_row[response['result']['card_id']]; + + element = $('.card_desc').eq(row); + element.empty(); + element.dblclick(null) + } + break; + case 'collect_cards': + if (response['status'] != 0) { + break; + } + $('#btn_collect').hide(); + /* XXX intentional fallback */ + case 'view_played_cards': + if (response['status'] == 0) { + for (i in response['result']) { + console.log(response['result'][i]); + } + } + break; + default: + console.log(evt); + } }; ws.onerror = function(evt) { + alert(evt); + }; + + var gen_callback_white_card = function(index) { + return function() { + request = { + 'op': 'play_white_card', + 'card_id': index, + }; + + request_queue.push('play_white_card'); + ws.send(JSON.stringify(request)); + }; + }; + + $('#btn_join').click(function() { + game_name = prompt('Name of the game'); + + request = { + 'op': 'join_game', + 'game_name': game_name, + }; + request_queue.push('join_game'); + ws.send(JSON.stringify(request)); + }); + + $('#btn_pick_black').click(function() { + request = { + 'op': 'pick_black_card', + }; + request_queue.push('pick_black_card'); + ws.send(JSON.stringify(request)); + }); + + $('#btn_collect').click(function() { + request = { + 'op': 'collect_cards', + }; + request_queue.push('collect_cards'); + ws.send(JSON.stringify(request)); + }); + + this.request_show_cards = function() { + request = { + 'op': 'view_player_cards', + }; + + request_queue.push('view_player_cards'); + console.log(request); + ws.send(JSON.stringify(request)); + }; + this.request_show_black_card = function() { + request = { + 'op': 'view_black_card', + }; + + request_queue.push('view_black_card'); + ws.send(JSON.stringify(request)); + }; + this.request_show_played_cards = function() { + request = { + 'op': 'view_played_cards', + }; + + request_queue.push('view_played_cards'); + ws.send(JSON.stringify(request)); }; }); diff --git a/style.css b/style.css new file mode 100644 index 0000000..c6ecbe6 --- /dev/null +++ b/style.css @@ -0,0 +1,28 @@ +body { + background-color: #222222; + color: #dddddd; +} + +td { + border: 1px white solid; +} + +#black_card { + display: none; +} + +#white_cards { + display: none; +} + +#btn_join { + display: none; +} + +#btn_collect { + display: none; +} + +#btn_pick_black { + display: none; +} |