# -*- coding: utf-8 -*- import gc import gtk import pygame import pygame.font import pygame.display import pygame.sprite from api.Sprite2 import CSprite from api.Mouse import CMouse from PartidasMan import getPartidasFromFile from PartidasMan import setPartidasToFile from gettext import gettext as _ import Image class CGame(object): mInstance = None mState = None mScreen = None mBackground = None mAllSprites = None mMousePointerSprite = None mMouse = None mGroups = None mMainSprites = None mClock = None mQuit = False mPartidaDict = {} 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 gc.collect() #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.mMouse.destroy() self.mBackground = None #self.mMousePointerSprite.destroy() self.mMousePointerSprite = None self.mInstance = None #save data setPartidasToFile(self.mPartidaDict) pygame.mouse.set_visible(True) # destroy pygame pygame.quit() print "destroy Game" def init(self): print "initing game..." pygame.init() #pygame.display.init() #pygame.font.init() #screen = pygame.display.set_mode((1200, 900), FULLSCREEN) self.mScreen = pygame.display.get_surface() if not(self.mScreen): 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)) # Sound system initialization. #pygame.mixer.init() #self.mAllSprites = pygame.sprite.Group() Sprites = [] self.mAllSprites = pygame.sprite.LayeredUpdates(Sprites) pygame.mouse.set_visible(False) self.mMouse = CMouse() self.mMousePointerSprite = CSprite() self.mMousePointerSprite.setImage(Image.loadImage('assets/images/cursor.png', True)) self.addChild(self.mMousePointerSprite, 5) self.mScreen.blit(self.mBackground, (0, 0)) self.mClock = pygame.time.Clock() self.mQuit = False self.mPartidaDict = getPartidasFromFile() self.mCurrentPartida = 1 def gameLoop(self): print "starting game.." while not self.mQuit: while gtk.events_pending(): gtk.main_iteration() for event in pygame.event.get(): if event.type == pygame.QUIT: self.mQuit = True elif event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: self.mQuit = True self.mMouse.update() self.mMousePointerSprite.setXY(self.mMouse.getX(), self.mMouse.getY()) #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() self.mClock.tick(30) #print ("FPS: %.0f" % self.mClock.get_fps()) # Add a sprite to the sprite list. def addChild(self, aSprite, aLayer=0): #if not(aSprite in self.mAllSprites): #self.mAllSprites.remove(self.mMousePointerSprite) self.mAllSprites.add(aSprite, layer=aLayer) #self.mAllSprites.move_to_front(self.mMousePointerSprite) #self.mAllSprites.add(self.mMousePointerSprite, layer=5) def removeChild(self, aSprite): #if (aSprite in self.mAllSprites): self.mAllSprites.remove(aSprite) def setCharacter(self, par, name): #print self.mPartidaDict.keys() self.mPartidaDict[par].setCharacter(name) #print 'Personaje ', name, ' asignado a partida ', par def getCharacter(self, par): return self.mPartidaDict[par].getCharacter() def getPartida(self, n): #print self.mPartidaDict.keys() if self.mPartidaDict.has_key(n): return self.mPartidaDict[n] else: return None def getCurrentPartida(self): return self.mCurrentPartida def setCurrentPartida(self, n): self.mCurrentPartida = n def setPartida(self, n, p): self.mPartidaDict[n] = p def setBackground(self, aBackgroundImage): self.mBackground = aBackgroundImage self.blitBackground(self.mBackground) def blitBackground(self, aBackgroundImage): self.mScreen.blit(aBackgroundImage, (0, 0))