所以我试图从头开始制作一个简单的基于文本的游戏,我马上就遇到了问题。我正在尝试为游戏中发生的事件创建一个类,以便更轻松地编写代码。这就是我的意思:
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)
但我不知道如何让结果包含我稍后会写的代码,所以任何帮助都将不胜感激!
答案 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
函数。
您可以选择其中任何一个类示例,也可以使用他们的想法制作自定义示例。我希望我回答你的问题。