1

私は現在、純粋な python でテキストベースの冒険をコーディングしようとしています。したがって、次のような(短縮された)Roomクラスがあります。

class Room1(Room):

    def __init__(self):

        Room.__init__(self)
        self.init_objects()
        self.description = """Looks like a living room. There's a lamp, a 
                              cupboard, and
                              a door to your right. On the floor, there's a carpet."""
        self.door_state = 1
        self.carpet_state = 0
        self.images = [(text-based images)]

    def init_objects(self):

        self.objects = {"door" : Door1(),
                        "frontdoor" : FrontDoor(),
                        "carpet" : Carpet(),
                        "lamp" : Lamp1(),
                        "clock" : Clock(),
                        "escritoire" : Escritoire(),
                        "booklet" : Booklet(),
                        "screws" : Screws(),
                        "trapdoor" : TrapDoor()}

    def update_image(self):

        IMG_MAPPER = {(0, 0, 0) : 0,
                      (0, 0, 1) : 1,
                      (1, 0, 0) : 2,
                      (1, 0, 1) : 3,
                      (1, 1, 1) : 4,
                      (1, 1, 0) : 5,
                      (0, 1, 1) : 6,
                      (0, 1, 0) : 7}
        key = (self.objects["door"].state, self.objects["carpet"].state)
        self.img = img_mapper[key]

私の問題は、Room の update_image() メソッドにあります。オブジェクトの状態 (開いている/閉じている) に応じて適切な画像を把握するために、そこにマッパーを格納する必要があります。メソッドの開始時にこのマッパーを配置すると、メソッドが実行されるたびに、Python によってこの dict が読み取られて構築されます。という、そうですか。では、このマッパー dict を self.img_mapper_dict = {(0, 0, 0) : 0, ...} のようなインスタンス変数として保存する必要がありますか?

その誰かについてのアイデアはありますか?

4

3 に答える 3

0

あなたが抱えていると思う問題は、呼び出されるたびimg_mapperに指定された状態にリセットされることです。これは、メンバー関数が独自のスコープを持っているためです。そのため、完了すると削除され、次に更新関数が呼び出されたときに再作成する必要があります。メンバー変数として保存すると、この問題が解消されます。 update_image()img_mapper

于 2015-05-29T23:51:38.700 に答える
0

最初の問題は、IMG_MAPPER dict に 3 つのタプル キーがあることです。しかし、2 つのタプルを提供することでアクセスしています。

于 2015-05-30T00:09:38.900 に答える