# -*- 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 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 "init pygame..." 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 "start game loop here" 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))