5. class Prince: def chat(self, player): self.say(player, "ah~help me") class Prince: def chat(self, player): if player.get_task()=="first_meet": self.say(player, "oh~are your here to save my soul") elif player.get_task()=="second_meet": self.say(player, "oh~you need a sword, my hero") elif player.get_task()=="beated_boss": self.say(player, "will u marry me, my hero") #...... 但是,好像这样写,似乎有点丑。。。。
6. Data/table-driven class Prince: TaskChat = { "first_meet":"oh~are your here to save my soul", "second_meet":"oh~you need a sword, my hero", "beated_boss":"will u marry me, my hero", } def chat(self, player): self.say(player, self.TaskChat[player.get_task()]) Well, 静态对话满足了,如果动态数据,额。。。用lambda? ………… “first_meet”:(lambda data:”oh~are you here to save my soul, are you %s” % data), ……….. 如果点击了npc,以后有的要战斗,有的要发奖,有的要播动画
7. Responsbility Driven class Prince: def trigger(self, player): player.get_task().princess_trigger(self, player) class FirstMeet: def princess_trigger(self, player): self.say(player, "oh~are you here to save my soul") #blablabla...... 额。。。。这样只有公主,那老丈人会有意见,老丈人可是国王啊,还有各种七大姑八大姨,这样写内聚度会越来越低,所以我们放一个大招:
8. Responsbility Driven class Princess: def trigger(self, player): get_task_mod(player.get_task(), "Princess").trigger(player) class Princess: def trigger(self, player): self.say(player, "oh~are your here to save my soul") class King: def trigger(self, player): self.say(player, “I‘m so appreciated for you saving my daughter’s life”) 差不多了,但事件触发的管理方式,事件触发么。。
9. 用一个简化到极致observer轻松搞定 class FirstMeet: def acquired(self, player): player.add_task("FirstMeet") npc_trigger_mgr.add_listener(player, "princess", Princess) class NpcTriggerMgr: def trigger(self, npc, player): if npc.get_name() in player_trigger_dict[player.id]: task_handle = player_trigger_dict[player.id]["princess"] task_handle[npc.get_name()].trigger(player) def add_listener(self, player, npc_name, class_handle): player_trigger_dict[player.id]["princess"] = class_handle