-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgame.js
108 lines (106 loc) · 2.33 KB
/
game.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
var _ = require('underscore');
Game = module.exports = function(){
this.users = {};
this.word;
this.points = {};
this.time_limit = 60;
this.words_set = 'Countries';
this.status = 'new';
this.started_time;
this.admin;
this.url;
var self = this;
return {
get_users: function(){
return self.users;
},
reset_points: function(){
_.each(self.points, function(num,key){
self.points[key] = 0;
})
},
add_user: function(user_id, name, screen_name, profile_image_url, admin){
self.users[user_id] = {
name: name,
screen_name: screen_name,
profile_image_url: profile_image_url,
admin: admin
}
self.points[user_id] = 0;
if(admin)
self.admin = user_id;
},
remove_user: function(user_id){
delete self.users[user_id];
delete self.points[user_id];
},
reset_admin: function(admin_id){
var userKeys = _.without(_.keys(self.users), admin_id);
self.admin = null;
if(_.size(userKeys)){
self.users[userKeys[0]].admin = true;
self.admin = userKeys[0];
}
},
set_word: function(word){
self.word = word;
},
get_word: function(){
return self.word;
},
check_winner: function(user_id, word){
if(typeof(self.users[user_id]) != "undefined"){
if(word && word.toLowerCase() === self.word.toLowerCase()){
self.word = null;
self.points[user_id]++;
return true
}
}
return false;
},
get_scores: function(){
return self.points;
},
get_status: function(){
return self.status;
},
set_status: function(status){
self.status = status;
},
set_time_limit: function(time){
self.time_limit = time;
},
set_words_set: function(words_set){
self.words_set = words_set;
},
get_words_set: function(){
return self.words_set;
},
set_started_time: function(){
self.started_time = new Date().getTime();
},
get_time_left: function(){
var currentTime = new Date().getTime();
return self.time_limit - (currentTime/1000 - self.started_time/1000);
},
get_admin_id: function(){
return self.admin;
},
get_summary: function(){
return {
user_count: _.size(self.users),
status: self.status,
users_faces: _.map(self.users, function(u){
return {image_url: u.profile_image_url};
}),
url: self.url
};
},
set_url: function(url){
self.url = url;
},
get_url: function(){
return self.url;
}
};
};