Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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
                    }
Ejemplo n.º 3
0
    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())
Ejemplo n.º 4
0
    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()
                }