# -*- 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 _ class CGame(object): mInstance = None def __new__(cls, *args, **kargs): if (cls.mInstance is None): cls.mInstance = object.__new__(cls, *args, **kargs) cls.init(cls.mInstance) return cls.mInstance def inst(self): return self.mInstance def setState(self, aState): if (self.mState != None): self.mState.destroy() self.mState = None gc.collect() 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 = None self.mInstance = None self.mAllSprites = None setPartidasToFile(self.mPartidaDict) pygame.mouse.set_visible(True) pygame.quit() print "destroy game..." def init(self): print "initing game..." pygame.init() #pygame.display.init() #pygame.font.init() self.mState = None self.mScale = 1 self.mWidth = 1200 self.mHeight = 900 self.mScreen = pygame.display.get_surface() if not(self.mScreen): info = pygame.display.Info() width = info.current_w height = info.current_h if width/1200.0 < height/900.0: self.mScale = width/1200.0 self.mWidth = width self.mHeight = int(900 * self.mScale) else: self.mScale = height/900.0 self.mHeight = height self.mWidth = int(1200 * self.mScale) self.mScreen = pygame.display.set_mode((self.mWidth, self.mHeight), pygame.FULLSCREEN) pygame.display.set_caption(_('JES')) self.window = pygame.Surface((1200, 900), 0, self.mScreen) else: self.window = self.mScreen self.mBackground = pygame.Surface(self.window.get_size()) self.mBackground.fill((255, 0, 0)) # Sound system initialization. #pygame.mixer.init() #self.mAllSprites = pygame.sprite.Group() self.mAllSprites = pygame.sprite.LayeredUpdates() pygame.mouse.set_visible(False) self.mMouse = CMouse() self.mMouse.set_scale(self.mScale) self.mMousePointerSprite = CSprite() self.mMousePointerSprite.loadImage('assets/images/cursor.png') #insert mouse pointer at layer 5 self.addChild(self.mMousePointerSprite, 5) self.window.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.setPosTuple(self.mMouse.getPos()) self.mState.update() self.mAllSprites.clear(self.window, self.mBackground) self.mAllSprites.update() self.mAllSprites.draw(self.window) if not(self.mScale == 1): scaled = pygame.transform.scale(self.window, (self.mWidth, self.mHeight)) self.mScreen.blit(scaled, (0, 0)) pygame.display.flip() self.mClock.tick(30) #print ("FPS: %.0f" % self.mClock.get_fps()) 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): self.mAllSprites.remove(aSprite) def setCharacter(self, par, name): self.mPartidaDict[par].setCharacter(name) def getCharacter(self, par): return self.mPartidaDict[par].getCharacter() def getPartida(self, n): return self.mPartidaDict[n] def getCurrentPartida(self): return self.mCurrentPartida def setCurrentPartida(self, n): self.mCurrentPartida = n def setPartida(self, n, p): self.mPartidaDict[n] = p def setEndGameState(self, a, j, s): self.mPartidaDict[self.mCurrentPartida].setGame(a, j, s) def setBackground(self, aBackgroundImage): self.mBackground = aBackgroundImage self.window.blit(aBackgroundImage, (0, 0))