2017-05-30 313 views
1

我正在制作文本冒险游戏,并且正在尝试改变房间的功能。我的房间由布尔人制成,因此当我换房时,我退出的房间变成虚假的,新房变成真实的。每个房间都包含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

你可以发布你的整个代码,以便我们知道你错在哪里。 – Keval

回答

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 
+0

嘿感谢评论!我只学了2周的Python,所以我很感激这个帮助。因为我是初学者,如果你能给我一个你推荐我使用的更好方法的例子,我将不胜感激。 – Enrique

+0

你知道如何定义类吗? – EyuelDK

+0

@EyueIDK我已经了解了一些关于类,但非常有限。应该大概了解下这 – Enrique