我正在制作文字冒险游戏,我正在努力改变房间。我的房间是由布尔人组成的,因此当我换房间时,我退出的房间变得虚假,新房间变为真实。每个房间都包含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 :(得分: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