def create(self, spriteName): ''' Metoda szablonowa, tworząca obiekt. Należy ją wywołać aby stworzyć obiekt objName : Pod jaką nazwą zarejestrować obiekt w fabryce obiektów spriteName : Jakiego sprite'a załadować ''' # # FIXME: # # opis metody sugeruje jeszcze argument objName. Coś go nie widać :-/ # self.spriteName = spriteName self.parser = SpriteScriptParser(self.spriteName) self.parser.parse() self.create_object() # implementacja w klasie pochodnej self.object.set_sprite_name(self.spriteName) self.spriteStrategy = SpriteScriptStrategy( self.parser.get_logic_part()) self.object.set_sprite_strategy(self.spriteStrategy) self.create_ai_strategy() # implementacja w klasie pochodnej self.object.set_ai_strategy(self.aiStrategy) self.spriteManager.load_sprite(self.spriteName, self.parser.get_sprite_part()) self.create_related_objects() return self.object
def create(self, spriteName): ''' Metoda szablonowa, tworząca obiekt. Należy ją wywołać aby stworzyć obiekt objName : Pod jaką nazwą zarejestrować obiekt w fabryce obiektów spriteName : Jakiego sprite'a załadować ''' # # FIXME: # # opis metody sugeruje jeszcze argument objName. Coś go nie widać :-/ # self.spriteName = spriteName self.parser = SpriteScriptParser( self.spriteName ) self.parser.parse() self.create_object() # implementacja w klasie pochodnej self.object.set_sprite_name( self.spriteName ) self.spriteStrategy = SpriteScriptStrategy( self.parser.get_logic_part() ) self.object.set_sprite_strategy( self.spriteStrategy ) self.create_ai_strategy() # implementacja w klasie pochodnej self.object.set_ai_strategy( self.aiStrategy ) self.spriteManager.load_sprite( self.spriteName, self.parser.get_sprite_part() ) self.create_related_objects() return self.object
class GameObjectCreator(object): ''' Enkapsulacja algorytmu tworzenia obiektu. Dla każdego istotnie różnego obiektu należy utworzyć jedną podklasę tej klasy, implementując konkretny algorytm tworzenia obiektu Tworzenie oznacza zwrócenie przez metodę create świeżo wypieczonego egzemplarza odpowiedniej klasy ''' def __init__(self, spriteManager): ''' objectFactory: Fabryka obiektów spriteManager: Zarządca sprite'ów ''' self.spriteManager = spriteManager # zarządca sprite'ów self.spriteName = None # nazwa ładowanego sprite'a self.parser = None # parser plików konfiguracyjnych self.spriteStrategy = None # strategia zarządzania spritem self.aiStrategy = None # strategia ai nowego obiektu self.object = None # wynik wypiekania obiektu def create(self, spriteName): ''' Metoda szablonowa, tworząca obiekt. Należy ją wywołać aby stworzyć obiekt objName : Pod jaką nazwą zarejestrować obiekt w fabryce obiektów spriteName : Jakiego sprite'a załadować ''' # # FIXME: # # opis metody sugeruje jeszcze argument objName. Coś go nie widać :-/ # self.spriteName = spriteName self.parser = SpriteScriptParser( self.spriteName ) self.parser.parse() self.create_object() # implementacja w klasie pochodnej self.object.set_sprite_name( self.spriteName ) self.spriteStrategy = SpriteScriptStrategy( self.parser.get_logic_part() ) self.object.set_sprite_strategy( self.spriteStrategy ) self.create_ai_strategy() # implementacja w klasie pochodnej self.object.set_ai_strategy( self.aiStrategy ) self.spriteManager.load_sprite( self.spriteName, self.parser.get_sprite_part() ) self.create_related_objects() return self.object # # Poniższe metody powinny być CHRONIONE. Należy je w ten sposób # traktować. Jedynym poprawnym ich zastosowaniem jest # dostarczenie ich implementacji w podklasach metoda create, która # jest publiczna, dba o prawidłowe ich wywoływanie # def create_object(self): abstract ''' Implementując tę metodę należy utworzyć obiekt self.object np. self.object = PlayerGameObject() ''' def create_ai_strategy(self): abstract ''' Implmeentując tę metodę należy utworzyć pole self.aiStrategy. Powinna to być strategia zachowania (AI), która ma być przypisana do obiektu. przykładowo: self.aiStrategy = HeliAIStrategy( self.object, self.spriteStrategy, self.gameWorld ) ''' def create_related_objects(self): ''' Tworzenie powiązanych obiektów. Np. helikopter powinien utworzyć rakiety i pociski, a jeep działko i pociski. Kaczucha może chcieć utworzyć części składowe itp. Ideą jest swtorzenie wszystkich obiektów potrzebnych do funkcjonowania obiektu głównego Jeżeli obiekt nie tworzy tego typu obiektów, to nie ma powodu, żeby dostarczał tę metodę. ''' pass
#!/usr/bin/python # -*- coding: utf-8 -*- import sys sys.path.append("../src") from spriteScriptParser import SpriteScriptParser parser = SpriteScriptParser("test_sprite") parser.parse() logic = parser.get_logic_part() sprite = parser.get_sprite_part() failed_count = 0 def test(value, correctValue, description): print description + ": ", if value == correctValue: print "OK" return 0 else: print "FAILED: should be", correctValue, "got", value return 1 failed_count += test(logic['leci'].duration, 100, "leci.duration") failed_count += test(logic['leci'].frames_count, 7, "leci.frames_count") failed_count += test(sprite['leci'].y_offset, 0, "leci.y_offset") failed_count += test(sprite['leci'].x_offset, 0, "leci.x_offset")
class GameObjectCreator(object): ''' Enkapsulacja algorytmu tworzenia obiektu. Dla każdego istotnie różnego obiektu należy utworzyć jedną podklasę tej klasy, implementując konkretny algorytm tworzenia obiektu Tworzenie oznacza zwrócenie przez metodę create świeżo wypieczonego egzemplarza odpowiedniej klasy ''' def __init__(self, spriteManager): ''' objectFactory: Fabryka obiektów spriteManager: Zarządca sprite'ów ''' self.spriteManager = spriteManager # zarządca sprite'ów self.spriteName = None # nazwa ładowanego sprite'a self.parser = None # parser plików konfiguracyjnych self.spriteStrategy = None # strategia zarządzania spritem self.aiStrategy = None # strategia ai nowego obiektu self.object = None # wynik wypiekania obiektu def create(self, spriteName): ''' Metoda szablonowa, tworząca obiekt. Należy ją wywołać aby stworzyć obiekt objName : Pod jaką nazwą zarejestrować obiekt w fabryce obiektów spriteName : Jakiego sprite'a załadować ''' # # FIXME: # # opis metody sugeruje jeszcze argument objName. Coś go nie widać :-/ # self.spriteName = spriteName self.parser = SpriteScriptParser(self.spriteName) self.parser.parse() self.create_object() # implementacja w klasie pochodnej self.object.set_sprite_name(self.spriteName) self.spriteStrategy = SpriteScriptStrategy( self.parser.get_logic_part()) self.object.set_sprite_strategy(self.spriteStrategy) self.create_ai_strategy() # implementacja w klasie pochodnej self.object.set_ai_strategy(self.aiStrategy) self.spriteManager.load_sprite(self.spriteName, self.parser.get_sprite_part()) self.create_related_objects() return self.object # # Poniższe metody powinny być CHRONIONE. Należy je w ten sposób # traktować. Jedynym poprawnym ich zastosowaniem jest # dostarczenie ich implementacji w podklasach metoda create, która # jest publiczna, dba o prawidłowe ich wywoływanie # def create_object(self): abstract ''' Implementując tę metodę należy utworzyć obiekt self.object np. self.object = PlayerGameObject() ''' def create_ai_strategy(self): abstract ''' Implmeentując tę metodę należy utworzyć pole self.aiStrategy. Powinna to być strategia zachowania (AI), która ma być przypisana do obiektu. przykładowo: self.aiStrategy = HeliAIStrategy( self.object, self.spriteStrategy, self.gameWorld ) ''' def create_related_objects(self): ''' Tworzenie powiązanych obiektów. Np. helikopter powinien utworzyć rakiety i pociski, a jeep działko i pociski. Kaczucha może chcieć utworzyć części składowe itp. Ideą jest swtorzenie wszystkich obiektów potrzebnych do funkcjonowania obiektu głównego Jeżeli obiekt nie tworzy tego typu obiektów, to nie ma powodu, żeby dostarczał tę metodę. ''' pass
#!/usr/bin/python # -*- coding: utf-8 -*- import sys sys.path.append("../src") from spriteScriptParser import SpriteScriptParser parser = SpriteScriptParser("test_sprite") parser.parse() logic = parser.get_logic_part() sprite = parser.get_sprite_part() failed_count = 0 def test(value, correctValue, description): print description + ": ", if value == correctValue: print "OK" return 0 else: print "FAILED: should be", correctValue, "got", value return 1 failed_count += test(logic['leci'].duration, 100, "leci.duration") failed_count += test(logic['leci'].frames_count, 7, "leci.frames_count") failed_count += test(sprite['leci'].y_offset, 0, "leci.y_offset") failed_count += test(sprite['leci'].x_offset, 0, "leci.x_offset") failed_count += test(sprite['leci'].frame_width, 130, "leci.frame_width") failed_count += test(sprite['leci'].frame_height, 90, "leci.frame_height")