用pygame制作一个面向对象的小游戏(飞机大战)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档



提示:以下是本篇文章正文内容,下面案例可供参考

@1. 先写一个程序的主入口,让程序能够正常运行

import pygame
import sys
import random
class GameManage():
    def __init__(self):

        pygame.init()
        self.value = pygame.time.Clock()
        self.screen = pygame.display.set_mode((400, 600))
        pygame.display.set_caption('我的名字叫飞机大战'
    def check_event(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
    def run(self):
        while True:
            self.check_event()
gm = GameManage()
gm.run()

2.插入背景类

class BgSprite(BaseSprite):
    def __init__(self, name, top_left):
        super().__init__(name)
        self.rect.topleft = top_left

    def update(self):
        self.rect.top += 7
        if self.rect.top >= 600:
            self.rect.top = -600
class BgManage():
    def __init__(self, gm):
        self.gm = gm
        self.bg_group = pygame.sprite.Group()
        BgSprite("img/bg.jpg", (0, 0)).add(self.bg_group)
        BgSprite("img/bg.jpg", (0, -600)).add(self.bg_group)

    def update(self):
        self.bg_group.update()
        self.bg_group.draw(self.gm.screen)

3.写一个ui界面 让点击即可开始游戏  

class BaseSprite(pygame.sprite.Sprite):
    def __init__(self, name):
        super().__init__()
        self.image = pygame.image.load(name)
        self.rect = self.image.get_rect()

    def update(self):
        pass


class Util:
    """
    工具类: 提供静态方法
    """

    @staticmethod
    def click_check(sprite):
        """
        精灵的点击检测
        """
        if pygame.mouse.get_pressed()[0]:
            if sprite.rect.collidepoint(pygame.mouse.get_pos()):
                return True
        return False


class UISprite(BaseSprite):
    """
    UI精灵类
    """

    def __init__(self, name, center):
        super().__init__(name)
        self.rect.center = center


class UIManage:
    def __init__(self, gm):
        self.gm = gm
        # UI字体
        self.font = pygame.font.Font("font/simkai.ttf", 32)

        # 开始前UI元素
        self.ready_group = pygame.sprite.Group()
        self.begin_btn = UISprite("img/begin_btn.png", (200, 300))
        self.begin_btn.add(self.ready_group)

        # 游戏中UI元素
        self.score_surface = self.font.render(f"Score:{self.gm.player_manage.score}", True, "#FF4500")

        # 游戏结束UI元素
        self.end_group = pygame.sprite.Group()
        self.replay_btn = UISprite("img/replay_btn.png", (200, 300))
        self.replay_btn.add(self.end_group)

    def update(self):
        if self.gm.state == "ready":
            # print("更新未开始游戏UI")
            self.ready_group.draw(self.gm.screen)
            if Util.click_check(self.begin_btn):
                AudioManage.play_sound('sound/游戏开始音效.mp3')
                self.gm.state = "gaming"
                self.gm.player_manage.born()
        elif self.gm.state == "gaming":
            # print("更新游戏中UI")
            self.gm.screen.blit(self.score_surface, (0, 20))
            self.score_surface = self.font.render(f"Score:{self.gm.player_manage.score}", True, "#FF4500")

        elif self.gm.state == "end":
            # print("更新游戏结束UI")
            self.end_group.draw(self.gm.screen)
            if Util.click_check(self.replay_btn):
                self.gm.state = "gaming"
                self.gm.player_manage.born()

4.插入玩家类和子弹类(让玩家可以攻击)

class BulletSprite(BaseSprite):
    def __init__(self, name, center, speed):
        super().__init__(name)
        self.rect.center = center
        self.speed = speed

    def update(self):
        self.rect.top += self.speed
class PlayerSprite(BaseSprite):
    def __init__(self, name, center, gm):
        self.gm = gm
        self.max_hp = 10
        self.hp = 10
        super().__init__(name)
        self.rect.center = center
        self.bullet_group = pygame.sprite.Group()
        self.super_bullet_num = 0
        self.shoot_time = 0.8

    def draw_hp(self):
        pygame.draw.rect(self.gm.screen, (127, 127, 127),
                         (self.rect.left + self.rect.width / 2 - 25, self.rect.bottom + 1, 50, 10))
        pygame.draw.rect(self.gm.screen, (0, 255, 0), (
            self.rect.left + self.rect.width / 2 - 25, self.rect.bottom + 1, self.hp / self.max_hp * 50, 10))

    def shoot(self):
        BulletSprite("img/玩家子弹.png", (self.rect.centerx, self.rect.top - 11), -15).add(self.bullet_group)

    def shoot2(self):
        for i in range(5):
            BulletSprite("img/玩家子弹.png", (self.rect.centerx - 20 + 10 * i, self.rect.top - 11), -15).add(
                self.bullet_group)

    def update(self):
        self.draw_hp()
        self.shoot_time -= 0.1
        if self.shoot_time <= 0:
            self.shoot_time = 0.8

            if self.super_bullet_num > 0:
                self.shoot2()
                self.super_bullet_num -= 1
            else:
                self.shoot()
        impress_key = pygame.key.get_pressed()
        if impress_key[pygame.K_LEFT] and self.rect.left >= 0:
            self.rect.left -= 7
        if impress_key[pygame.K_RIGHT] and self.rect.right <= 400:
            self.rect.left += 7
        if impress_key[pygame.K_UP] and self.rect.top >= 0:
            self.rect.top -= 7
        if impress_key[pygame.K_DOWN] and self.rect.top <= 550:
            self.rect.top += 7

        self.bullet_group.update()
        self.bullet_group.draw(self.gm.screen)


class PlayerManage():
    def __init__(self, gm):
        self.gm = gm
        self.score = 0
        self.player_group = pygame.sprite.Group()

        # self.player = PlayerSprite("img/子弹.png", (200, 500), self.gm)
        # self.player.add(self.player_group)

    def born(self):
        self.player_sprite = PlayerSprite('img/飞机.png', (200, 550), self.gm)
        self.player_sprite.add(self.player_group)

    def clear(self):
        self.player_group.empty()

    def update(self):
        self.player_group.update()
        self.player_group.draw(self.gm.screen)

5.插入敌人类和敌人攻击

class EnemySprite(BaseSprite,DestroyAnimateMixin):
    destroy_images = [f"img/enemy1_down{i}.png" for i in range(3, 5)]
    def __init__(self, name, speed, hp, gm):
        self.gm = gm
        super().__init__(name)
        self.left = self.rect.left = random.randint(0, 400 - self.rect.width)
        self.max_hp = hp
        self.hp = hp
        DestroyAnimateMixin.__init__(self)
        self.speed = speed
        self.rect.bottom = 0
        self.time_count = 2
        self.bullet_group = pygame.sprite.Group()
        self.is_alive = True

    def shoot(self):
        BulletSprite("img/敌人子弹.png", (self.rect.centerx, self.rect.bottom + 11), 10).add(self.bullet_group)

    def draw_hp(self):
        pygame.draw.rect(self.gm.screen, (127, 127, 127),
                         (self.rect.left + self.rect.width / 2 - 25, self.rect.top - 20, 50, 10))
        pygame.draw.rect(self.gm.screen, (0, 255, 0), (
            self.rect.left + self.rect.width / 2 - 25, self.rect.top - 20, self.hp / self.max_hp * 50, 10))
    def update_image(self):
        if not self.is_alive:
            self.update_destroy_images()


    def update(self):
        self.update_image()
        self.draw_hp()
        self.time_count -= 0.1
        if self.time_count <= 0:
            self.time_count = 3
            self.shoot()
        self.rect.top += self.speed
        if self.rect.top > 600:
            self.kill()
        self.bullet_group.update()
        self.bullet_group.draw(self.gm.screen)


class EnemyManage():
    def __init__(self, gm):
        self.gm = gm
        self.enemy_group = pygame.sprite.Group()
        self.time_count = 2

    def clear(self):
        self.enemy_group.empty()

    def generate(self):
        value = random.random()
        if value > 0.9:
            EnemySprite("img/敌人3.png", 4, 5, self.gm).add(self.enemy_group)
        elif value > 0.6:
            EnemySprite("img/敌人2.png", 6, 3, self.gm).add(self.enemy_group)
        else:
            EnemySprite("img/敌人1.png", 6, 1, self.gm).add(self.enemy_group)

    def update(self):
        self.time_count -= 0.1
        if self.time_count <= 0:
            self.time_count = 2
            self.generate()

        self.enemy_group.update()
        self.enemy_group.draw(self.gm.screen)

6.插入道具类

class PropSprite(BaseSprite):
    def __init__(self, name, speed, type):
        super().__init__(name)
        self.left = self.rect.left = random.randint(0, 400 - self.rect.width)
        self.speed = speed
        self.type = type
        self.rect.bottom = 0
        self.time_count = 2

    def update(self):
        self.rect.top += self.speed
        if self.rect.top > 600:
            self.kill()


class PropManage():
    def __init__(self, gm):
        self.gm = gm
        self.prop_group = pygame.sprite.Group()
        self.time_count = 7
        self.bullet_group = pygame.sprite.Group()

    def clear(self):
        self.prop_group.empty()

    def generate(self):
        value = random.random()
        if value > 0.8:
            PropSprite("img/道具1.png", 8, 1).add(self.prop_group)
        elif value > 0.5:
            PropSprite("img/道具3.png", 8, 3).add(self.prop_group)
        else:
            PropSprite("img/道具2.png", 8, 2).add(self.prop_group)

    def update(self):
        self.time_count -= 0.1
        if self.time_count <= 0:
            self.time_count = 7
            self.generate()

        self.prop_group.update()
        self.prop_group.draw(self.gm.screen)

7.在最后写游戏管理类

检测碰撞与更新

class GameManage():
    def __init__(self):

        pygame.init()
        self.value = pygame.time.Clock()
        self.screen = pygame.display.set_mode((400, 600))
        pygame.display.set_caption('我的名字叫飞机大战')
        self.bg_manage = BgManage(self)
        self.player_manage = PlayerManage(self)
        self.enemy_manage = EnemyManage(self)
        self.ui_manage = UIManage(self)
        self.pro_mange = PropManage(self)
        self.state = 'ready'
        AudioManage.play_bg_music()

    def check_event(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
        # 打怪加分数

    def collide(self):
        #  玩家和敌人碰撞  游戏结束
        if pygame.sprite.groupcollide(self.player_manage.player_group, self.enemy_manage.enemy_group, False, False):
            self.player_manage.player_sprite.hp -= 0.2
            if self.player_manage.player_sprite.hp <= 0:
                AudioManage.play_sound('sound/玩家死亡音效.mp3')
                self.state = 'end'
                self.player_manage.score = 0
                self.player_manage.clear()
                self.enemy_manage.clear()

        for enemy in self.enemy_manage.enemy_group.sprites():
            # 玩家碰撞子弹
            player_enemy_bullet_groupcollied = pygame.sprite.groupcollide(self.player_manage.player_group,
                                                                          enemy.bullet_group, False, True)
            if player_enemy_bullet_groupcollied:
                self.player_manage.player_sprite.hp -= 1
                if self.player_manage.player_sprite.hp <= 0:
                    self.player_manage.clear()

                    self.state = 'end'
                    self.enemy_manage.clear()
                    AudioManage.play_sound('sound/玩家死亡音效.mp3')

        #  吃道具
        player_prop_collider = pygame.sprite.groupcollide(self.player_manage.player_group, self.pro_mange.prop_group,
                                                          False, True)
        if player_prop_collider:
            for props in player_prop_collider.values():
                for prop in props:
                    print(prop.type, "吃到道具")
                    if prop.type == 1:
                        AudioManage.play_sound('sound/碰撞音效.mp3')
                        self.enemy_manage.clear()
                    if prop.type == 2:
                        AudioManage.play_sound('sound/道具声音.mp3')
                        self.player_manage.player_sprite.super_bullet_num = 10
                    if prop.type == 3:
                        AudioManage.play_sound('sound/道具声音.mp3')
                        self.player_manage.player_sprite.hp += 1
                        if self.player_manage.player_sprite.hp > self.player_manage.player_sprite.max_hp:
                            self.player_manage.player_sprite.hp = self.player_manage.player_sprite.max_hp
        # 玩家子弹碰撞敌人子弹
        for z in self.enemy_manage.enemy_group.sprites():
            if pygame.sprite.groupcollide(self.player_manage.player_sprite.bullet_group,z.bullet_group,True,True):
                AudioManage.play_sound('sound/射击声音.mp3')
            #  玩家射击敌人
        player_bullet_enemy_collider = pygame.sprite.groupcollide(self.player_manage.player_sprite.bullet_group,
                                                                  self.enemy_manage.enemy_group, True, False)
        if player_bullet_enemy_collider:
            for enemeys in player_bullet_enemy_collider.values():
                AudioManage.play_sound('sound/射击声音.mp3')
                for enemy in enemeys:
                    enemy.hp -= 1
                    if enemy.hp <= 0:
                        enemy.is_alive = False
                        # enemy.is_alive = False
                        # print("打死了一个敌人")
                        # enemy.kill()
                        self.player_manage.score += 1

    def run(self):
        while True:
            self.value.tick(24)
            self.check_event()
            self.bg_manage.update()
            self.ui_manage.update()

            if self.state == 'gaming':
                self.player_manage.update()
                self.enemy_manage.update()
                self.pro_mange.update()
                self.collide()

            pygame.display.flip()


gm = GameManage()
gm.run()

8.总代码

import pygame
import sys
import random

class AudioManage:
    @staticmethod
    def play_bg_music():
        pygame.mixer.music.load('sound/bgmusic.mp3')
        pygame.mixer.music.play(True)

    @staticmethod
    def play_sound(name):
        sound = pygame.mixer.Sound(name)
        sound.play()

class DestroyAnimateMixin:
    destroy_images = []
    def __init__(self):
        self.images2 = [pygame.image.load(name) for name in self.destroy_images]
        self.destroy_index = 0
        # if not self.destroy_images:
        #     raise Exception("destroy_images 为空")

    def update_destroy_images(self):
        self.destroy_index += 1
        if self.destroy_index < len(self.destroy_images) * 5:
            self.image = self.images2[self.destroy_index // 5]
        else:
            self.kill()

class BaseSprite(pygame.sprite.Sprite):
    def __init__(self, name):
        super().__init__()
        self.image = pygame.image.load(name)
        self.rect = self.image.get_rect()

    def update(self):
        pass


class Util:
    """
    工具类: 提供静态方法
    """

    @staticmethod
    def click_check(sprite):
        """
        精灵的点击检测
        """
        if pygame.mouse.get_pressed()[0]:
            if sprite.rect.collidepoint(pygame.mouse.get_pos()):
                return True
        return False


class UISprite(BaseSprite):
    """
    UI精灵类
    """

    def __init__(self, name, center):
        super().__init__(name)
        self.rect.center = center


class UIManage:
    def __init__(self, gm):
        self.gm = gm
        # UI字体
        self.font = pygame.font.Font("font/simkai.ttf", 32)

        # 开始前UI元素
        self.ready_group = pygame.sprite.Group()
        self.begin_btn = UISprite("img/begin_btn.png", (200, 300))
        self.begin_btn.add(self.ready_group)

        # 游戏中UI元素
        self.score_surface = self.font.render(f"Score:{self.gm.player_manage.score}", True, "#FF4500")

        # 游戏结束UI元素
        self.end_group = pygame.sprite.Group()
        self.replay_btn = UISprite("img/replay_btn.png", (200, 300))
        self.replay_btn.add(self.end_group)

    def update(self):
        if self.gm.state == "ready":
            # print("更新未开始游戏UI")
            self.ready_group.draw(self.gm.screen)
            if Util.click_check(self.begin_btn):
                AudioManage.play_sound('sound/游戏开始音效.mp3')
                self.gm.state = "gaming"
                self.gm.player_manage.born()
        elif self.gm.state == "gaming":
            # print("更新游戏中UI")
            self.gm.screen.blit(self.score_surface, (0, 20))
            self.score_surface = self.font.render(f"Score:{self.gm.player_manage.score}", True, "#FF4500")

        elif self.gm.state == "end":
            # print("更新游戏结束UI")
            self.end_group.draw(self.gm.screen)
            if Util.click_check(self.replay_btn):
                self.gm.state = "gaming"
                self.gm.player_manage.born()


class BulletSprite(BaseSprite):
    def __init__(self, name, center, speed):
        super().__init__(name)
        self.rect.center = center
        self.speed = speed

    def update(self):
        self.rect.top += self.speed


class PlayerSprite(BaseSprite):
    def __init__(self, name, center, gm):
        self.gm = gm
        self.max_hp = 10
        self.hp = 10
        super().__init__(name)
        self.rect.center = center
        self.bullet_group = pygame.sprite.Group()
        self.super_bullet_num = 0
        self.shoot_time = 0.8

    def draw_hp(self):
        pygame.draw.rect(self.gm.screen, (127, 127, 127),
                         (self.rect.left + self.rect.width / 2 - 25, self.rect.bottom + 1, 50, 10))
        pygame.draw.rect(self.gm.screen, (0, 255, 0), (
            self.rect.left + self.rect.width / 2 - 25, self.rect.bottom + 1, self.hp / self.max_hp * 50, 10))

    def shoot(self):
        BulletSprite("img/玩家子弹.png", (self.rect.centerx, self.rect.top - 11), -15).add(self.bullet_group)

    def shoot2(self):
        for i in range(5):
            BulletSprite("img/玩家子弹.png", (self.rect.centerx - 20 + 10 * i, self.rect.top - 11), -15).add(
                self.bullet_group)

    def update(self):
        self.draw_hp()
        self.shoot_time -= 0.1
        if self.shoot_time <= 0:
            self.shoot_time = 0.8

            if self.super_bullet_num > 0:
                self.shoot2()
                self.super_bullet_num -= 1
            else:
                self.shoot()
        impress_key = pygame.key.get_pressed()
        if impress_key[pygame.K_LEFT] and self.rect.left >= 0:
            self.rect.left -= 7
        if impress_key[pygame.K_RIGHT] and self.rect.right <= 400:
            self.rect.left += 7
        if impress_key[pygame.K_UP] and self.rect.top >= 0:
            self.rect.top -= 7
        if impress_key[pygame.K_DOWN] and self.rect.top <= 550:
            self.rect.top += 7

        self.bullet_group.update()
        self.bullet_group.draw(self.gm.screen)


class PlayerManage():
    def __init__(self, gm):
        self.gm = gm
        self.score = 0
        self.player_group = pygame.sprite.Group()

        # self.player = PlayerSprite("img/子弹.png", (200, 500), self.gm)
        # self.player.add(self.player_group)

    def born(self):
        self.player_sprite = PlayerSprite('img/飞机.png', (200, 550), self.gm)
        self.player_sprite.add(self.player_group)

    def clear(self):
        self.player_group.empty()

    def update(self):
        self.player_group.update()
        self.player_group.draw(self.gm.screen)


class BgSprite(BaseSprite):
    def __init__(self, name, top_left):
        super().__init__(name)
        self.rect.topleft = top_left

    def update(self):
        self.rect.top += 7
        if self.rect.top >= 600:
            self.rect.top = -600


class BgManage():
    def __init__(self, gm):
        self.gm = gm
        self.bg_group = pygame.sprite.Group()
        BgSprite("img/bg.jpg", (0, 0)).add(self.bg_group)
        BgSprite("img/bg.jpg", (0, -600)).add(self.bg_group)

    def update(self):
        self.bg_group.update()
        self.bg_group.draw(self.gm.screen)


class PropSprite(BaseSprite):
    def __init__(self, name, speed, type):
        super().__init__(name)
        self.left = self.rect.left = random.randint(0, 400 - self.rect.width)
        self.speed = speed
        self.type = type
        self.rect.bottom = 0
        self.time_count = 2

    def update(self):
        self.rect.top += self.speed
        if self.rect.top > 600:
            self.kill()


class PropManage():
    def __init__(self, gm):
        self.gm = gm
        self.prop_group = pygame.sprite.Group()
        self.time_count = 7
        self.bullet_group = pygame.sprite.Group()

    def clear(self):
        self.prop_group.empty()

    def generate(self):
        value = random.random()
        if value > 0.8:
            PropSprite("img/道具1.png", 8, 1).add(self.prop_group)
        elif value > 0.5:
            PropSprite("img/道具3.png", 8, 3).add(self.prop_group)
        else:
            PropSprite("img/道具2.png", 8, 2).add(self.prop_group)

    def update(self):
        self.time_count -= 0.1
        if self.time_count <= 0:
            self.time_count = 7
            self.generate()

        self.prop_group.update()
        self.prop_group.draw(self.gm.screen)


class EnemySprite(BaseSprite,DestroyAnimateMixin):
    destroy_images = [f"img/enemy1_down{i}.png" for i in range(3, 5)]
    def __init__(self, name, speed, hp, gm):
        self.gm = gm
        super().__init__(name)
        self.left = self.rect.left = random.randint(0, 400 - self.rect.width)
        self.max_hp = hp
        self.hp = hp
        DestroyAnimateMixin.__init__(self)
        self.speed = speed
        self.rect.bottom = 0
        self.time_count = 2
        self.bullet_group = pygame.sprite.Group()
        self.is_alive = True

    def shoot(self):
        BulletSprite("img/敌人子弹.png", (self.rect.centerx, self.rect.bottom + 11), 10).add(self.bullet_group)

    def draw_hp(self):
        pygame.draw.rect(self.gm.screen, (127, 127, 127),
                         (self.rect.left + self.rect.width / 2 - 25, self.rect.top - 20, 50, 10))
        pygame.draw.rect(self.gm.screen, (0, 255, 0), (
            self.rect.left + self.rect.width / 2 - 25, self.rect.top - 20, self.hp / self.max_hp * 50, 10))
    def update_image(self):
        if not self.is_alive:
            self.update_destroy_images()


    def update(self):
        self.update_image()
        self.draw_hp()
        self.time_count -= 0.1
        if self.time_count <= 0:
            self.time_count = 3
            self.shoot()
        self.rect.top += self.speed
        if self.rect.top > 600:
            self.kill()
        self.bullet_group.update()
        self.bullet_group.draw(self.gm.screen)


class EnemyManage():
    def __init__(self, gm):
        self.gm = gm
        self.enemy_group = pygame.sprite.Group()
        self.time_count = 2

    def clear(self):
        self.enemy_group.empty()

    def generate(self):
        value = random.random()
        if value > 0.9:
            EnemySprite("img/敌人3.png", 4, 5, self.gm).add(self.enemy_group)
        elif value > 0.6:
            EnemySprite("img/敌人2.png", 6, 3, self.gm).add(self.enemy_group)
        else:
            EnemySprite("img/敌人1.png", 6, 1, self.gm).add(self.enemy_group)

    def update(self):
        self.time_count -= 0.1
        if self.time_count <= 0:
            self.time_count = 2
            self.generate()

        self.enemy_group.update()
        self.enemy_group.draw(self.gm.screen)


class GameManage():
    def __init__(self):

        pygame.init()
        self.value = pygame.time.Clock()
        self.screen = pygame.display.set_mode((400, 600))
        pygame.display.set_caption('我的名字叫飞机大战')
        self.bg_manage = BgManage(self)
        self.player_manage = PlayerManage(self)
        self.enemy_manage = EnemyManage(self)
        self.ui_manage = UIManage(self)
        self.pro_mange = PropManage(self)
        self.state = 'ready'
        AudioManage.play_bg_music()

    def check_event(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
        # 打怪加分数

    def collide(self):
        #  玩家和敌人碰撞  游戏结束
        if pygame.sprite.groupcollide(self.player_manage.player_group, self.enemy_manage.enemy_group, False, False):
            self.player_manage.player_sprite.hp -= 0.2
            if self.player_manage.player_sprite.hp <= 0:
                AudioManage.play_sound('sound/玩家死亡音效.mp3')
                self.state = 'end'
                self.player_manage.score = 0
                self.player_manage.clear()
                self.enemy_manage.clear()

        for enemy in self.enemy_manage.enemy_group.sprites():
            # 玩家碰撞子弹
            player_enemy_bullet_groupcollied = pygame.sprite.groupcollide(self.player_manage.player_group,
                                                                          enemy.bullet_group, False, True)
            if player_enemy_bullet_groupcollied:
                self.player_manage.player_sprite.hp -= 1
                if self.player_manage.player_sprite.hp <= 0:
                    self.player_manage.clear()

                    self.state = 'end'
                    self.enemy_manage.clear()
                    AudioManage.play_sound('sound/玩家死亡音效.mp3')

        #  吃道具
        player_prop_collider = pygame.sprite.groupcollide(self.player_manage.player_group, self.pro_mange.prop_group,
                                                          False, True)
        if player_prop_collider:
            for props in player_prop_collider.values():
                for prop in props:
                    print(prop.type, "吃到道具")
                    if prop.type == 1:
                        AudioManage.play_sound('sound/碰撞音效.mp3')
                        self.enemy_manage.clear()
                    if prop.type == 2:
                        AudioManage.play_sound('sound/道具声音.mp3')
                        self.player_manage.player_sprite.super_bullet_num = 10
                    if prop.type == 3:
                        AudioManage.play_sound('sound/道具声音.mp3')
                        self.player_manage.player_sprite.hp += 1
                        if self.player_manage.player_sprite.hp > self.player_manage.player_sprite.max_hp:
                            self.player_manage.player_sprite.hp = self.player_manage.player_sprite.max_hp
        # 玩家子弹碰撞敌人子弹
        for z in self.enemy_manage.enemy_group.sprites():
            if pygame.sprite.groupcollide(self.player_manage.player_sprite.bullet_group,z.bullet_group,True,True):
                AudioManage.play_sound('sound/射击声音.mp3')
            #  玩家射击敌人
        player_bullet_enemy_collider = pygame.sprite.groupcollide(self.player_manage.player_sprite.bullet_group,
                                                                  self.enemy_manage.enemy_group, True, False)
        if player_bullet_enemy_collider:
            for enemeys in player_bullet_enemy_collider.values():
                AudioManage.play_sound('sound/射击声音.mp3')
                for enemy in enemeys:
                    enemy.hp -= 1
                    if enemy.hp <= 0:
                        enemy.is_alive = False
                        # enemy.is_alive = False
                        # print("打死了一个敌人")
                        # enemy.kill()
                        self.player_manage.score += 1

    def run(self):
        while True:
            self.value.tick(24)
            self.check_event()
            self.bg_manage.update()
            self.ui_manage.update()

            if self.state == 'gaming':
                self.player_manage.update()
                self.enemy_manage.update()
                self.pro_mange.update()
                self.collide()

            pygame.display.flip()


gm = GameManage()
gm.run()

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值