Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3592978
  • 博文数量: 365
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2522
  • 用 户 组: 普通用户
  • 注册时间: 2019-10-28 13:40
文章分类

全部博文(365)

文章存档

2023年(8)

2022年(130)

2021年(155)

2020年(50)

2019年(22)

我的朋友

分类: Python/Ruby

2022-03-09 17:16:35

def GamingInterface(num_player, screen):

    # 初始化

    pygame.mixer.music.load(cfg.SOUNDPATHS['Cool Space Music'])

    pygame.mixer.music.set_volume(0.4)

    pygame.mixer.music.play(-1)

    explosion_sound = pygame.mixer.Sound(cfg.SOUNDPATHS['boom'])

    fire_sound = pygame.mixer.Sound(cfg.SOUNDPATHS['shot'])

    font = pygame.font.Font(cfg.FONTPATH, 20)

    # 游戏背景图

    bg_imgs = [cfg.IMAGEPATHS['bg_big'], cfg.IMAGEPATHS['seamless_space'], cfg.IMAGEPATHS['space3']]

    bg_move_dis = 0

    bg_1 = pygame.image.load(bg_imgs[0]).convert()

    bg_2 = pygame.image.load(bg_imgs[1]).convert()

    bg_3 = pygame.image.load(bg_imgs[2]).convert()

    # 玩家, 和小行星精灵组

    player_group = pygame.sprite.Group()

    bullet_group外汇跟单gendan5.com = pygame.sprite.Group()

    asteroid_group = pygame.sprite.Group()

    # 产生小行星的时间间隔

    asteroid_ticks = 90

    for i in range(num_player):

        player_group.add(Ship(i+1, cfg))

    clock = pygame.time.Clock()

    # 分数

    score_1, score_2 = 0, 0

    # 游戏主循环

    while True:

        for event in pygame.event.get():

            if event.type == pygame.QUIT:

                pygame.quit()

                sys.exit()

        # --玩家一: ↑↓←→控制, j射击; 玩家二: wsad控制, 空格射击

        pressed_keys = pygame.key.get_pressed()

        for idx, player in enumerate(player_group):

            direction = None

            if idx == 0:

                if pressed_keys[pygame.K_UP]:

                    direction = 'up'

                elif pressed_keys[pygame.K_DOWN]:

                    direction = 'down'

                elif pressed_keys[pygame.K_LEFT]:

                    direction = 'left'

                elif pressed_keys[pygame.K_RIGHT]:

                    direction = 'right'

                if direction:

                    player.move(direction)

                if pressed_keys[pygame.K_j]:

                    if player.cooling_time == 0:

                        fire_sound.play()

                        bullet_group.add(player.shot())

                        player.cooling_time = 20

            elif idx == 1:

                if pressed_keys[pygame.K_w]:

                    direction = 'up'

                elif pressed_keys[pygame.K_s]:

                    direction = 'down'

                elif pressed_keys[pygame.K_a]:

                    direction = 'left'

                elif pressed_keys[pygame.K_d]:

                    direction = 'right'

                if direction:

                    player.move(direction)

                if pressed_keys[pygame.K_SPACE]:

                    if player.cooling_time == 0:

                        fire_sound.play()

                        bullet_group.add(player.shot())

                        player.cooling_time = 20

            if player.cooling_time > 0:

                player.cooling_time -= 1

        if (score_1 + score_2) < 500:

            background = bg_1

        elif (score_1 + score_2) < 1500:

            background = bg_2

        else:

            background = bg_3

        # --向下移动背景图实现飞船向上移动的效果

        screen.blit(background, (0, -background.get_rect().height + bg_move_dis))

        screen.blit(background, (0, bg_move_dis))

        bg_move_dis = (bg_move_dis + 2) % background.get_rect().height

        # --生成小行星

        if asteroid_ticks == 0:

            asteroid_ticks = 90

            asteroid_group.add(Asteroid(cfg))

        else:

            asteroid_ticks -= 1

        # --画飞船

        for player in player_group:

            if pygame.sprite.spritecollide(player, asteroid_group, True, None):

                player.explode_step = 1

                explosion_sound.play()

            elif player.explode_step > 0:

                if player.explode_step > 3:

                    player_group.remove(player)

                    if len(player_group) == 0:

                        return

                else:

                    player.explode(screen)

            else:

                player.draw(screen)

        # --

        for bullet in bullet_group:

            bullet.move()

            if pygame.sprite.spritecollide(bullet, asteroid_group, True, None):

                bullet_group.remove(bullet)

                if bullet.player_idx == 1:

                    score_1 += 1

                else:

                    score_2 += 1

            else:

                bullet.draw(screen)

        # --画小行星

        for asteroid in asteroid_group:

            asteroid.move()

            asteroid.rotate()

            asteroid.draw(screen)

        # --显示分数

        score_1_text = '玩家一得分: %s' % score_1

        score_2_text = '玩家二得分: %s' % score_2

        text_1 = font.render(score_1_text, True, (0, 0, 255))

        text_2 = font.render(score_2_text, True, (255, 0, 0))

        screen.blit(text_1, (2, 5))

        screen.blit(text_2, (2, 35))

        # --屏幕刷新

        pygame.display.update()

        clock.tick(60)

阅读(1160) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~