[英]How to change a global variable in a function using parameters
我正在制作一個文本冒險游戲,我正在努力改變房間。 我的房間是由布爾人組成的,因此當我換房間時,我退出的房間變得虛假,新房間變為真實。 每個房間都包含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
但我不想這樣做,因為我希望函數有參數,所以該功能可以用於任何房間的任何房間。 如果有人幫我這個,那會很棒。 謝謝!
不情願的解決方案
我個人不同意你正在采取的路線,因為你正在修改全局空間而不是修改代表你的游戲世界的抽象數據結構,這是不好的。 您應該將此信息存儲在某個對象中,例如字典。 盡管如此,這是您尋求的解決方案......
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.