Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pygame
- class EngineObject:
- def __init__(self):
- self.children=[]
- self.running=False
- def prepare(self):pass
- def finalize(self):pass
- def pre_frame(self):pass
- def post_frame(self):pass
- def __iter__(self):
- print(type(self).__name__,"Beginning iteration.")
- if not self.running:
- self.prepare()
- self.running=True
- return self
- def __next__(self):
- self.pre_frame()
- for child in self.children[:]:
- try:
- next(child)
- except StopIteration:
- self.children.remove(child)
- self.post_frame()
- if not self.running:
- self.finalize()
- raise StopIteration
- class GameObject(EngineObject):
- def __init__(self, engine):
- EngineObject.__init__(self)
- self.engine = engine
- class Timer(EngineObject):
- def __init__(self,dur,repeat=False):
- self.duration, self.elapse = dur, 0
- self.repeat = repeat
- self.timer = pygame.time.Clock()
- def pre_frame(self):
- self.elapse += self.timer.tick()
- def post_frame(self):
- if self.elapse >= self.duration:
- self.elapse()
- if self.repeat:
- self.elapse = self.elapse % self.duration
- else:
- self.running = False
- def elapse(self):pass
- class Intro(GameObject):
- class FadeTimer(Timer):
- def __init__(self):Timer.__init__(self, 200, True)
- def prepare(self):self.color = 0
- def elapse(self):self.color = self.color + 1 % 256
- def prepare(self):
- #Load any images, fonts, etc.
- print("INTRO.PREPARE")
- self.timer = self.Timer()
- def pre_frame(self):
- self.engine.window.fill([self.timer.color]*3)
- class PKEngine(EngineObject):
- frame_rate = 30#30 fps should be good, no?
- resolution = (320, 240)
- def __init__(self):
- EngineObject.__init__(self)
- self.frame_limiter = pygame.time.Clock()
- def prepare(self):
- print("PKENGINE.PREPARE")
- pygame.display.init()
- self.window = pygame.display.set_mode(self.resolution)
- self.children.append(Intro(self))
- def finalize(self):
- pygame.quit()
- def post_frame(self):
- self.window.update()
- self.frame_limiter(self.frame_rate)
- if len(self.children)<1:
- self.running = False
- engine = PKEngine()
- for frame in engine:pass
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement