3

Map クラスと Engine クラスが連携してこの Adventureland タイプのゲームを実行する方法について混乱しています (完全なコードはこちら: 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()

助けてくれてありがとう。

4

1 に答える 1

3

Engineインスタンスは、グローバルと同様に、クラスのscene_mapインスタンスです。実際、は と同じインスタンスです。Mapa_mapa_game.scene_mapa_map

a_mapしたがって、最上位でできることは何でも、Engine.playコードは で行うことができますself.scene_map。対話型インタープリターにa_map定義まですべてを入力し、a_map をいじって、それが何をしてくれるのかを正確に把握することをお勧めします。

では、なぜ がEngine必要なのself.scene_mapでしょうか? グローバルを使用できないのはなぜa_mapですか?

そうですね。_ 問題は、それを行った場合Engine、同じa_map. (これは、関数でグローバル変数を使用したくないのと同じ理由です。オブジェクトは新しい問題を追加しません。実際、オブジェクトの大きな部分は、グローバル変数の問題を解決することです。)

于 2013-08-13T01:18:26.487 に答える