2015-10-20 72 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