Beispiel #1
0
 def die(self):
     snd.load_sound("explode.wav")
     self.image = gfx.img_explosion_final
     self.image = pg.transform.scale(self.image, (300, 300))
     s = gfx.screen.blit(self.image, (self.rect.x - 50, self.rect.y - 120))
     pg.display.update(s)
     self.kill()
Beispiel #2
0
 def die(self):
     self.last_x = self.rect.x
     self.last_y = self.rect.y
     load_sound("explode.wav")
     gfx.explosion(self.last_x, self.last_y)
     self.power_level = 1
     self.dead = True
Beispiel #3
0
 def shoot(self, target):
     for bullet in range(self.BULLETS_MAX):
         new_bullet = Bullet(self.rect.centerx, self.rect.bottom, gfx.img_enemy_shot_a)
         new_bullet.dx = 5 * cos(helper_functions.calc_angle(self, target))
         new_bullet.dy = 5 * sin(helper_functions.calc_angle(self, target))
         self.allBullets.add(new_bullet)
         snd.load_sound("enemy_shoot.wav")
     self.has_shot = True
Beispiel #4
0
    def end_message(self):
        pg.mixer.music.stop()
        snd.load_sound("music/winning.ogg")

        message = self.font.render("Thanks for playing!", True, WHITE)
        self.screen.blit(message, SCREEN_CENTER)

        pg.display.flip()
        pg.time.wait(5000)
Beispiel #5
0
 def die(self):
     for i in range(9):
         pg.display.update(
                 gfx.explosion(self.center[0] + randrange(-100, 100, 20), self.center[1] + randrange(-100, 100, 20)))
         snd.load_sound("explode.wav")
     self.image = pg.transform.scale2x(gfx.load_image("explosion_last.png"))
     snd.load_sound("blow_up.wav")
     pg.display.update()
     snd.play_song("saturns_folly.ogg")
     self.kill()
Beispiel #6
0
    def fire_beam(self):

        beam = Bullet(self.rect.centerx, self.rect.bottom - 60, gfx.img_beam)
        beam.dy = 8
        self.allBullets.add(beam)
        snd.load_sound("firing_beam.wav")
        s = gfx.screen.blit(gfx.img_beam_arc,
                            (self.rect.centerx - (gfx.img_beam_arc.get_width() / 2), self.rect.bottom - 100))
        pg.display.update(s)
        self.has_shot = True
Beispiel #7
0
 def game_over(self):
     pg.mixer.music.stop()
     snd.load_sound("music/death.ogg")
     self.screen.fill((255, 255, 255))
     for i in range(255):
         self.screen.fill((255 - i, 255 - i, 255 - i))
         pg.display.update()
     import glob
     for image in sorted(glob.glob(path.join("graphics/GAMEOVER", "*.png"))):
         self.screen.fill(BLACK)
         part = pg.image.load(image).convert()
         self.screen.blit(part, (SCREEN_CENTER[0] - 250, SCREEN_CENTER[1]))
         pg.display.update()
     pg.time.wait(2000)
