当前位置: 首页>>代码示例>>Python>>正文


Python Game.game_loop方法代码示例

本文整理汇总了Python中game.game.Game.game_loop方法的典型用法代码示例。如果您正苦于以下问题:Python Game.game_loop方法的具体用法?Python Game.game_loop怎么用?Python Game.game_loop使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在game.game.Game的用法示例。


在下文中一共展示了Game.game_loop方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: Table

# 需要导入模块: from game.game import Game [as 别名]
# 或者: from game.game.Game import game_loop [as 别名]
class Table(threading.Thread):
    """
        class responsible for adding, removing players at table
        implements observer pattern
    """
    PLAYERS_LIMIT = 6
    PLAYERS_MINIMUM = 2
    TIMEOUT = 150

    def __init__(self):
        threading.Thread.__init__(self)
        self.players = []
        self.players_sockets = []
        self.started = False
        self.controller = controller.Controller(self)
        self.game = Game(self)
        self.killed = False

    def run(self):
        """
            waits until enough players entered game and all of them are ready
            then starts main game loop
        :return: nothing
        """
        while not self.started:
            if self.killed:
                return

            players_with_ready_input = self.__select_players()
            for player in players_with_ready_input:
                try:
                    message = player.get_input()
                except Exception as msg:
                    print msg
                    controller.pressed_leave(self, player)
                    continue

                self.controller.serve_event(player, message['content'])

            for player in self.players:
                if not player.ready and player.arrival_time + self.TIMEOUT < time.time():
                    self.remove_player(player)
                    print 'Player ' + player.name + ' removed - waited too long.'

            if controller.can_start_game(self):
                self.started = True

        try:
            self.game.game_loop()
        except Exception as msg:
            print msg
        print 'Game ended'

    def add_player(self, player):
        """
            adds observer
            raises exception if number of players limit was reached
        :param player: Player
        :raise: Exception
        :return: nothing
        """
        if len(self.players) < self.PLAYERS_LIMIT:
            self.players.append(player)
            self.players_sockets.append(player.socket)
            self.notify_players()
        else:
            raise Exception('Players limit reached.\n')

    def remove_player(self, player):
        """
            remove observer
            raise exception if given player does not exist
        :param player: Player
        :raise: Exception
        :return: nothing
        """
        if player in self.players:
            self.players.remove(player)
            self.players_sockets.remove(player.socket)
            self.notify_players()
        else:
            raise Exception('No such player at the table.\n')

    def notify_players(self, message=None):
        """
            notify observers
            sends message to all players containing game state
        :return: nothing
        """
        time.sleep(1)
        for player in self.players:
            try:
                if not player.leaving:
                    player.send(self.__dict(player, message))
            except socket.error:
                controller.pressed_leave(self, player)
                print 'Player ' + player.name + ' disconnected'

    def is_full(self):
        """
#.........这里部分代码省略.........
开发者ID:madderdin,项目名称:zpr,代码行数:103,代码来源:table.py


注:本文中的game.game.Game.game_loop方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。