def join(self, gid): query = Game.query(Game.gid == gid) name = self.getPOSTorRandom('username', User) # Look for the game if query.count() != 1: self.stderr('Unknown Game') else: game = query.fetch(1)[0] if game.running: self.stderr('Game has started') elif len(game.members) >= game.maxPlayers: self.stderr('The maximum number of players has been reached') elif User.query(User.name==name, User.gid==gid).count() != 0: self.stderr('Username already exists') else: sid = self.join_game(game, name) game.put() self.json['status'] = 'joined' # Not sure why either of these are needed self.json['token'] = game.gid self.json['session'] = sid
def get_game(self, gid): query = Game.query(Game.gid == gid) # Look for the game if query.count() != 1: self.stderr('Unknown Game') else: game = query.fetch(1)[0] self.json['status'] = 'running' if game.running else 'waiting' self.json['full'] = (len(game.members) >= game.maxPlayers) self.json['users'] = game.members if game.running and self.checkLogin(False): self.json['game'] = { } self.json['game']['data'] = { 'status' : 'running' if game.running else 'waiting', 'token' : game.gid, 'secret' : self.user.secret } self.json['player'] = self.user.toDict() self.json['game']['maps'] = { "world" : Map(game.gmap).toDict(), "city" : Map(self.user.homeMap).toDict() } self.json['game']['maps']['world']['players'] = { } for user in User.query(User.gid == game.gid).fetch(): self.json['game']['maps']['world']['players'][user.uid] = { "id" : user.uid, "name" : user.name, "level" : user.level }
def get(self): self.json['games'] = [ ] query = Game.query( Game.private == False, Game.running == False ) for game in query.fetch(): # Only show games which aren't full if len(game.members) < game.maxPlayers: self.json['games'].append(game.toDict())
def start(self, gid): # You must be the owner of a game to start it, so we should # check if they are loged on if not self.checkLogin(): return query = Game.query(Game.gid == gid) if query.count() != 1: self.stderr('Unknown Game') else: game = query.fetch(1)[0] if game.owner != self.user.uid: self.stderr('You are not authorised to start this game') else: game.running = True savedCMap = None # Pick places for each of the players and set their # lastUpdated value to the start of the game so they can # load resources mapObj = Map(game.gmap) for user in User.query(User.gid == game.gid).fetch(): cMap = Map.generateCityMap() user.positionOnMap = mapObj.pickRandomTile(user) user.lastUpdated = datetime.datetime.now() user.homeMap = cMap.toString() user.put() if user.uid == self.user.uid: savedCMap = cMap game.gmap = mapObj.toString() game.put() self.json['game'] = { } self.json['game']['data'] = { "status" : 'started', "token" : game.gid } self.json['player'] = self.user.toDict() self.json['game']['maps'] = { "world" : mapObj.toDict(), "city" : cMap.toDict() }