2017-02-02 6 views
-2

私はこれが私ですLPHWのex43に基づいてゲームを作成するために開始し ています:パイソン - これまでのシンプル - - コードクラス

from sys import exit 


class Engine(): 

    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) 

class Death(): 

    def enter(self): 
     print "You are dead" 
     exit(1) 

class Castle(): 

    def enter(self): 
     print "Welcome in my Castle" 
     print "Choose between two paths: left or right" 

     choice = raw_input(">") 

     if choice == "left": 
      return 'death' 

     if choice == "right": 
      return 'garden' 

class Garden(): 

    def enter(self): 
     print "Welcome..." 
     exit(1) 

class Map(): 

    scenes = { 
    'castle': Castle(), 
    'garden': Garden(), 
    '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) 

a_map = Map('castle') 

a_game = Engine(a_map) 

a_game.play() 

私の質問 - なぜ私は current_sceneを交換することはできませんよ= current_scene = self.scene_map.next_scene(self.scene_map)

とself.scene_map.opening_scene()

'城' が法のnext_sceneによって発見されていないとopening_sceneによって発見された理由を私は理解していません。ループが実行されると、next_sceneは辞書から 'garden'と 'death'を検索します。

+0

で戻ってあなたcurrent_sceneとしてNone'を取得しているので。 – user2357112

+0

'self.scene_map'は' Map'ですが、 'Map.scene'が必要な理由が考えられます。 'current_scene = self.scene_map.next_scene(self.scene_map.start_scene)' –

+2

あなたのタイトルを変更して、あなたの特定の問題を実際に記述してください。 – csmckelvey

答えて

1

self.scene_mapMapのオブジェクトで、Map.next_scenestrのオブジェクトを想定しています。

Map.next_sceneは、与えられた引数の辞書を照会しますが、辞書には文字列であるキーしか含まれていません。 some_dict.get(nonexistent_key)利回りNone、あなたがあなたの未遂交換で行ったよりもnext_scene` `に異なる引数を渡すopening_scene` a_game

+0

アダムに感謝します。つまり、current_scene = self.scene_map.opening_scene()が動作する理由は? –

+0

@ AP_1984 'Map.opening_scene'は提案された変更のように' self.next_scene(self) 'ではなく' self.next_scene(self.start_scene) 'を返します。 –