2017-05-30 315 views
1

我正在製作文本冒險遊戲,並且正在嘗試改變房間的功能。我的房間由布爾人制成,因此當我換房時,我退出的房間變成虛假的,新房變成真實的。每個房間都包含if語句,因此某些事情將依賴於您所處的房間而運行。房間的布爾值在這樣的代碼頂部顯示。如何使用參數更改函數中的全局變量

spawn = True 
living_room = True 
etc... 

所以我決定做這樣的函數

def change_room(room, new_room): 
    room = False 
    new_room = True 

然後調用該函數以下列方式

if spawn: 
    if spawn_input == "door": 
     change_room(spawn, living_room) 
elif living_room: 
    do something 

的問題是,該功能不會改變全局變量到我選擇的布爾值。我明白,這可以通過改變功能這一

def change_room(): 
    global spawn 
    global living_room 
    spawn = False 
    living_room = True 

是固定的,但我不想這樣做,因爲我想的功能有參數,這樣的功能,可用於任何房間的任何房間。如果有人幫助我,這將會很棒。謝謝!

+0

你可以發佈你的整個代碼,以便我們知道你錯在哪裏。 – Keval

回答

0

勉強解決方案

我個人不和你正在服用,這是不好的,因爲要修改的全球空間而不是通過修改抽象數據結構,代表你的遊戲世界的路線一致。您應該將此信息存儲在某個對象中,例如字典。儘管如此,這裏是你所尋求的解決方案...

def change_room(room, new_room): 
    g = globals() 
    g[room] = False 
    g[new_room] = True 

... 

if spawn: 
    if spawn_input == "door": 
     change_room('spawn', 'living_room') 
elif living_room: 
    # do something 

合適的解決方案

封裝你的遊戲世界中Game對象和執行工作中所述的遊戲對象。

SPAWN_ROOM = 'spawn' 
LIVING_ROOM = 'living_room' 

class Game: 

    def __init__(self): 
    self.current_room = SPAWN_ROOM 

    def change_room(self, new_room): 
    self.current_room = new_room 
    print('You entered {}'.format(new_room)) 


game = Game() 

... 

if game.current_room == SPAWN_ROOM: 
    if user_input == 'door': 
    game.change_room(LIVING_ROOM) 

elif game.current_room == LIVING_ROOM: 
    # do something 
+0

嘿感謝評論!我只學了2周的Python,所以我很感激這個幫助。因爲我是初學者,如果你能給我一個你推薦我使用的更好方法的例子,我將不勝感激。 – Enrique

+0

你知道如何定義類嗎? – EyuelDK

+0

@EyueIDK我已經瞭解了一些關於類,但非常有限。應該大概瞭解下這 – Enrique