繁体   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