Python- 基于文本的游戏没有调用正确的房间
Python- text based game not calling the correct room
我正在编写一个基于文本的游戏,我想 link 每个房间到另外四个房间 - 北、南、东和西。我现在从北方开始。用户应该可以输入 'walk north' 并且应该调用北房间。
我使用了三个文件 - 一个用于编写主要故事,一个用于调用故事中的相应房间,另一个用于导航以避免相互导入。
rooms.py:
import actions
class FirstRoom(object):
room_name = 'FIRST ROOM'
north = 'north_room'
def __init__(self):
pass
def start(self):
print self.room_name
while True:
next = raw_input('> ')
actions.walk(next, self.north)
actions.command(next)
class North(object):
room_name = "NORTH ROOM"
def __init__(self):
pass
def start(self):
print self.room_name
actions.py:
import navigation
def walk(next, go_north):
"""Tests for 'walk' command and calls the appropriate room"""
if next == 'walk north':
navigation.rooms(go_north)
else:
pass
navigation.py:
import rooms
first_room = rooms.FirstRoom()
north_room = rooms.North()
def rooms(room):
rooms = {
'first_room': first_room.start(),
'north_room': north_room.start(),
}
rooms[room]
当我 运行 first_room.start() 它应该打印 'FIRST ROOM' 它所做的。然后我输入 'walk north',我希望它打印 "NORTH ROOM",但它再次打印 "FIRST ROOM"。
我一辈子都弄不明白为什么它没有按我期望的方式工作,就好像它再次调用 first_room 而不是 north_room。谁能找出我做错了什么?
我猜是因为字典 rooms
的定义方式导致出现此问题。当你做 -
rooms = {
'first_room': first_room.start(),
'north_room': north_room.start(),
}
rooms[room]
函数在您定义字典本身时被调用,而不是在您访问字典中的值时(因此两个函数都被调用),您希望将函数对象(而不调用它们)存储为值然后调用它们作为 - rooms[room]()
。例子-
def rooms(room):
rooms = {
'first_room': first_room.start,
'north_room': north_room.start,
}
rooms[room]()
我正在编写一个基于文本的游戏,我想 link 每个房间到另外四个房间 - 北、南、东和西。我现在从北方开始。用户应该可以输入 'walk north' 并且应该调用北房间。
我使用了三个文件 - 一个用于编写主要故事,一个用于调用故事中的相应房间,另一个用于导航以避免相互导入。
rooms.py:
import actions
class FirstRoom(object):
room_name = 'FIRST ROOM'
north = 'north_room'
def __init__(self):
pass
def start(self):
print self.room_name
while True:
next = raw_input('> ')
actions.walk(next, self.north)
actions.command(next)
class North(object):
room_name = "NORTH ROOM"
def __init__(self):
pass
def start(self):
print self.room_name
actions.py:
import navigation
def walk(next, go_north):
"""Tests for 'walk' command and calls the appropriate room"""
if next == 'walk north':
navigation.rooms(go_north)
else:
pass
navigation.py:
import rooms
first_room = rooms.FirstRoom()
north_room = rooms.North()
def rooms(room):
rooms = {
'first_room': first_room.start(),
'north_room': north_room.start(),
}
rooms[room]
当我 运行 first_room.start() 它应该打印 'FIRST ROOM' 它所做的。然后我输入 'walk north',我希望它打印 "NORTH ROOM",但它再次打印 "FIRST ROOM"。
我一辈子都弄不明白为什么它没有按我期望的方式工作,就好像它再次调用 first_room 而不是 north_room。谁能找出我做错了什么?
我猜是因为字典 rooms
的定义方式导致出现此问题。当你做 -
rooms = {
'first_room': first_room.start(),
'north_room': north_room.start(),
}
rooms[room]
函数在您定义字典本身时被调用,而不是在您访问字典中的值时(因此两个函数都被调用),您希望将函数对象(而不调用它们)存储为值然后调用它们作为 - rooms[room]()
。例子-
def rooms(room):
rooms = {
'first_room': first_room.start,
'north_room': north_room.start,
}
rooms[room]()