2015-10-12 120 views
1

我正在研究基於文本的RPG。這非常簡單,但我仍然遇到一些問題,因爲我對Python相當陌生。我希望玩家能夠調用某個功能,然後在完成之後返回到之前的功能。如何在調用另一個函數後返回上一個函數?

def inventory(): 
    invent = {'a': 1, 'b':2} 
    print invent 

def room_function(): 
    input = raw_input("Type [i] for inventory!").lower() 
    if input == 'i': 
     inventory() 

如上圖所示,我希望玩家能夠從任何給定函數他們是在叫自己的庫存。他們所謂的功能後,我希望玩家能夠返回到它們的功能這個代碼示例非常非常簡單。這裏是我的代碼更復雜的例子:

inventory = {'Backpack': ['Water Bottle', 'Apple', 'Book'], 
    'Clothes': ["Business Casual Attire"], 
    'Weapon': ['None'] 
       } 

def equip(): 
    print inventory 
    equip_items ={'Clothes': "Business Casual Attire", 
     'Weapon': 'None'} 

    while equip: 
     print ' ' 
     equip_load = raw_input("Type the item name to equip.: ").lower() 
     if equip_load == 'hipster attire': 
      if 'Hipster Attire' in inventory['Clothes']: 
       print "Hipster Attire has been equiped!" 
       print "UPDATED EQUIPPED ITEMS" 
       print ' ' 
       for x in equip_items: 
        if x in equip_items: 
         inventory['Clothes'] = 'Hipster Attire' 
         print equip_items 
         continue 
      else: 
       print "You do not have this item! " 
       print "Your inventory list is: " 
       equip() 

def room(): 
    #Player does stuff here; allows them to access inventory equip new items. 

所以我的想法是把裝備項目機制的庫存系統相結合。要做到這一點,我需要玩家能夠調用他們的庫存功能,然後從那裏退出該功能並返回到他們所在的任何功能。我是否正確設置了它?或者我真的沒有在這裏,可以這麼說?我是否正確理解這些概念?謝謝您的幫助。

+4

您的函數可能需要一個'return'語句,然後將該函數分配給調用過程中的一個對象。也可能是一個瞭解使用類的好項目。很難說更具體的。這是一個相當廣泛的問題。如果你可以在你的實現中描述一個特定的問題,而不僅僅是「我想要做的是X ...」的列表,那麼這將有所幫助 –

+0

@DavidZemens在Python中,沒有'return'語句的函數(或退出沒有達到一個)默認返回'None'。 –

回答

2

當你調用函數時,函數完成執行後,它返回結果在它被調用的地方。 所以,我根本沒有看到任何問題 - 您要求的想法已經是默認行爲。 你遇到什麼問題實現?

而對於RPG機制,OOP會非常棒。

如果你是新來的Python,我強烈建議您在Coursera嘗試這些Python的課程:

+0

DEF裝備(): \t打印清單 \t equip_items = { '衣服': 「商業休閒裝」, \t \t \t '武器': '無'} \t \t \t \t \t打印 '' \t equip_load的raw_input =( 「輸入項目名稱裝備.:」).lower() \t如果equip_load == '時髦裝束': \t \t如果 '行家服飾' 庫存[ '衣服']: \t \t \t print「時髦裝束已裝備!」 \t \t \t打印 「已更新EQUIPPED ITEMS」 \t \t \t打印 '' \t \t \t對於x在equip_items: \t \t \t \t如果x在equip_items: \t \t \t \t \t庫存[ '衣服'] ='時髦服飾' \t \t \t \t \t print equip_items \t \t其他: \t \t \t打印「您沒有該項目! 「 \t \t \t print」Your inventory list is:「 – PyDive

0

我建議編寫的所有全局函數命令並調用它而不是raw_input函數。例如:

def get_command(player_data): 
    while True: 
     command = raw_input('What would you like to do?') 
     if command == 'equip': 
      equip(player_data) 
     elif command == 'inventory': 
      inventory(player_data) 
     ... 
     else 
      return command 

然後你可以在你的房間函數中調用它,而不是raw_input。如果玩家直接給出了由get_command函數處理的命令,它將執行該操作,然後重複,直到他們給出get_command不知道的東西。在那種情況下,房間將得到命令並且可以適當地處理它。

def room(player_data): 
    print "You're in a room" 
    command = get_command(player_data) 
    if command == 'leave': 
     print "Ok you're gone." 
    ... 
0

我建議您使用'控制器'功能作爲總線,根據收到的輸入調用函數。然後在控制器功能運行後,使用return語句,但不返回任何內容。這會將程序返回到調用控制器的函數。

0

正如DaneSoul指出的那樣,這是默認行爲。這是一個完整性的例子。

def function1(): 
    print 'in function 1' 

def function2(): 
    print 'in function 2' 
    function1() 
    print 'back in function 2' 

function2() 
# Output: 
#  in function 2 
#  in function 1 
#  back in function 2 
相關問題