示例#1
0
def button(active, inactive, get_top, action=None):

    click = pygame.mouse.get_pressed()
    music_paused = False

    mx, my = pygame.mouse.get_pos()
    display = pygame.image.load(inactive).convert_alpha()
    display_rect = display.get_rect(center=sprites.WINDOW.get_rect().center,
                                    top=get_top)

    if display_rect.collidepoint((mx, my)):
        display = pygame.image.load(active).convert_alpha()
        if click[0] == 1 and action != None:
            if action == 'play':
                root.game()
            elif action == 'options':
                root.options()
            elif action == 'exit':
                pygame.quit()
                quit()
            elif action == 'back':
                main.game_menu()
            elif action == 'soundon':
                if mixer.music.play(-1) == False:
                    mixer.music.play(-1)
            elif action == 'soundoff':
                if not music_paused:
                    pygame.mixer.music.pause()
                    music_paused = True
                else:
                    pygame.mixer.music.unpause()
    else:
        display = pygame.image.load(inactive).convert_alpha()

    sprites.WINDOW.blit(display, display_rect)
示例#2
0
def game():
    run = True
    FPS = 60
    wave, lives = 0, 5
    score = elements.Score()
    if score.score != 0:
        score.score = 0
    main_font = pygame.font.Font(r"fonts\Starjedi.ttf", 30)
    deaths_font = pygame.font.Font(r"fonts\Starjedi.ttf", 30)

    enemies = []
    wave_length = 5
    enemy_velocity, player_velocity = 1, 4
    laser_velocity = 6

    player = elements.Player(300, 630)

    clock = pygame.time.Clock()

    deaths = False
    deaths_count = 0

    def redraw():
        sprites.WINDOW.blit(sprites.BACKGROUND, (0, 0))
        lives_label = main_font.render(f"Lives: {lives}", 1, (255, 255, 0))
        wave_label = main_font.render(f"wave: {wave}", 1, (255, 255, 0))
        score_label = main_font.render(f"Score: {score.score}", 1, (255, 255, 0))
        
        sprites.WINDOW.blit(lives_label, (10, 10))
        sprites.WINDOW.blit(
            wave_label, (sprites.WIDTH - wave_label.get_width() - 10, 10)
        )
        sprites.WINDOW.blit(score_label, (290, 10))

        for enemy in enemies:
            enemy.draw(sprites.WINDOW)

        player.draw(sprites.WINDOW)

        if deaths:
            mixer.music.fadeout(750)
            deaths_label = deaths_font.render(
                "The Imperial Fleet has defeated you!!", 1, (255, 255, 255)
            )
            sprites.WINDOW.blit(
                deaths_label, (sprites.WIDTH / 2 - deaths_label.get_width() / 2, 350)
            )
            

        pygame.display.update()

    while run:
        clock.tick(FPS)
        redraw()

        if lives <= 0 or player.health <= 0:
            deaths = True
            deaths_count += 1

        if deaths:
            if deaths_count > FPS * 3:
                run = False
            else:
                continue

        if len(enemies) == 0:
            if wave != 0:
                score.wave_score_update()
            wave += 1
            wave_length += 5
            for _ in range(wave_length):
                enemy = elements.Enemy(
                    random.randrange(50, sprites.WIDTH - 100),
                    random.randrange(-1500, -100),
                    random.choice(["red", "blue", "green"]),
                )
                enemies.append(enemy)

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                quit()

        keys = pygame.key.get_pressed()
        if keys[pygame.K_a] and player.posx - player_velocity > 0:  # left
            player.posx -= player_velocity
        if (
            keys[pygame.K_d]
            and player.posx + player_velocity + player.get_width() < sprites.WIDTH
        ):  # right
            player.posx += player_velocity
        if keys[pygame.K_w] and player.posy - player_velocity > 0:  # up
            player.posy -= player_velocity
        if (
            keys[pygame.K_s]
            and player.posy + player_velocity + player.get_height() + 15
            < sprites.HEIGHT
        ):  # down
            player.posy += player_velocity
        if keys[pygame.K_SPACE]:
            player_laser_sound = mixer.Sound(r"sounds\player_laser.wav")
            player_laser_sound.play()
            player.shoot()
        if keys[pygame.K_ESCAPE]:
            main.game_menu()

        collision_sound = mixer.Sound(r"sounds\explosion.wav")

        for enemy in enemies[:]:
            enemy.move(enemy_velocity)
            enemy.fire_lasers(laser_velocity, player)

            if random.randrange(0, 2 * 60) == 1:
                enemy.shoot()

            if elements.object_collision(enemy, player):
                player.health -= 5
                collision_sound.play()
                enemies.remove(enemy)
            elif enemy.posy + enemy.get_height() > sprites.HEIGHT:
                lives -= 1
                enemies.remove(enemy)

        player.fire_lasers(-laser_velocity, enemies, score)