所以我正在制作一个基于文本的冒险游戏。我现在正在研究引擎,经过长时间寻找解决此问题的方法后我陷入困境。
我有一个名为use_action的类。该类的一个参数是函数的名称。我希望能够创建此操作并具有可能的自定义函数,以便调用此use_action的项执行特定的操作。
我现在正在使用的自定义功能是玩家受伤的地方,每隔几秒就会损失5 HP。
这应该在他使用特定项目时开始,然后在他使用将链接到停止功能的药物时停止。我遇到的问题是该函数立即被调用。即使我试图在一个long if else语句的末尾调用它。然后,当我到达我试图称呼它的地方时,它不会打电话。
我不会发布整个类,因为它的功能大约是150行代码。
class use_action(object):
def __init__(self, function = None):
self.function = function
pizza_act = use_action(function = mechanics.tmr.start())
#This is located at the end of an if else statement after the player types use . . .
if self.function != None:
self.function
else:
pass
来自力学:
thread_list = []
class TimerClass(threading.Thread):
def __init__(self, function, time):
threading.Thread.__init__(self)
self.event = threading.Event()
self.function = function
self.time = time
thread_list.append(self)
def run(self):
while not self.event.is_set():
self.event.wait( self.time )
self.function()
def stop(self):
self.event.set()
def blank_current_readline():
# Next line said to be reasonably portable for various Unixes
(rows,cols) = struct.unpack('hh', fcntl.ioctl(sys.stdout, termios.TIOCGWINSZ,'1234'))
text_len = len(readline.get_line_buffer())+2
# ANSI escape sequences (All VT100 except ESC[0G)
sys.stdout.write('\x1b[2K') # Clear current line
sys.stdout.write('\x1b[1A\x1b[2K'*(text_len/cols)) # Move cursor up and clear line
sys.stdout.write('\x1b[0G') # Move to start of line
def pizza_poisoned_action():
# threading.Timer(10, pizza_poisoned_action).start()
blank_current_readline()
print "You lost 5 hp."
initialization.gamer.hp -= 5
sys.stdout.write('> ' + readline.get_line_buffer())
sys.stdout.flush() # Needed or text doesn't show until a key is pressed
tmr = TimerClass(pizza_poisoned_action, 5)
对于篇幅很抱歉,我试图只为此发布相关内容。如果您认为我应该发布一些可能相关的其他代码,请告诉我们!
答案 0 :(得分:1)
如果要传递函数,不调用它。否则,你将传递返回值。
pizza_act = use_action(function = mechanics.test()) #Wrong!
pizza_act = use_action(function = mechanics.test) #Right