逻辑整理
1.建立一个map类对象并赋予初始场景
a_map = Map('central_corridor')
2.建立Engine类对象并将map类对象作为参数传入
a_game = Engine(a_map)
3.要开始玩游戏了
a_game.play()
Engine类的play函数:
def play(self):
current_scene = self.scene_map.opening_scene() #当前场景类的实例化 相当于 current_scene = 当前场景类名()
last_scene = self.scene_map.next_scene('finished') #建立一个胜利结束场景类对象,准备好后下面进入关键的循环阶段
while current_scene != last_scene:
next_scene_name = current_scene.enter() #如果游戏还没胜利(结束),进入循环后就要先进行目前场景的游戏部分 .enter()运行,结束后返回的是下一个场景的key
current_scene = self.scene_map.next_scene(next_scene_name) #一个场景enter结束了要开始进入下一个场景了,下一场景类的实例化
#循环的过程中,.enter()如果进入的是Death场景,无返回值,游戏直接结束
current_scene.enter() #相当于last_scene.enter() #顺利结束循环,游戏胜利
opening_scene 和 next_scene函数功能很相近,opening_scene 函数返回的是map类实例化时传入的参数start_scene的value,next_scene函数返回的是传入该函数参数scene_name的value。opening函数在调用时,start_scene作为scene_name传入next函数中,好像有点晕,但想清楚了就ok