Beispiel #8
0
    def shoot(self):
        if not self.dead and not self.arrive:
            self.shooting = True
            if self.power_level == 1 and (pg.time.get_ticks() > self.cool_down + 100):
                self.cool_down = pg.time.get_ticks()
                load_sound("pewpew.wav")
                new_bullet1 = main.Bullet(self.rect.centerx - 5, self.rect.bottom - self.size[1],
                                          gfx.img_bullet)
                new_bullet2 = main.Bullet(self.rect.centerx + 5, self.rect.bottom - self.size[1],
                                          gfx.img_bullet)
                new_bullet1.dy = -15
                new_bullet2.dy = -15
                self.allBullets.add(new_bullet1, new_bullet2)
            elif self.power_level == 2 and (pg.time.get_ticks() > self.cool_down + 20):
                self.t += 1
                self.cool_down = pg.time.get_ticks()
                new_bullet1 = main.Bullet(self.rect.centerx - 10, self.rect.bottom - self.size[1],
                                          gfx.img_bullet_2)
                new_bullet2 = main.Bullet(self.rect.centerx + 10, self.rect.bottom - self.size[1],
                                          gfx.img_bullet_2)
                new_bullet3 = main.Bullet(self.rect.centerx - 25, self.rect.bottom - self.size[1],
                                          gfx.img_bullet_2)
                new_bullet4 = main.Bullet(self.rect.centerx + 25, self.rect.bottom - self.size[1],
                                          gfx.img_bullet_2)

                new_bullet1.dy = -10
                new_bullet2.dy = -10
                new_bullet3.dy = -10
                new_bullet4.dy = -10

                if self.t == 2:
                    self.allBullets.add(new_bullet1)
                    self.allBullets.add(new_bullet2)
                    load_sound("pewpew2.wav")
                if self.t == 4:
                    self.allBullets.add(new_bullet3)
                    self.allBullets.add(new_bullet4)
                    load_sound("pewpew2.wav")
                if self.t > 5:
                    self.t = 0
            elif self.power_level >= 3 and (pg.time.get_ticks() > self.cool_down + 50):
                self.t += 1
                self.cool_down = pg.time.get_ticks()

                new_bullet = main.Bullet(self.rect.centerx - 60, self.rect.y, gfx.img_bullet_3)
                new_bullet.dy = -20
                new_bullet.image = pg.transform.scale(new_bullet.image, (150, 100))

                if self.t >= 4:
                    self.allBullets.add(new_bullet)
                    load_sound("pewpew3.wav")
                    self.t = 0
Beispiel #9
0
 def on_pickup(self):
     snd.load_sound("powerup.wav")
     self.kill()
Beispiel #10
0
    def title_screen(self):
        scroll = 0
        anim = 0
        ship_image = None

        while True:
            title_a = gfx.img_title_a
            title_b = gfx.img_title_b
            title_size = title_a.get_size()
            steps = int(title_size[0] / 2)
            for i in range(steps + 75):
                self.screen.blit(gfx.img_title_background, (0, 0))
                self.screen.blit(gfx.img_title_stars, (0, 100))
                self.screen.blit(title_a, (10 - title_size[0] + i * 2, 300))
                self.screen.blit(title_b, (10 + SCREEN_WIDTH - i * 2, 300))
                pg.display.flip()
            snd.load_sound("blow_up.wav")
            for i in range(100):
                pg.display.update(self.screen.fill(WHITE))
            self.screen.blit(gfx.img_title_background, (0, 0))
            snd.play_song("title_song.ogg")
            break

        while True:

            if scroll <= SCREEN_WIDTH:
                scroll += .5
            else:
                scroll = 0

            self.screen.blit(gfx.img_title_stars, (scroll, 100))
            self.screen.blit(gfx.img_title_stars, (-SCREEN_WIDTH + scroll, 100))
            self.screen.blit(gfx.img_title_whole, (SCREEN_CENTER[0] - gfx.img_title_whole.get_width() / 2 + 20, 300))

            for _ in range(1):
                if anim < 20:
                    ship_image = gfx.title_ship_a
                elif anim > 20:
                    ship_image = gfx.title_ship_b
                self.screen.blit(ship_image, (SCREEN_CENTER[0] - (gfx.title_ship_a.get_width() / 2) + 20, 600))

                if anim < 50:
                    menu = self.font.render("PRESS ENTER", True, WHITE)
                    self.screen.blit(menu, (SCREEN_CENTER[0] - menu.get_width() / 2, SCREEN_CENTER[1]))
                elif anim > 50:
                    menu = self.font.render("PRESS ENTER", True, BLACK)
                    self.screen.blit(menu, (SCREEN_CENTER[0] - menu.get_width() / 2, SCREEN_CENTER[1]))

            anim += 1
            if anim >= 100:
                anim = 0

            pg.display.update()

            e = pg.event.poll()
            if e.type == pg.KEYDOWN:
                if e.key == pg.K_RETURN:
                    snd.load_sound("takeoff.wav")
                    while True:
                        for i in range(255):
                            self.screen.fill((255 - i, 255 - i, 255 - i))
                            helper_functions.scanlines()
                            pg.display.update()
                        break
                    break

        while True:
            text = self.font.render("GET READY", True, WHITE)
            count_list = ["5", "4", "3", "2", "1", "GO!"]
            for i in range(6):
                countdown = self.font.render(count_list[i], True, WHITE)
                self.screen.fill(BLACK)
                self.screen.blit(text, (SCREEN_CENTER[0] - text.get_width() / 2, SCREEN_CENTER[1]))
                self.screen.blit(countdown, (SCREEN_CENTER[0] - countdown.get_width() / 2, SCREEN_CENTER[1] + 30))
                helper_functions.scanlines()
                pg.display.update()
                pg.time.wait(1000)
            break

        snd.play_song("saturns_folly.ogg")
        self.started = True
