2015-10-20 66 views
0

基本上,我正在制作一个基于文本的python游戏,并碰到了一个块。在python中返回低级函数的高级函数?

玩家可以进入一场战斗,并且一如既往有机会死亡(HP为0)。我想要做的就是打破游戏的主循环,这是几种功能,大致为5-6(从主要到战斗系统功能),分散在不同的文件中。

的结构如下:

core() 
    while True: 
     main() 
     game_over() 
  • 芯 - 运行在一个While循环
  • 主要功能运行游戏的主要功能和game_over()
  • 主呼叫事件功能
  • 事件函数根据条件/情况做出一些事情(或者,如果没有满足,则什么也不做) - >当玩家写'战斗'时,函数调用战斗循环
  • 相当一堆的功能都是在战斗中循环使用,但什么循环并最终被检查,如果玩家的HP大于0

我想要做的是,每当玩家的HP云0(甚至低于)时,main()函数将被打破,这样玩家可以被提示退出游戏或再次运行主函数。我希望这会发生不同于在每个函数后键入return和value。

game_over函数提示玩家输入“new”并再次启动main(),因为该函数根本不会做任何事情,或者“退出”,函数会调用quit()并退出游戏。

TL:DR - 我如何从一个较小的功能中突破功能?试图避免一系列的回报?

+0

不能*“打出来的函数“* - 'return'是唯一的方法。 – jonrsharpe

回答

2

你可以提出一个例外

def main(): 
    if condition: 
     raise StopIteration 
    else: 
     return value 


while True: 
    main() 

用于更复杂的逻辑,你可以引发自定义异常,把他们捉住:

class GameOver(Exception): 
    pass 

class Quit(Exception): 
    pass 

def main(): 
    if game_over: 
     raise GameOver 
    if quit: 
     raise Quit 
    else: 
     return value 


while True: 
    try: 
     main() 
    except GameOver: 
     game_over() 
    except Quit: 
     break 
+0

太棒了!它帮助和运作就像一个魅力!毕竟,一旦你知道Exceptions和raise classes是如何工作的,我想这并不难! 谢谢! – Smokesick

+0

你也可以像这样提高MyCustomException('message')'然后在除了你可以'除了MyCustomException as error:打印error.message'和更多https://docs.python.org/2/tutorial/errors html的 – Anentropic