コード例 #1
0
ファイル: skraflgame.py プロジェクト: s31415/Netskrafl
    def _store_locked(self):
        """ Store the game after having acquired the object lock """

        assert self.uuid is not None

        gm = GameModel(id = self.uuid)
        gm.timestamp = self.timestamp
        gm.ts_last_move = self.ts_last_move
        gm.set_player(0, self.player_ids[0])
        gm.set_player(1, self.player_ids[1])
        gm.irack0 = self.initial_racks[0]
        gm.irack1 = self.initial_racks[1]
        gm.rack0 = self.state.rack(0)
        gm.rack1 = self.state.rack(1)
        gm.over = self.is_over()
        sc = self.final_scores() # Includes adjustments if game is over
        gm.score0 = sc[0]
        gm.score1 = sc[1]
        gm.to_move = len(self.moves) % 2
        gm.robot_level = self.robot_level
        gm.prefs = self._preferences
        tile_count = 0
        movelist = []
        best_word = [None, None]
        best_word_score = [0, 0]
        player = 0
        for m in self.moves:
            mm = MoveModel()
            coord, tiles, score = m.move.summary(self.state.board())
            if coord:
                # Regular move: count the tiles actually laid down
                tile_count += m.move.num_covers()
                # Keep track of best words laid down by each player
                if score > best_word_score[player]:
                    best_word_score[player] = score
                    best_word[player] = tiles
            mm.coord = coord
            mm.tiles = tiles
            mm.score = score
            mm.rack = m.rack
            mm.timestamp = m.ts
            movelist.append(mm)
            player = 1 - player
        gm.moves = movelist
        gm.tile_count = tile_count
        # Update the database entity
        gm.put()

        # Storing a game that is now over: update the player statistics as well
        if self.is_over():
            pid_0 = self.player_ids[0]
            pid_1 = self.player_ids[1]
            u0 = User.load(pid_0) if pid_0 else None
            u1 = User.load(pid_1) if pid_1 else None
            if u0:
                mod_0 = u0.adjust_highest_score(sc[0], self.uuid)
                mod_0 |= u0.adjust_best_word(best_word[0], best_word_score[0], self.uuid)
                if mod_0:
                    # Modified: store the updated user entity
                    u0.update()
            if u1:
                mod_1 = u1.adjust_highest_score(sc[1], self.uuid)
                mod_1 |= u1.adjust_best_word(best_word[1], best_word_score[1], self.uuid)
                if mod_1:
                    # Modified: store the updated user entity
                    u1.update()
コード例 #2
0
ファイル: skraflgame.py プロジェクト: gitter-badger/Netskrafl
    def _store_locked(self):
        """ Store the game after having acquired the object lock """

        assert self.uuid is not None

        gm = GameModel(id=self.uuid)
        gm.timestamp = self.timestamp
        gm.ts_last_move = self.ts_last_move
        gm.set_player(0, self.player_ids[0])
        gm.set_player(1, self.player_ids[1])
        gm.irack0 = self.initial_racks[0]
        gm.irack1 = self.initial_racks[1]
        gm.rack0 = self.state.rack(0)
        gm.rack1 = self.state.rack(1)
        gm.over = self.is_over()
        sc = self.final_scores()  # Includes adjustments if game is over
        gm.score0 = sc[0]
        gm.score1 = sc[1]
        gm.to_move = len(self.moves) % 2
        gm.robot_level = self.robot_level
        gm.prefs = self._preferences
        tile_count = 0
        movelist = []
        best_word = [None, None]
        best_word_score = [0, 0]
        player = 0
        for m in self.moves:
            mm = MoveModel()
            coord, tiles, score = m.move.summary(self.state)
            if coord:
                # Regular move: count the tiles actually laid down
                tile_count += m.move.num_covers()
                # Keep track of best words laid down by each player
                if score > best_word_score[player]:
                    best_word_score[player] = score
                    best_word[player] = tiles
            mm.coord = coord
            mm.tiles = tiles
            mm.score = score
            mm.rack = m.rack
            mm.timestamp = m.ts
            movelist.append(mm)
            player = 1 - player
        gm.moves = movelist
        gm.tile_count = tile_count
        # Update the database entity
        gm.put()

        # Storing a game that is now over: update the player statistics as well
        if self.is_over():
            pid_0 = self.player_ids[0]
            pid_1 = self.player_ids[1]
            u0 = User.load(pid_0) if pid_0 else None
            u1 = User.load(pid_1) if pid_1 else None
            if u0:
                mod_0 = u0.adjust_highest_score(sc[0], self.uuid)
                mod_0 |= u0.adjust_best_word(best_word[0], best_word_score[0],
                                             self.uuid)
                if mod_0:
                    # Modified: store the updated user entity
                    u0.update()
            if u1:
                mod_1 = u1.adjust_highest_score(sc[1], self.uuid)
                mod_1 |= u1.adjust_best_word(best_word[1], best_word_score[1],
                                             self.uuid)
                if mod_1:
                    # Modified: store the updated user entity
                    u1.update()