Beispiel #11
0
    def update_loop(self):
        # self.gametime = round(time() - self.start_time)
        self.ticker += 1
        if self.ticker == self.FPS:
            self.gametime += 1
            self.ticker = 0

        self.all_sprites.add(self.player_bullets)
        self.all_sprites.add(self.enemy_bullets)
        self.all_sprites.add(self.player)
        self.all_sprites.add(self.enemies)
        self.all_sprites.add(self.powerups)

        if self.player_lives <= 0:
            self._is_running = False

        if self._is_running and self.gametime > 10:
            if not self.boss_defeated and not self.player.dead:
                if len(self.cruiser) < 1 and self.KILL_COUNT >= 99:
                    snd.play_song("deadly_opposition.ogg")
                    big_enemy = EnemyCruiser()
                    self.cruiser.add(big_enemy)
                    self.enemies.add(self.cruiser)

                if len(self.fighters) < self.MAX_ENEMIES:
                    if len(self.cruiser) == 0:
                        self.spawn_timer += 1
                        if self.spawn_timer >= 20:
                            little_enemy = EnemyFighter()
                            self.fighters.add(little_enemy)
                            self.enemies.add(self.fighters)
                            self.spawn_timer = 0

                        if len(self.frigates) < 1:
                            frigate = EnemyFrigate()
                            frigate.rect.y = choice([50, 100, 150, 200, 250, 300])
                            frigate.rect.right = 0
                            self.frigates.add(frigate)
                            self.enemies.add(self.frigates)

            if self.ENEMIES_KILLED > 25:
                self.MAX_ENEMIES += 1
                self.ENEMIES_KILLED = 0

            for fighter in self.fighters:
                if not self.player.dead or self.player.arrive or self.player.respawn or self.player.invulnerable:
                    if not fighter.has_shot:
                        if abs(self.player.rect.y - fighter.rect.bottom <= 300) and abs(
                                                self.player.rect.centerx - fighter.rect.centerx <= 500) and fighter.rect.y <= 900:
                            fighter.shoot(self.player)
                            self.enemy_bullets.add(fighter.allBullets)

            for frigate in self.frigates:
                if frigate.rect.left >= SCREEN_WIDTH:
                    frigate.kill()
                if frigate.rect.centerx == self.player.rect.centerx:
                    frigate.shoot()
                self.enemy_bullets.add(frigate.allBullets)

            for cruiser in self.cruiser:
                print(cruiser.HEALTH)
                if cruiser.HEALTH < 1:
                    print("DEAD")
                    self.boss_defeated = True
                    cruiser.die()
                if self.player.dead:
                    cruiser.allBullets.empty()
                # if cruiser.rect.bottom <= self.player.rect.bottom:
                #     new_bullet = Bullet(cruiser.rect.centerx, cruiser.rect.y, gfx.img_enemy_shot_a)
                #     if self.player.rect.centerx < cruiser.rect.centerx:
                #         new_bullet.dx = -10
                #         cruiser.allBullets.add(new_bullet)
                #     elif self.player.rect.centerx > cruiser.rect.centerx:
                #         new_bullet.dx = 10
                #         cruiser.allBullets.add(new_bullet)
                self.enemy_bullets.add(cruiser.allBullets)

            if not self.player.invulnerable:
                for enemy in self.enemies:
                    if pg.sprite.collide_mask(self.player, enemy):
                        enemy.HEALTH -= 10
                        self.player.die()
                        self.player_lives -= 1

                for bullet in self.enemy_bullets:
                    if not self.player.dead and self.player.rect.colliderect(bullet.rect):
                        self.player.die()
                        bullet.kill()
                        self.player_lives -= 1

            for bullet in self.player_bullets:
                for enemy in self.enemies:
                    if enemy.HEALTH > 0 and enemy.rect.y >= 10 and pg.sprite.collide_mask(bullet, enemy):
                        bullet.on_hit()
                        snd.load_sound("hit.wav")
                        enemy.is_hit = True
                        enemy.HEALTH -= 1
                        if self.player.power_level <= 2:
                            bullet.kill()
                        if enemy.HEALTH <= 0:
                            self.ENEMIES_KILLED += 1
                            self.KILL_COUNT += 1
                            pwr_up = PowerUp()
                            pwr_up.rect = enemy.rect
                            if randint(1, 20) == self.drop_chance:
                                self.powerups.add(pwr_up)

            for beam in EnemyCruiser.allBullets:
                for fighter in self.fighters:
                    if pg.sprite.collide_mask(beam, fighter):
                        fighter.die()
                for frigate in self.frigates:
                    if pg.sprite.collide_mask(beam, frigate):
                        frigate.die()

            for powerup in self.powerups:
                if pg.sprite.collide_mask(powerup, self.player):
                    powerup.on_pickup()
                    self.player.power_level += 1

            for sprite in self.all_sprites:
                if 0 > sprite.rect.x > SCREEN_WIDTH:
                    sprite.kill()
                    self.all_sprites.remove(sprite)
                if 0 > sprite.rect.y > SCREEN_HEIGHT:
                    sprite.kill()
                    self.all_sprites.remove(sprite)

        # Mimic the apperance of hyper drive
        if self.player.arrive:
            self.star_speed = 10
        else:
            self.counter += 1
            if self.star_speed > 2 and self.counter >= 10:
                self.star_speed -= 1
                self.counter = 0
            else:
                pass

        # Player ship leaves after boss defeated
        if self.boss_defeated:
            self.enemy_bullets.empty()
            self.star_speed = 5
            self.player.dx = 0
            self.player.move_up()
            if self.player.rect.bottom <= 0:
                self._is_running = False

        self.all_sprites.update()
        self.clock.tick(self.FPS)
