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