我对地图和引擎类如何一起运行这个冒险世界类型的游戏感到困惑(完整代码在这里:http://learnpythonthehardway.org/book/ex43.html)。我想我理解 Map 类中发生的事情,但我真的很困惑 Engine() 中发生的事情以及为什么需要 scene_map 变量。
class Map(object):
scenes = {
'central_corridor': CentralCorridor(),
'laser_weapon_armory': LaserWeaponArmory(),
'the_bridge': TheBridge(),
'escape_pod': EscapePod(),
'death': Death()
}
def __init__(self, start_scene):
self.start_scene = start_scene
def next_scene(self, scene_name):
return Map.scenes.get(scene_name)
def opening_scene(self):
return self.next_scene(self.start_scene)
class Engine(object):
def __init__(self, scene_map):
self.scene_map = scene_map
def play(self):
current_scene = self.scene_map.opening_scene()
while True:
print "\n--------"
next_scene_name = current_scene.enter()
current_scene = self.scene_map.next_scene(next_scene_name)
a_map = Map('central_corridor')
a_game = Engine(a_map)
a_game.play()
感谢您的任何帮助。
The Engine
实例的scene_map
是一个实例Map
类,就像全局一样a_map
是。实际上,a_game.scene_map
is the same实例为a_map
.
所以,无论你能做什么a_map
在顶层,Engine.play
代码可以做self.scene_map
。可能值得将所有内容输入到交互式解释器中,直到a_map
定义并使用 a_map 以确保您知道它到底能为您做什么。
那么,为什么Engine
need self.scene_map
?为什么不能只使用全局a_map
?
嗯,它could。问题是,如果你这样做,你将无法创建两个Engine
他们没有为同一件事而争斗的情况a_map
。 (这与您不想在函数中使用全局变量的原因相同。对象不会增加新问题 - 事实上,对象的很大一部分内容是solving全局变量问题。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)