Beispiel #12
0
    def update(self):
        if self.is_hit:
            self.image = gfx.img_cruiser_hit
            self.is_hit = False
            if self.HEALTH < 0:
                self.die()
        else:
            self.image = gfx.img_cruiser

        if not (self.charging or self.firing) and self.rect.bottom == SCREEN_HEIGHT / 2:
            self.dy = 0
            self.charge = 0
            self.duration = 0
            self.next_shot += 1
            if self.next_shot >= 250:
                self.charging = True
                self.next_shot = 0

        if self.charging:
            self.has_shot = False
            self.firing = False
            self.charge += 1
            snd.load_sound("charging.wav")
            if self.charge >= 150:
                self.firing = True

        if self.firing:
            self.charging = False
            self.image = gfx.img_cruiser_firing
            self.beamtime += 1
            if self.beamtime >= 5:
                self.duration += 1
                self.fire_beam()
                self.beamtime = 0
                if self.duration >= 20:
                    self.image = gfx.img_cruiser
                    self.has_shot = True
                    self.firing = False

        if self.has_shot and not self.firing:
            # Move to new position based on last location
            if self.new_pos == "middle_to_left":
                if self.rect.left > 100:
                    self.dx = -1
                else:
                    self.dx = 0
                    self.new_pos = "left_to_middle"
                    self.has_shot = False

                if self.HEALTH < 500 and self.rect.centerx % 10 == 0:
                    self.fire_shots()

            elif self.new_pos == "left_to_middle":
                if self.rect.centerx < SCREEN_CENTER[0]:
                    self.dx = 1

                else:
                    self.dx = 0
                    self.new_pos = "middle_to_right"
                    self.has_shot = False

                if self.HEALTH < 500 and self.rect.centerx % 10 == 0:
                    self.fire_shots()

            elif self.new_pos == "middle_to_right":
                if self.rect.right < SCREEN_WIDTH - 100:
                    self.dx = 1

                else:
                    self.dx = 0
                    self.new_pos = "right_to_middle"
                    self.has_shot = False

                if self.HEALTH < 500 and self.rect.centerx % 10 == 0:
                    self.fire_shots()

            elif self.new_pos == "right_to_middle":
                if self.rect.centerx > SCREEN_CENTER[0]:
                    self.dx = -1

                else:
                    self.dx = 0
                    self.new_pos = "middle_to_left"
                    self.has_shot = False

                if self.HEALTH < 500 and self.rect.centerx % 10 == 0:
                    self.fire_shots()

        if self.rect.left > 0 and self.rect.right < SCREEN_WIDTH:
            self.rect.x += self.dx
            self.rect.y += self.dy
        elif self.HEALTH < self.HEALTH / 2:
            self.dx *= 2
