예제 #1
0
def main():
    pg.init()
    pg.font.init()
    screen = pg.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
    pg.display.set_caption('My_game')
    clock = pg.time.Clock()

    # sprites
    img = load_image('player.png')
    Player.images = [img]
    img = load_image('player_shot.png')
    Player_shot.images = [img]
    img = load_image('enemy_new.png')
    Enemy.images = [img]

    # sounds
    crow_sound = load_sound('crow.wav')
    shot_sound = load_sound('shot.wav')
    shot_sound.set_volume(0.1)

    background = pg.Surface(SCREEN_RECT.size)
    background.fill(BACKGROUND_COLOR)
    screen.blit(background, (0, 0))

    pg.display.flip()

    # Создание контейнеров
    all = pg.sprite.RenderUpdates()
    shots = pg.sprite.Group()
    enemies = pg.sprite.Group()

    # Присвоение контейнеров
    Player.containers = all
    Player_shot.containers = all, shots
    Enemy.containers = all, enemies

    player = Player()
    # Таймеры появлений объектов
    gun_timer = 0
    enemy_spawn_timer = 0
    crow_sound_timer = 0
    score_delta = 0
    score = Score()
    game_over = False

    def check_quit_keys():
        for event in pg.event.get():
            if event.type == QUIT or \
                    (event.type == KEYDOWN and event.key == K_ESCAPE):
                return True

    if pg.font:
        all.add(score)

    # initialiaing fonts
    pg.font.init()
    my_font = pg.font.SysFont('Comic Sans MS', 40)
    my_font_bot = pg.font.SysFont('Comic Sans MS', 20)
    text_over = my_font.render('Game over', False, (0, 0, 0))
    text_score = my_font.render('Score: ' + str(score.score), False, (0, 0, 0))
    instruction = my_font_bot.render('Press S to start a new game ', False,
                                     (0, 0, 0))

    while player.alive():
        if check_quit_keys():
            break

        key_state = pg.key.get_pressed()
        horiz_direction = key_state[K_RIGHT] - key_state[K_LEFT]
        vert_direction = key_state[K_DOWN] - key_state[K_UP]
        player.move(horiz_direction, vert_direction)

        score_delta = 0

        for shot in shots:
            enemies_hit_list = pg.sprite.spritecollide(shot, enemies, True)
            if len(enemies_hit_list) > 0:
                if crow_sound_timer <= 0:
                    crow_sound.play()
                    crow_sound_timer = Enemy.CROW_SOUND_COOLDOWN
                shot.kill()
                score_delta += len(enemies_hit_list)
        crow_sound_timer -= 1

        if score_delta > 0:
            score.set_score_delta(score_delta)

        d = pg.sprite.spritecollide(player, enemies, True)
        if len(d) > 0:
            player.kill()
            text_score = my_font.render('Score: ' + str(score.score), False,
                                        (0, 0, 0))
            game_over = True

        if key_state[K_x]:
            if gun_timer != 0:
                gun_timer = gun_timer - 1
            else:
                Player_shot(player.get_guns()[0])
                Player_shot(player.get_guns()[1])
                shot_sound.play()
                gun_timer = Player_shot.GUN_RELOAD

        if enemy_spawn_timer != 0:
            enemy_spawn_timer = enemy_spawn_timer - 1
        else:
            Enemy()
            enemy_spawn_timer = Enemy.SPAWN_COOLDOWN

        all.clear(screen, background)
        all.update()
        pg.display.update(all.draw(screen))
        clock.tick(60)
    while game_over:
        if check_quit_keys():
            break

        key_state = pg.key.get_pressed()
        if key_state[K_s]:
            main()
            break
        screen.blit(background, (0, 0))
        screen.blit(text_over, (100, 0))
        screen.blit(text_score, (125, 100))
        screen.blit(instruction, (50, 600))
        pg.display.update()
        clock.tick(60)
    pg.quit()