我正在写一个游戏,已经把第一章打到了最后。它有大约10个模块+游戏引擎。我不是要求一步一步的指南,但如果你能告诉我在哪里寻找信息会很棒!
这是引擎代码:
from sys import exit
from random import randint
import module_intro
import module_house_one
import module_package_zoom
import module_house_two
import module_unboxing
import module_key_letter
import module_letter_key
import module_house_three
import module_end_game
类引擎(对象):
def __init__(self, scene_map):
self.scene_map = scene_map
def play(self):
current_scene = self.scene_map.opening_scene()
last_scene = self.scene_map.next_scene('finished')
while current_scene != last_scene:
next_scene_name = current_scene.enter()
current_scene = self.scene_map.next_scene(next_scene_name)
current_scene.enter()
类Map(对象):
scenes = {
'intro': module_intro.Intro(),
'house_one': module_house_one.HouseOne(),
'package_zoom': module_package_zoom.PackageZoom(),
'house_two': module_house_two.HouseTwo(),
'unboxing': module_unboxing.Unboxing(),
'key_letter': module_key_letter.KeyLetter(),
'letter_key': module_letter_key.LetterKey(),
'house_three': module_house_three.HouseThree(),
'end_game': module_end_game.EndGame()
}
def __init__(self, start_scene):
self.start_scene = start_scene
def next_scene(self, scene_name):
val = Map.scenes.get(scene_name)
return val
def opening_scene(self):
return self.next_scene(self.start_scene)
a_map = Map('intro')
a_game = Engine(a_map)
a_game.play()
答案 0 :(得分:0)
例如,您可以使用此目录结构或类似内容将每个章节放入单独的文件夹中:
├── game
│ ├── chapter_one
│ │ ├── __init__.py
│ │ └── main.py
│ ├── chapter_two
│ │ ├── __init__.py
│ │ └── main.py
│ ├── engine.py
│ └── __init__.py
└── main.py
根文件夹中的main.py
将加载所有章节并开始游戏,它可以这样看:
import game.chapter_one.main
import game.chapter_two.main
from game.engine import Engine, SceneMap
print("Starting the engine...")
a_map = SceneMap()
a_game = Engine(a_map)
a_game.play()
Scene
对象可以在SceneMap
内自动注册,因此您不必手动执行此操作,例如game.chapter_one.main.py
:
from ..engine import SceneMap
class Scene(object):
def enter(self):
print('Enter chapter 1')
SceneMap.register('intro', Scene)
和game.chapter_two.main.py
:
from ..engine import SceneMap
class Scene(object):
def enter(self):
print('Enter chapter 2')
SceneMap.register('chapter 2', Scene)
SceneMap
可能如下所示:
class SceneMap(object):
scenes = OrderedDict()
@classmethod
def register(cls, name, map_fn):
cls.scenes[name] = map_fn
你的逻辑的其余部分可以与你现在拥有的相似(每个场景返回下一个要播放的场景)。
或者,您可以进一步简化它,并依赖main.py
中的章节导入顺序。
因此,如果您在main.py
中交换chapter_one / chapter_two的导入,它们将按向后顺序播放。
请参阅此方法的完整示例here。