如何使用参数

时间:2017-05-30 04:34:29

标签: python python-2.7

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

但我不想这样做,因为我希望函数有参数,所以该功能可以用于任何房间的任何房间。如果有人帮我这个,那会很棒。谢谢!

1 个答案:

答案 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