2017-02-02 1 views
-2

Ich beginne Spiel auf der Basis von LPHW ex43 zu schaffen und das ist meine - so weit einfach - Code:Python - Klassen

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

Meine Frage - warum bin ich nicht in der Lage current_scene ersetzen = self.scene_map.opening_scene()

mit current_scene = self.scene_map.next_scene (self.scene_map)

ich verstehe nicht, warum 'Schloss' nicht durch die Methode next_scene gefunden und wird von opening_scene gefunden. Sobald die Schleife ausgeführt wurde, wird next_scene 'Garten' und 'Tod' aus dem Wörterbuch zurückholen. Vielen Dank im Voraus

+0

'Erhalte opening_scene' zu ​​'next_scene' ein anderes Argument übergibt, als Sie in Ihrem versuchten Ersatz tat. – user2357112

+0

Ich denke, der Grund könnte sein, dass 'self.scene_map' eine' Map' ist, aber Sie wollen 'Map.scene' z. 'current_scene = self.scene_map.next_scene (self.scene_map.start_scene)' –

+2

Ändern Sie Ihren Titel, um Ihr spezifisches Problem zu beschreiben. – csmckelvey

Antwort

1

self.scene_map ist ein Objekt vom Typ Map, während Map.next_scene ein Objekt vom Typ str erwartet.

Map.next_scene fragt ein Wörterbuch nach dem angegebenen Argument ab, aber das Wörterbuch enthält nur Schlüssel, die Strings sind. some_dict.get(nonexistent_key) ergibt None, so dass Sie None zurück, wie Ihr current_scene in a_game

+0

Danke Adam. Warum funktioniert current_scene = self.scene_map.opening_scene()? –

+0

@ AP_1984 weil 'Map.opening_scene' 'self.next_scene (self.start_scene) 'zurückgibt, nicht' self.next_scene (self) 'wie Ihre vorgeschlagene Änderung. –