gpt4 book ai didi

python - 艰难地学习 Python 练习 43

转载 作者:太空宇宙 更新时间:2023-11-03 12:24:40 25 4
gpt4 key购买 nike

我不明白脚本如何获得下一个房间,以及“引擎”和“ 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)

我根本不明白这些部分是如何工作的。我知道类和对象实例和属性以及所有其他 OOP 东西是如何工作的,但由于某种原因我没有得到这部分代码。主要是Map类。如果有人能解释一下,那就太棒了。

此外(这可能需要阅读练习),为什么无论如何都需要有这两个类(class)?难道你不能只用类方法来做吗(即没有 self 作为参数的方法)?然后您可以调用 CentralCorridor.enter() 等。事实上,这就是我在阅读答案之前解决它的方法,结果很好。

抱歉,我的主要问题是 Engine 和 Map 类是如何工作的。其他是次要的。

提前致谢!

最佳答案

Map 对象是一个映射场景的类。它有一些场景保存在一个数组中。

scenes = {
'central_corridor': CentralCorridor(),
'laser_weapon_armory': LaserWeaponArmory(),
'the_bridge': TheBridge(),
'escape_pod': EscapePod(),
'death': Death()
}

当创建一个 Map 对象时,您还可以为它提供一个在构造函数中看到的开场场景

def __init__(self, start_scene):
self.start_scene = start_scene

这会在 Map 中创建一个名为 start_scene 的变量,其中包含您的开场场景。

此外 Map 有 2 个方法

# This one returns a scene based on its name or key in the scenes array
def next_scene(self, scene_name):
return Map.scenes.get(scene_name)


# And this one returns the opening scene which is set when you create the map.
def opening_scene(self):
return self.next_scene(self.start_scene)

引擎 似乎在控制场景何时播放以及播放什么。

# When creating an Engine object you give the map containing scenes to its constructor
def __init__(self, scene_map):
self.scene_map = scene_map

# The method which starts playing the scenes
def play(self):

# the opening scene from the map is selected as the current scene
current_scene = self.scene_map.opening_scene()

# You loop all the scenes probably, conditions of this loop are unknown because you haven't posted it entirely.
while True:
print "\n--------"
# It seems the next scene name is known in the current scene
next_scene_name = current_scene.enter()

# It replaces current scene with the next scene from the map
current_scene = self.scene_map.next_scene(next_scene_name)

why is it required to have these two classes anyway?

不是,除非根据你的任务需要它

正如您所说,没有它也可以做到,但是有充分的理由这样做。

通过这种方式,您可以创建 2 个具有各自职责的独立类。当应用程序变得越来越大时,这种方式的代码更具可读性。并且很容易在应用程序中导航。您可以轻松更改应用程序的某些部分等等。我的建议是继续练习和阅读有关 OOP 的内容,您会发现为什么您会做您看到的事情。

关于python - 艰难地学习 Python 练习 43,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17414219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com