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


Python Machine.on_enter_player_turn方法代码示例

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


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

示例1: Game

# 需要导入模块: from transitions import Machine [as 别名]
# 或者: from transitions.Machine import on_enter_player_turn [as 别名]
class Game():
    start_message = '''Вы находитесь в запертой кабине лифта, вместе с вами ещё два человека. Через некоторое время запасная дверь кабины откроется, для того, чтобы ею воспользоваться, вам нужна помощь кого-либо из этих людей. После открытия запасной двери запустится счётчик времени, если по иестечении срока никто не выберется – трос оборвётся, вы погибнете.  
Цель игры: набрать максимальное количество очков. Если освобождается один человек, он получает 6 очков. Если освобождаются два человека, каждый из них получает 3 очка. Если освобождаются трое, каждый из них получает 2 очка'''
    phrases = ['Привет',
        'Ты мне нравишься',
        'Ты мне тоже нравишься',
        'Ты мне не нравишься',
        'Ты мне тоже не нравишься',
        'Мне нужна твоя помощь',
        'Мне не нужна твоя помощь',
        'Я не буду тебе помогать',
        'А как же наш третий друг?',
        'Он мне не нравится',
        'Он мне нравится',
        'Я направляюсь к выходу',
        'Подсади меня',
        'Подсаживаю тебя',
        'Вытащи меня',
        'Вытаскиваю тебя',
        'Я согласен',
        'Я не согласен',
        'Ты будешь со мной дружить?',
        'У тебя есть план?',
        'Уступи мне дорогу',
        'Уступаю тебе дорогу',
        'Не уступаю тебе дорогу',
        'Похоже, вы обойдётесь без меня']
    states = ['waiting', 'waiting_for_start', 'joining_player', 'player_turn', 'starting_game', 'starting_round', 'ending_turn', 'ending_round', 'ending_game']
    def __init__(self, max_pl_num):
        self.max_pl_num = max_pl_num
        self.obj = ObjectSpawner(1)
        self.max_time = 10 * 60
        self.machine = Machine(model=self, states=Game.states, initial='waiting')
        self.machine.add_transition(trigger='_end_round',     source='*', dest='ending_round')
        self.machine.add_transition(trigger='_end_turn',      source='*',  dest='ending_turn')
        self.machine.add_transition(trigger='_start_turn',    source='*',       dest='player_turn')
        self.machine.add_transition(trigger='_start_round',   source='*',       dest='starting_round')
        self.machine.add_transition(trigger='all_players', source='waiting_for_start', dest='starting_game')
        self.machine.add_transition(trigger='_player_joined', source='waiting', dest='waiting_for_start', conditions='is_full')
        self.machine.add_transition(trigger='_player_joined', source='waiting', dest='waiting', unless='is_full')
        self.machine.on_enter_waiting('waiting_notification')
        self.machine.on_enter_starting_game('start_game')
        self.machine.on_enter_starting_round('start_round')
        self.machine.on_enter_player_turn('start_turn')
        self.machine.on_enter_ending_turn('end_turn')
        self.machine.on_enter_ending_round('end_round')
        self.machine.on_enter_ending_game('end_game')
        self.timer = GameTimer(self.max_time, self._end_round)
        skip_action = Action('Пропустить ход', Player.can_skip, Player.skip)
        go_to_action = TargetedAction('Подойти к', Player.can_move, Player.come_to, Player.check_come_to_target, GameObject.on_approach)
        leave_action = TargetedAction('Отойти от', Player.can_move, Player.leave, Player.check_leave_target, GameObject.on_leave)
        punch_action = TargetedAction('Толкнуть', Player.can_punch, Player.punch, Player.check_punch_target, Player.on_punch)
        shoot_action = TargetedAction('Выстрелить в', Player.can_shoot, Player.shoot, Player.check_shoot_target, Player.on_shoot)
        conversation_action = ConversationAction('Сказать', Player.can_say_phrase, Player.say_phrase, Player.check_say_phrase, Player.on_say_phrase, self.phrases)
        self.actions = OrderedDict()
        self.actions[go_to_action.title()] = go_to_action
        self.actions[leave_action.title()] = leave_action
        self.actions[punch_action.title()] = punch_action         
        self.actions[shoot_action.title()] = shoot_action
        self.actions[conversation_action.title()] = conversation_action
        self.actions[skip_action.title()] = skip_action



    def get_available_actions(self, player):
        available_actions = []
        for action_name in self.actions:
            if self.actions[action_name].is_available(player):
                available_actions.append(self.actions[action_name])
        return available_actions

    def get_available_targets(self, player, action):
        available_targets = []
        for obj_class in self.obj.objects:
            for obj_inst_id, obj in self.obj.objects[obj_class].items():
                if action.target_check(player, obj):
                    available_targets.append(obj)
        return available_targets

    def build_actions_menu(self, player):
        actions = self.get_available_actions(player)
        root = MenuNode(item_name='Вы можете')
        for action in actions:
            amn = MenuNode(item_name=str(action), item_value=action)
            if action.is_targeted():
                targets = self.get_available_targets(player, action)
                if not targets:
                    continue
                for target in targets:
                    tmn = MenuNode(item_name=str(target), item_value=target)
                    if action.is_conversation():
                        for phrase in action.phrases:
                            pmn = MenuNode(phrase)
                            tmn.add_child(pmn)
                    amn.add_child(tmn)
            root.add_child(amn)
        #     print('{0} menu: \n{1}'.format(amn, amn.menu()))
        #     print('parent: {}'.format(amn.get_parent()))
        #     print('='*10)
        return root
#.........这里部分代码省略.........
开发者ID:KarKarbI4,项目名称:Social-Emotional-Game,代码行数:103,代码来源:Game.py


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