需要包含代码

时间:2017-01-08 21:11:23

标签: python

所以我试图从头开始制作一个简单的基于文本的游戏,我马上就遇到了问题。我正在尝试为游戏中发生的事件创建一个类,以便更轻松地编写代码。这就是我的意思:

class event(object):
    def __init__(self, text, trigger1, trigger2, outcome1, outcome2):
        print(text)
        time.sleep(1)
        choice= input("What will you do?")
        if choice == trigger1:
               (Somehow execute outcome 1)
        if choice == trigger2:
               (Somehow execute outcome 2)

但我不知道如何让结果包含我稍后会写的代码,所以任何帮助都将不胜感激!

4 个答案:

答案 0 :(得分:2)

pythonic方法是使用带有函数对象的字典:

def outcome1():
    print("Outcome 1")

def outcome2():
    print("Outcome 2")

def event(text, triggers):
    print(text)
    time.sleep(1)
    choice= input("What will you do?")
    triggers[choice]()

event("You can got west or east.", {
    "go west": outcome1,
    "go east": outcome2,
})

答案 1 :(得分:1)

我希望我能正确理解你的问题,如果不符合目标,请随时纠正我。

当您创建类Event的新实例时(以及将类的第一个字符大写的约定)。将函数分配给outcome1和outcome2的值,该值将根据它们各自的触发器执行。

def outcomeFunction1():
    #Whatever you'd like to do for first outcome
    print("Hello")

def outcomeFunction2():
    #Whatever you'd like to do for second outcome
    print("Bye")

Event('text', 'trigger1', 'trigger2', outcomeFunction1(), outcomeFunction2())

在你的班级定义中写:

if choice == trigger1:
   outcome1

elif choice == trigger2:
   outcome2

希望这有帮助!

答案 2 :(得分:0)

为什么这是 init ?你真的要在每个新活动上创建新实例吗?对于你的问题,如果我的问题正确,那么这就是你可能想要的代码。

def outcome1(text):
    print("outcome1: %s" % text)

def outcome2(text):
    print ("outcome2: %s" % text)

trigger_map = {
    trigger1 : outcome1,
    trigger2 : outcome2,
}

class event(object):
    def __init__(self, trigger_map):
        sefl._tmap = trigger_map

    def onEvent (self, text):
        print(text)
        time.sleep(1)
        choice= input("What will you do?")
        return self._tmap [choice] (text)

答案 3 :(得分:0)

对不起,如果我误解了你的问题,但我在这里......

这里的答案取决于您是否要为每个事件创建一个新实例。如果你这样做,代码可能看起来像这样(正如Jeremy E.指出的那样,将类的第一个字符大写是个好主意):

class Event:
    def __init__(self, text, question, trigger1, trigger2, outcome1, outcome2):
        self.text, self.question = text, question
        self.trigger1, self.trigger2 = trigger1, trigger2
        self.outcome1, self.outcome2 = outcome1, outcome2
    def get_choice(self):
        print(self.text)
        self.choice = input(self.question)
    def execute(self):
        if self.choice == self.trigger1:
            exec(self.outcome1)
        if self.choice == self.trigger2:
            exec(self.outcome2)

我使用exec函数来执行结果。我将一些代码移动到不同的函数,留下__init__函数来保存其他函数的变量。然后,您可以为每个事件创建一个实例,如下所示:

room = Event("You are in a room with exits to the north and east.", "Where will you go?", "north", "east", "print('You went north.')", "print('You went east.'")

注意我还添加了question参数,以便不对每个事件强制What will you do?个问题。

现在,如果您只想要Event类的一个实例,则代码有点不同:

class Event:
    def make_event(self, text, question, trigger1, trigger2, outcome1, outcome2):
        print(text)
        choice = input(question)
        if choice == trigger1:
            exec(outcome1)
        if choice == trigger2:
            exec(outcome2)

您可以看到代码更短。要使用此方法创建事件,您可以执行以下操作(使用与之前相同的示例):

event = Event() # This is only needed once, at the start of the program
event.make_event("You are in a room with exits to the north and east.", "Where will you go?", "north", "east", "print('You went north.')", "print('You went east.')")

编辑:您可能希望完全删除类定义,只留下我上面为您编写的make_event函数。

您可以选择其中任何一个类示例,也可以使用他们的想法制作自定义示例。我希望我回答你的问题。