class Scene(object): image = None def __init__(self, _engine): super(Scene, self).__init__() if not Scene.image: Scene.image = loadImage('data/gfx/background.png') self._engine = _engine self._resx, self._resy = _engine.getResolution() self._background = pygame.transform.smoothscale(self.image, (self._resx, self._resy)) self.surface = self._background.copy() drawText(self.surface, "Poziom %d..." % self._engine.game['level'], 48, (255, 255, 255), (self._resx / 2, self._resy / 2)) self._engine.show(self.surface) self._hub = Hub(_engine) self.planets = pygame.sprite.Group() self.rocket = pygame.sprite.GroupSingle() self.stars = pygame.sprite.Group() self.canisters = pygame.sprite.Group() self._first = True def screenUpdated(self): self._resx, self._resy = self._engine.getResolution() self._background = pygame.transform.smoothscale(self.image, (self._resx, self._resy)) self.surface = pygame.transform.scale(self.surface, (self._resx, self._resy)) self._hub.screenUpdated() def show(self): if self._first: self.surface = self._background.copy() drawText(self.surface, "Poziom %d(0%%)..." % self._engine.game['level'], 48, (255, 255, 255), (self._resx / 2, self._resy / 2)) self._engine.show(self.surface) count = 0 planets = random.randint(1, min(self._engine.game['level'] * 2, 8)) stars = random.randint(self._engine.game['level'], self._engine.game['level'] * 5) canisters = random.randint(0, self._engine.game['level']) whole = (planets + stars + canisters + 1) * 0.01 try: for _ in xrange(planets): self.planets.add(Planet(random.randint(planet.MIN_MASS, planet.MAX_MASS), randomPlace([p for p in self.planets], 100, (self._resx, self._resy)))) count += 1 self.surface = self._background.copy() drawText(self.surface, "Poziom %d(%d%%)..." % (self._engine.game['level'], count / whole), 48, (255, 255, 255), (self._resx / 2, self._resy / 2)) self._engine.show(self.surface) except NoMore: pass try: for _ in xrange(stars): self.stars.add(Star(randomPlace([p for p in self.planets] + [s for s in self.stars], 16, (self._resx, self._resy)))) count += 1 self.surface = self._background.copy() drawText(self.surface, "Poziom %d(%d%%)..." % (self._engine.game['level'], count / whole), 48, (255, 255, 255), (self._resx / 2, self._resy / 2)) self._engine.show(self.surface) except NoMore: pass try: for _ in xrange(canisters): self.canisters.add(Canister(randomPlace([p for p in self.planets] + [s for s in self.stars] + [c for c in self.canisters], 16, (self._resx, self._resy)))) count += 1 self.surface = self._background.copy() drawText(self.surface, "Poziom %d(%d%%)..." % (self._engine.game['level'], count / whole), 48, (255, 255, 255), (self._resx / 2, self._resy / 2)) self._engine.show(self.surface) except NoMore: pass self.rocket.add(Rocket(self._engine, self, randomPlace([p for p in self.planets], 48, (self._resx, self._resy)))) count += 1 self.surface = self._background.copy() drawText(self.surface, "Poziom %d(%d%%)..." % (self._engine.game['level'], count / whole), 48, (255, 255, 255), (self._resx / 2, self._resy / 2)) self._engine.show(self.surface) self._first = False try: while self._engine.tick(): for event in pygame.event.get(): if event.type == QUIT: self._engine.quit() if event.type == KEYUP and event.key == K_ESCAPE: raise Pause() if event.type == KEYUP and event.key == K_q: if self._engine.game['godmode']: self._engine.game['godmode'] = False self._engine.game['godlevel'] = self._engine.game['level'] if self._engine.state & engine.STATE_END: self.surface.fill((0, 0, 0)) drawText(self.surface, "Gratulacje! Twoj wynik: %d!" % self._engine.game['score'], 50, (0, 140, 0), (self._resx / 2, self._resy / 2)) self._engine.show(self.surface) continue if len(self.stars) == 0: raise NextLevel() if self._engine.game['life'] <= 0 or not self._engine.game['fuel']: raise GameEnd() self.surface = self._background.copy() self.planets.update() self.stars.update() self.canisters.update() self.rocket.update() self._hub.update() self.planets.draw(self.surface) self.stars.draw(self.surface) self.canisters.draw(self.surface) self.rocket.draw(self.surface) self._hub.draw(self.surface) self._engine.show(self.surface) except Pause: self._engine.state ^= engine.STATE_GAME | engine.STATE_MENU except GameEnd: self._engine.state |= engine.STATE_END except NextLevel: self._engine.nextLevel()
class Scene(object): image = None def __init__(self, _engine): super(Scene, self).__init__() self._ais = [] self._engine = _engine self._resx, self._resy = _engine.getResolution() self.surface = pygame.Surface((self._resx, self._resy)) drawText(self.surface, "Wczytywanie mapy...", 48, (255, 255, 255), (self._resx / 2, self._resy / 2)) self._map = Map(_engine) self._hub = Hub(_engine, self._map) self._cursor = Cursor(_engine, self._map) self._ais.append(AI(_engine, self._map, _engine.players[0], 0)) self._ais.append(AI(_engine, self._map, _engine.players[1], 1)) def screenUpdated(self): self._resx, self._resy = self._engine.getResolution() self.surface = pygame.transform.smoothscale(self.surface, (self._resx, self._resy)) self._map.screenUpdated() self._hub.screenUpdated() self._cursor.screenUpdated() def show(self): try: while self._engine.tick(): for event in pygame.event.get(): if event.type == QUIT: self._engine.quit() elif event.type == KEYUP: if event.key == K_ESCAPE: raise Pause() elif event.key == K_TAB: for n, tank in enumerate( self._engine.players[0]['tanks']): if tank.focus: tank.setFocus(False) n = (n + 1) % len( self._engine.players[0]['tanks']) self._engine.players[0]['tanks'][ n].setFocus(True) break if self._engine.state & engine.STATE_FAIL: self.surface.fill((0, 0, 0)) drawText(self.surface, "Game Over", 50, (140, 0, 0), (self._resx / 2, self._resy / 2)) self._engine.show(self.surface) continue if self._engine.state & engine.STATE_WIN: self.surface.fill((0, 0, 0)) drawText(self.surface, "Gratulacje!", 50, (0, 140, 0), (self._resx / 2, self._resy / 2)) self._engine.show(self.surface) continue if self._engine.timeLeft() == (0, 0): if self._engine.players[0]['score'] > self._engine.players[ 1]['score']: raise GameWin() raise GameOver() if not len(self._engine.players[0]['tanks']): raise GameOver() if not len(self._engine.players[1]['tanks']): raise GameWin() for tank in self._engine.players[0]['tanks']: if tank.focus: break else: self._engine.players[0]['tanks'][0].setFocus(True) keys = pygame.key.get_pressed() if keys[K_LEFT]: self._map.move(map.DIRECTION_LEFT) if keys[K_RIGHT]: self._map.move(map.DIRECTION_RIGHT) if keys[K_UP]: self._map.move(map.DIRECTION_UP) if keys[K_DOWN]: self._map.move(map.DIRECTION_DOWN) for ai in self._ais: ai.update() self._map.update() self._hub.update() self._cursor.update() self._map.draw(self.surface) self._hub.draw(self.surface) self._cursor.draw(self.surface) self._engine.show(self.surface) except Pause: self._engine.state ^= engine.STATE_GAME | engine.STATE_MENU except GameOver: self._engine.state |= engine.STATE_FAIL except GameWin: self._engine.state |= engine.STATE_WIN
class Scene(object): image = None def __init__(self, _engine): super(Scene, self).__init__() if not Scene.image: Scene.image = loadImage('data/gfx/background.png') self._engine = _engine self._resx, self._resy = _engine.getResolution() self._background = pygame.transform.smoothscale( self.image, (self._resx, self._resy)) self.surface = self._background.copy() drawText(self.surface, "Poziom %d..." % self._engine.game['level'], 48, (255, 255, 255), (self._resx / 2, self._resy / 2)) self._engine.show(self.surface) self._hub = Hub(_engine) self.planets = pygame.sprite.Group() self.rocket = pygame.sprite.GroupSingle() self.stars = pygame.sprite.Group() self.canisters = pygame.sprite.Group() self._first = True def screenUpdated(self): self._resx, self._resy = self._engine.getResolution() self._background = pygame.transform.smoothscale( self.image, (self._resx, self._resy)) self.surface = pygame.transform.scale(self.surface, (self._resx, self._resy)) self._hub.screenUpdated() def show(self): if self._first: self.surface = self._background.copy() drawText(self.surface, "Poziom %d(0%%)..." % self._engine.game['level'], 48, (255, 255, 255), (self._resx / 2, self._resy / 2)) self._engine.show(self.surface) count = 0 planets = random.randint(1, min(self._engine.game['level'] * 2, 8)) stars = random.randint(self._engine.game['level'], self._engine.game['level'] * 5) canisters = random.randint(0, self._engine.game['level']) whole = (planets + stars + canisters + 1) * 0.01 try: for _ in xrange(planets): self.planets.add( Planet( random.randint(planet.MIN_MASS, planet.MAX_MASS), randomPlace([p for p in self.planets], 100, (self._resx, self._resy)))) count += 1 self.surface = self._background.copy() drawText( self.surface, "Poziom %d(%d%%)..." % (self._engine.game['level'], count / whole), 48, (255, 255, 255), (self._resx / 2, self._resy / 2)) self._engine.show(self.surface) except NoMore: pass try: for _ in xrange(stars): self.stars.add( Star( randomPlace([p for p in self.planets] + [s for s in self.stars], 16, (self._resx, self._resy)))) count += 1 self.surface = self._background.copy() drawText( self.surface, "Poziom %d(%d%%)..." % (self._engine.game['level'], count / whole), 48, (255, 255, 255), (self._resx / 2, self._resy / 2)) self._engine.show(self.surface) except NoMore: pass try: for _ in xrange(canisters): self.canisters.add( Canister( randomPlace([p for p in self.planets] + [s for s in self.stars] + [c for c in self.canisters], 16, (self._resx, self._resy)))) count += 1 self.surface = self._background.copy() drawText( self.surface, "Poziom %d(%d%%)..." % (self._engine.game['level'], count / whole), 48, (255, 255, 255), (self._resx / 2, self._resy / 2)) self._engine.show(self.surface) except NoMore: pass self.rocket.add( Rocket( self._engine, self, randomPlace([p for p in self.planets], 48, (self._resx, self._resy)))) count += 1 self.surface = self._background.copy() drawText( self.surface, "Poziom %d(%d%%)..." % (self._engine.game['level'], count / whole), 48, (255, 255, 255), (self._resx / 2, self._resy / 2)) self._engine.show(self.surface) self._first = False try: while self._engine.tick(): for event in pygame.event.get(): if event.type == QUIT: self._engine.quit() if event.type == KEYUP and event.key == K_ESCAPE: raise Pause() if event.type == KEYUP and event.key == K_q: if self._engine.game['godmode']: self._engine.game['godmode'] = False self._engine.game['godlevel'] = self._engine.game[ 'level'] if self._engine.state & engine.STATE_END: self.surface.fill((0, 0, 0)) drawText( self.surface, "Gratulacje! Twoj wynik: %d!" % self._engine.game['score'], 50, (0, 140, 0), (self._resx / 2, self._resy / 2)) self._engine.show(self.surface) continue if len(self.stars) == 0: raise NextLevel() if self._engine.game['life'] <= 0 or not self._engine.game[ 'fuel']: raise GameEnd() self.surface = self._background.copy() self.planets.update() self.stars.update() self.canisters.update() self.rocket.update() self._hub.update() self.planets.draw(self.surface) self.stars.draw(self.surface) self.canisters.draw(self.surface) self.rocket.draw(self.surface) self._hub.draw(self.surface) self._engine.show(self.surface) except Pause: self._engine.state ^= engine.STATE_GAME | engine.STATE_MENU except GameEnd: self._engine.state |= engine.STATE_END except NextLevel: self._engine.nextLevel()
class Scene(object): image = None def __init__(self, _engine): super(Scene, self).__init__() self._ais = [] self._engine = _engine self._resx, self._resy = _engine.getResolution() self.surface = pygame.Surface((self._resx, self._resy)) drawText(self.surface, "Wczytywanie mapy...", 48, (255, 255, 255), (self._resx / 2, self._resy / 2)) self._map = Map(_engine) self._hub = Hub(_engine, self._map) self._cursor = Cursor(_engine, self._map) self._ais.append(AI(_engine, self._map, _engine.players[0], 0)) self._ais.append(AI(_engine, self._map, _engine.players[1], 1)) def screenUpdated(self): self._resx, self._resy = self._engine.getResolution() self.surface = pygame.transform.smoothscale(self.surface, (self._resx, self._resy)) self._map.screenUpdated() self._hub.screenUpdated() self._cursor.screenUpdated() def show(self): try: while self._engine.tick(): for event in pygame.event.get(): if event.type == QUIT: self._engine.quit() elif event.type == KEYUP: if event.key == K_ESCAPE: raise Pause() elif event.key == K_TAB: for n, tank in enumerate(self._engine.players[0]['tanks']): if tank.focus: tank.setFocus(False) n = (n + 1) % len(self._engine.players[0]['tanks']) self._engine.players[0]['tanks'][n].setFocus(True) break if self._engine.state & engine.STATE_FAIL: self.surface.fill((0, 0, 0)) drawText(self.surface, "Game Over", 50, (140, 0, 0), (self._resx / 2, self._resy / 2)) self._engine.show(self.surface) continue if self._engine.state & engine.STATE_WIN: self.surface.fill((0, 0, 0)) drawText(self.surface, "Gratulacje!", 50, (0, 140, 0), (self._resx / 2, self._resy / 2)) self._engine.show(self.surface) continue if self._engine.timeLeft() == (0, 0): if self._engine.players[0]['score'] > self._engine.players[1]['score']: raise GameWin() raise GameOver() if not len(self._engine.players[0]['tanks']): raise GameOver() if not len(self._engine.players[1]['tanks']): raise GameWin() for tank in self._engine.players[0]['tanks']: if tank.focus: break else: self._engine.players[0]['tanks'][0].setFocus(True) keys = pygame.key.get_pressed() if keys[K_LEFT]: self._map.move(map.DIRECTION_LEFT) if keys[K_RIGHT]: self._map.move(map.DIRECTION_RIGHT) if keys[K_UP]: self._map.move(map.DIRECTION_UP) if keys[K_DOWN]: self._map.move(map.DIRECTION_DOWN) for ai in self._ais: ai.update() self._map.update() self._hub.update() self._cursor.update() self._map.draw(self.surface) self._hub.draw(self.surface) self._cursor.draw(self.surface) self._engine.show(self.surface) except Pause: self._engine.state ^= engine.STATE_GAME | engine.STATE_MENU except GameOver: self._engine.state |= engine.STATE_FAIL except GameWin: self._engine.state |= engine.STATE_WIN