2016-11-11 135 views
1

我正在写一款游戏,并且已经将第1章到最后。它有大约10个模块+游戏引擎。我并不是在寻求一步一步的指导,但是如果你能告诉我在哪里寻找信息将会很棒!什么是组织游戏模块的最佳方式

  • CAN引擎代码访问我的模块莫名其妙的时候,如果我将它们放在不同的文件夹?(我想他们至少在不同的文件夹不同的章节排序)
  • 是有不同的,更好的方式做发动机代码?(比方说我会在比赛50章,这将是大约500模块,因此这将是大约1000多个引擎代码行只是导入,并呼吁他们,这是非常非常糟糕的风格)

这里是引擎代码:

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() 

类图(对象):

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() 

enter image description here

回答

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

相关问题