Beispiel #13
0
 def die(self):
     snd.load_sound("explode.wav")
     self.image = gfx.img_explosion
     s = gfx.screen.blit(self.image, (self.rect.x - 40, self.rect.y - 40))
     pg.display.update(s)
     self.kill()
Beispiel #14
0
    def update(self):

        if self.arrive:
            self.appear()
            load_sound("leave_hyperspace.wav")
        elif self.respawn:
            self.invulnerable = True
            self.appear()

        if self.invulnerable:
            imgs = [gfx.img_player, gfx.img_player_invulnerable]
            self.image = choice(imgs)
            self.invulnerable_timer += 1
            if self.invulnerable_timer >= 180:
                self.image = gfx.img_player
                self.invulnerable_timer = 0
                self.invulnerable = False

        if self.rect.right > SCREEN_WIDTH:
            self.rect.x = SCREEN_WIDTH - self.size[0]
            self.dx = 0
        elif self.rect.left < 0:
            self.rect.x = 0
            self.dx = 0
        elif self.rect.bottom > SCREEN_HEIGHT and not self.dead:
            self.rect.bottom = SCREEN_HEIGHT
            self.dy = 0

        if self.moving:
            if not all([self.dead or self.respawn or self.arrive]):
                # for i in range(self.speed):
                #     self.rect.x += self.dx
                #     self.rect.y += self.dy
                self.rect.x += round(self.dx * self.dv)
                self.rect.y += round(self.dy * self.dv)
                if self.dv < self.speed:
                    self.dv += 1.005
        else:
            if not self.invulnerable:
                self.image = gfx.img_player
            self.rect.x += self.dx * self.dv
            self.rect.y += self.dy * self.dv

            if self.dv > 0:
                self.dv -= .5
            else:
                self.dv = 0
        if self.dead:
            self.rect.y = self.start_position
            self.dead_timer += 1
            if self.dead_timer >= 180:
                self.rect.centerx = SCREEN_WIDTH / 2
                self.dead = False
                self.respawn = True
        else:
            self.dead_timer = 0

        if not self.shooting:
            self.t = 0

        self.moving = False
        self.allBullets.update()