簡體   English   中英

如何使用參數更改函數中的全局變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM