Exemple #1
0
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()
Exemple #2
0
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
Exemple #3
0
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()
Exemple #4
0
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