# -*- coding: utf-8 -*- import pygame #from pygame.locals import * import pygame.font import pygame.display import pygame.sprite from pygame.locals import * import api.SuperSprite from SuperSprite import CSuperSprite import api.Sprite from api.Sprite import CSprite import api.MultiLabel from api.MultiLabel import CMultiLabel import gc class CGame(object): mInstance = None mState = None mScreen = None mBackground = None mSampleSprite = None mSprites = None mGroups = None mMainSprites = None mClock = None mQuit = False def __new__(self, *args, **kargs): if (self.mInstance is None): self.mInstance = object.__new__(self, *args, **kargs) #self.setState(self.mInstance, aState) self.init(self.mInstance) #else: # print "Warning: CGame(): You are not allowed to instantiate it more than once." return self.mInstance def inst(self): return self.mInstance def setState(self, aState): if (self.mState != None): self.mState.destroy() self.mState = None print gc.collect(), " deleted objects" self.mState = aState self.mState.init() def destroy(self): if (self.mState != None): self.mState.destroy() self.mState = None self.mBackground = None self.mInstance = None print "destroy" def init(self): print "init pygame..." pygame.init() #pygame.font.init() #screen = pygame.display.set_mode((1200, 900), FULLSCREEN) self.mScreen = pygame.display.set_mode((1200, 900)) pygame.display.set_caption("Game") self.mBackground = pygame.Surface(self.mScreen.get_size()) self.mBackground.fill((255, 0, 0)) #self.mBackground = CImage.loadImage("assets/images/back_menu.png", False) #self.mSampleSprite = CSuperSprite(self) #self.mSampleSprite.setSpeed(3) #self.mSampleSprite.setAngle(0) #self.mSampleSprite.boundAction = self.mSampleSprite.WRAP #self.mAllSprites = pygame.sprite.Group() Sprites = [] self.mAllSprites = pygame.sprite.OrderedUpdates(Sprites) #self.mGroups = [] #self.mSprites = [self.mSampleSprite] #self.mMainSprites = pygame.sprite.OrderedUpdates(self.mSprites) #self.mGroups.append(self.mMainSprites) #self.mS2 = CSprite() #self.mS2.setDX(10) #self.mS2.velX = 30 #self.mS2.velY = 0 #self.mS2.accelY = 1 #self.mS2.maxSpeed = 200 self.mScreen.blit(self.mBackground, (0, 0)) self.mClock = pygame.time.Clock() self.mQuit = False #self.mAllSprites.add(self.mSampleSprite) #self.mAllSprites.add(self.mS2) def gameLoop(self): print "start game loop here" while not self.mQuit: self.mClock.tick(30) #print ("FPS: %.0f" % self.mClock.get_fps()) for event in pygame.event.get(): if event.type == pygame.QUIT: self.mQuit = True elif event.type == KEYDOWN: if event.key == K_ESCAPE: self.mQuit = True self.doEvents(event) #self.mState.preUpdate() self.mState.update() self.mAllSprites.clear(self.mScreen, self.mBackground) self.mAllSprites.update() self.mAllSprites.draw(self.mScreen) #for group in self.mAllSprites: # group.clear(self.mScreen, self.mBackground) # group.update() # group.draw(self.mScreen) #self.mState.postUpdate() pygame.display.flip() def doEvents(self, event): """ overwrite this method to add your own events. works like normal event handling, passes event object """ pass def setSprites(self, aSpritesArray): self.mSprites = aSpritesArray #self.mGroups = [] #self.mMainSprites = pygame.sprite.OrderedUpdates(self.mSprites) #self.mGroups.append(self.mMainSprites) # Add a sprite to the sprite list. def addChild(self, aSprite): self.mAllSprites.add(aSprite) def removeChild(self, aSprite): self.mAllSprites.remove(aSprite) def setBackground(self, aBackgroundImage): self.mBackground = None self.mBackground = aBackgroundImage self.mScreen.blit(self.mBackground, (0, 0))