面向对象版本小游戏制作流程(飞机大战)

前言

       本次设计为了使飞机大战游戏具有更加丰富的功能,基于面向对象和面向过程的方法,使用Python编程语言提供资源结构,以Pygame模块对游戏进行研发,提出了飞机大战游戏开发方案。通过各种优化调整,实现了飞机的飞行移动、击落,计分等功能,实现了飞机大战的开发,增加游戏体验。


代码实现

引入模块

import random
import sys
import pygame


 

 1.游戏框架

import random
import sys

import pygame


class Sprite(pygame.sprite.Sprite):
    """
    精灵父类
    """

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


class EnemySprite(Sprite):

    def __init__(self, name):
        super().__init__(name)

    def update(self):
        pass


class EnemyManage:
    def __init__(self):
        pass

    def generate(self):
        pass

    def clear(self):
        pass

    def update(self):
        pass


class PlayerSprite(Sprite):
    """"""

    # 玩家精灵类
    def __init__(self, name):
        super().__init__(name)

    def update(self):
        pass


class PlayerManage:
    """
    玩家管理类
    """

    def __init__(self):
        pass

    def born(self):
        # 出生
        pass

    def die(self):
        # 死亡
        pass

    def update(self):
        # 更新
        pass


class UiSprite(Sprite):
    """
    ui管理精灵类
    """

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

    def update(self):
        pass


class UiManage:
    """
    ui管理类
    """

    def __init__(self):
        pass

    def update(self):
        pass


class BGSprite(Sprite):
    """
    背景精灵类
    """

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

    def update(self):
        pass


class BGManage:
    """
    背景管理类
    """

    def __init__(self):
        pass

    def update(self):
        pass


class GameManage:
    """
    游戏管理类
    """

    def __init__(self):
        pass

    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()
            pygame.display.flip()


gm = GameManage()
gm.run()

基本套路,一个管理类一个精灵类


2.创建一个游戏管理类

class GameManage:
    def __init__(self):
        pygame.init()  # 初始化
        self.screen = pygame.display.set_mode((480, 700))  # 添加一个屏幕
        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()
            pygame.display.flip()

 

 3.创建一个背景类实现背景的滚动

class BGSprite(Sprite):
    def __init__(self, name, top_left):
        super().__init__(name)
        self.rect.topleft = top_left

    def update(self):
        self.rect.top += 5  # 速度
        if self.rect.top == 700:  
            self.rect.bottom = 0


class BGManage:
    def __init__(self, gm):
        self.gm = gm
        self.bg_group = pygame.sprite.Group()
        BGSprite("images/background.png", (0, 0)).add(self.bg_group)
        BGSprite("images/background.png", (0, -700)).add(self.bg_group)

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

 

4.创建一个UI类来管理游戏状态

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

    def update(self):
        pass


class UiManage:
    def __init__(self, gm):
        self.gm = gm
        # 计分字体
        self.fond = pygame.font.Font("font/font.ttf", 24)
        self.fond_surface = self.fond.render(f"score{0}", True, (0, 127, 0))
        # 开始按钮
        self.begin_group = pygame.sprite.Group()
        self.begin_btn = UiSprite("images/begin_btn.png", (240, 250))
        self.begin_btn.add(self.begin_group)
        # 重新开始按钮
        self.again_group = pygame.sprite.Group()
        self.again = UiSprite("images/again.png", (240, 250))
        self.again.add(self.again_group)
        # 结束按钮
        self.over_group = pygame.sprite.Group()
        self.game_over = UiSprite("images/gameover.png", (240, 450))
        self.game_over.add(self.over_group)

    def update(self):
        # 游戏开始
        if self.gm.state == "ready":
            self.begin_group.draw(self.gm.screen)
            self.over_group.draw(self.gm.screen)
            # 点击事件
            if Util.check_click(self.game_over):
                Audio.check_sound("sound/click.mp3")
                pygame.quit()
                sys.exit()
            if Util.check_click(self.begin_btn):
                self.gm.state = "gaming"  # 游戏状态

        elif self.gm.state == "gaming":
            self.fond_surface = self.fond.render(f"score{self.gm.player_manage.score}", True, (0, 127, 0))
            self.gm.screen.blit(self.fond_surface, (380, 20))
            
        elif self.gm.state == "end":
            self.again_group.draw(self.gm.screen)
            self.over_group.draw(self.gm.screen)
            if Util.check_click(self.game_over):
                pygame.quit()
                sys.exit()
            if Util.check_click(self.again):
                self.gm.state = "gaming"

 

 1需要一个点击事件类,实现进入游戏退出游戏

class Util:
    """
    工具类(点击事件)
    """
    @staticmethod
    def check_click(sprite):
        if pygame.mouse.get_pressed()[0]:
            if sprite.rect.collidepoint(pygame.mouse.get_pos()):
                return True
        return False

 

5.创建一个玩家类实现玩家移动

class PlayerSprite(Sprite):
    def __init__(self, name, center, gm):
        super().__init__(name)
        self.gm = gm
        self.rect.center = center

    def update(self):
        # 实现玩家移动
        pressed = pygame.key.get_pressed()
        if pressed[pygame.K_LEFT] and self.rect.centerx >= 50:
            self.rect.centerx -= 15
        if pressed[pygame.K_RIGHT] and self.rect.centerx < 420:
            self.rect.centerx += 15
        if pressed[pygame.K_UP] and self.rect.centery > 50:
            self.rect.centery -= 15
        if pressed[pygame.K_DOWN] and self.rect.centery < 620:
            self.rect.centery += 15
        


class PlayerManage:
    def __init__(self, gm):
        self.gm = gm
        # 创建精灵组
        self.player_group = pygame.sprite.Group()

    def born(self):
        # 出生
        self.player = PlayerSprite("images/me1.png", (240, 600), 10)
        self.player.add(self.player_group)

    def die(self):
        # 死亡清除精灵组
        self.player_group.empty()

    def update(self):
        # 更新玩家精灵组
        self.player_group.update()
        self.player_group.draw(self.gm.screen)

 1.创建子弹精灵来实现玩家攻击

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

    def update(self):
        self.rect.centery -= self.speed
        if self.rect.centery <= 0 or self.rect.centery > 600:
            self.kill()

        加入玩家精灵组实现玩家发射子弹


 

class PlayerSprite(Sprite):
    def __init__(self, name, center, hp, gm):
        super().__init__(name)
        self.gm = gm
        self.rect.center = center
        self.super_bullet = 0
        self.time_count = 2
        self.bullet_group = pygame.sprite.Group()

    def shoot(self):
        BulletSprite("images/bullet1.png", (self.rect.centerx, self.rect.centery - 50), 10).add(self.bullet_group)

    def shoot2(self):
        for i in range(1, 6):
            BulletSprite("images/img.png", (self.rect.centerx - 60 + i * 20, self.rect.centery - 50), 10).add(
                self.bullet_group)


    def update(self):

        self.time_count -= 0.3
        if self.time_count < 0:
            self.time_count = 2
            if self.super_bullet > 0:
                self.super_bullet -= 1
                self.shoot2()
            else:
                self.shoot()

 

6.创建敌人类实现敌人攻击,移动

class EnemySprite(Sprite):
    
    def __init__(self, name, speed, hp, gm):
        super().__init__(name)
        self.gm = gm
        self.hp = hp
        self.max_hp = hp
        self.rect.left = random.randint(0, 480 - self.rect.width)  # 随机位置出现
        self.rect.bottom = 0  # 速度
        self.speed = speed
        self.time_count = 2
        self.bullet_group = pygame.sprite.Group()
        

    def shoot(self):
        # 子弹
        BulletSprite("images/bullet2.png", (self.rect.centerx, self.rect.centery + 20), -16).add(self.bullet_group)

    def update(self):
        self.rect.centery += self.speed
        self.time_count -= 0.1
        if self.time_count <= 0:
            self.time_count = 2
            self.shoot()
        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
        self.die_group = pygame.sprite.Group()

    def generate(self):
        # 随机生成敌人
        value = random.random()
        if value > 0.9:
            EnemySprite("images/enemy3_n2.png", 4, 5, self.gm).add(self.enemy_group)

        elif value > 0.6:
            EnemySprite("images/enemy2.png", 6, 3, self.gm).add(self.enemy_group)

        else:
            EnemySprite("images/enemy1.png", 8, 1, self.gm).add(self.enemy_group)

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

    def update(self):
        # 生成敌人
        if self.gm.state == "gaming":
            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)

 7.创建道具类,给玩家提供补给

class PropSprite(Sprite):
    def __init__(self, name, speed, prop):
        super().__init__(name)
        self.prop = prop
        self.speed = speed
        self.rect.left = random.randint(0, 400)
        self.rect.bottom = 0

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


class PropManage:
    def __init__(self, gm):
        self.gm = gm
        self.time_count = 8
        self.bomb_count = 0
        self.prop_group = pygame.sprite.Group()

    def generate(self):

        value = random.random()
        if value > 0.8:
            PropSprite("images/life.png", 4, 1).add(self.prop_group)
        elif value > 0.6:
            PropSprite("images/bomb_supply.png", 8, 2).add(self.prop_group)
        else:
            PropSprite("images/bullet_supply.png", 9, 3).add(self.prop_group)

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

    def update(self):
        if self.gm.state == "gaming":
            self.time_count -= 0.1
            if self.time_count <= 0:
                self.time_count = 8
                self.generate()
        self.prop_group.update()
        self.prop_group.draw(self.gm.screen)


 

 8.创建一个动画混合类和一个死亡动画混合类,实现玩家动画 和敌人死亡画面

class AnimationMixin:
    normal_images = []

    def __init__(self):
        self.images2 = [pygame.image.load(name) for name in self.normal_images]
        self.current = 0

    def normal_update(self):
        self.current += 1
        if self.current == len(self.images2) * 5:
            self.current = 0
        self.image = self.images2[self.current // 5]


class DieAnimationMixin:
    die_images = []

    def __init__(self):
        self.images1 = [pygame.image.load(name) for name in self.die_images]
        self.current = 0
        if not self.die_images:
            raise Exception("die_images 为空")

    def die_update(self):
        self.current += 1
        if self.current < len(self.images1) * 3:
            self.image = self.images1[self.current // 3]
        else:
            self.kill()

总体代码

import random
import sys

import pygame


class Util:
    @staticmethod
    def check_click(sprite):
        if pygame.mouse.get_pressed()[0]:
            if sprite.rect.collidepoint(pygame.mouse.get_pos()):
                return True
        return False


class Audio:
    @staticmethod
    def check_sound(sprite):
        sound = pygame.mixer.Sound(sprite)
        sound.play()

    @staticmethod
    def check_mics():
        pygame.mixer.music.load("sound/game_music.ogg")
        pygame.mixer.music.play()


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


class AnimationMixin:
    normal_images = []

    def __init__(self):
        self.images2 = [pygame.image.load(name) for name in self.normal_images]
        self.current = 0

    def normal_update(self):
        self.current += 1
        if self.current == len(self.images2) * 5:
            self.current = 0
        self.image = self.images2[self.current // 5]


class DieAnimationMixin:
    die_images = []

    def __init__(self):
        self.images1 = [pygame.image.load(name) for name in self.die_images]
        self.current = 0
        if not self.die_images:
            raise Exception("die_images 为空")

    def die_update(self):
        self.current += 1
        if self.current < len(self.images1) * 3:
            self.image = self.images1[self.current // 3]
        else:
            self.kill()


class PropSprite(Sprite):
    def __init__(self, name, speed, prop):
        super().__init__(name)
        self.prop = prop
        self.speed = speed
        self.rect.left = random.randint(0, 400)
        self.rect.bottom = 0

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


class PropManage:
    def __init__(self, gm):
        self.gm = gm
        self.time_count = 8
        self.bomb_count = 0
        self.prop_group = pygame.sprite.Group()

    def generate(self):

        value = random.random()
        if value > 0.8:
            PropSprite("images/life.png", 4, 1).add(self.prop_group)
        elif value > 0.6:
            PropSprite("images/bomb_supply.png", 8, 2).add(self.prop_group)
        else:
            PropSprite("images/bullet_supply.png", 9, 3).add(self.prop_group)

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

    def update(self):
        if self.gm.state == "gaming":
            self.time_count -= 0.1
            if self.time_count <= 0:
                self.time_count = 8
                self.generate()
        self.prop_group.update()
        self.prop_group.draw(self.gm.screen)


class EnemySprite(Sprite, DieAnimationMixin):
    die_images = [f"images/enemy1_down{i}.png" for i in range(1, 5)]

    def __init__(self, name, speed, hp, gm):
        super().__init__(name)
        DieAnimationMixin.__init__(self)
        self.gm = gm
        self.hp = hp
        self.max_hp = hp
        self.rect.left = random.randint(0, 480 - self.rect.width)
        self.rect.bottom = 0
        self.speed = speed
        self.time_count = 2
        self.bullet_group = pygame.sprite.Group()
        self.enemy_alive = True

    def shoot(self):
        BulletSprite("images/bullet2.png", (self.rect.centerx, self.rect.centery + 20), -16).add(self.bullet_group)

    def draw_hp(self):
        pygame.draw.rect(self.gm.screen, (127, 127, 127), (self.rect.centerx - 25, self.rect.top, 50, 8))
        pygame.draw.rect(self.gm.screen, (0, 127, 0),
                         (self.rect.centerx - 25, self.rect.top, self.hp / self.max_hp * 50, 8))

    def is_alive(self):
        if self.enemy_alive:
            pass
        else:
            self.die_update()
            Audio.check_sound("sound/enemy1_down.wav")

    def update(self):
        self.is_alive()
        self.draw_hp()
        self.rect.centery += self.speed
        self.time_count -= 0.1
        if self.time_count <= 0:
            self.time_count = 2
            self.shoot()
        self.bullet_group.update()
        self.bullet_group.draw(self.gm.screen)


class MidSizeEnemySprite(EnemySprite):
    die_images = [f"images/enemy2_down{i}.png" for i in range(1, 5)]


class BossEnemySpriter(EnemySprite, AnimationMixin, DieAnimationMixin):
    normal_images = ["images/enemy3_n1.png", "images/enemy3_n2.png"]
    die_images = [f"images/enemy3_down{i}.png" for i in range(1, 7)]

    def __init__(self, name, speed, hp, gm):
        super().__init__(name, speed, hp, gm)
        AnimationMixin.__init__(self)
        DieAnimationMixin.__init__(self)

    def is_die_alive(self):
        if self.enemy_alive:
            self.normal_update()
        else:
            self.die_update()
            Audio.check_sound("sound/enemy2_down.wav")

    def update(self):
        EnemySprite.update(self)
        self.is_die_alive()


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

    def generate(self):
        value = random.random()
        if value > 0.9:
            BossEnemySpriter("images/enemy3_n2.png", 4, 5, self.gm).add(self.enemy_group)

        elif value > 0.6:
            MidSizeEnemySprite("images/enemy2.png", 6, 3, self.gm).add(self.enemy_group)

        else:
            EnemySprite("images/enemy1.png", 8, 1, self.gm).add(self.enemy_group)

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

    def update(self):
        if self.gm.state == "gaming":
            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 BulletSprite(Sprite):
    def __init__(self, name, center, speed):
        super().__init__(name)
        self.rect.center = center
        self.speed = speed

    def update(self):
        self.rect.centery -= self.speed
        if self.rect.centery <= 0 or self.rect.centery > 600:
            self.kill()


class PlayerSprite(Sprite, AnimationMixin):
    normal_images = ["images/me1.png", "images/me2.png"]

    def __init__(self, name, center, hp, gm):
        super().__init__(name)
        AnimationMixin.__init__(self)
        self.gm = gm
        self.hp = hp
        self.max_hp = 10
        self.rect.center = center
        self.super_bullet = 0
        self.time_count = 2
        self.bullet_group = pygame.sprite.Group()

    def shoot(self):
        BulletSprite("images/bullet1.png", (self.rect.centerx, self.rect.centery - 50), 10).add(self.bullet_group)
        Audio.check_sound("sound/bullet.wav")

    def shoot2(self):
        for i in range(1, 6):
            BulletSprite("images/img.png", (self.rect.centerx - 60 + i * 20, self.rect.centery - 50), 10).add(
                self.bullet_group)
            Audio.check_sound("sound/bullet.wav")

    def draw_hp(self):
        pygame.draw.rect(self.gm.screen, (127, 127, 127), (self.rect.centerx - 25, self.rect.bottom, 50, 8))
        pygame.draw.rect(self.gm.screen, (0, 127, 0),
                         (self.rect.centerx - 25, self.rect.bottom, self.hp / self.max_hp * 50, 8))

    def update(self):
        super().update()
        self.normal_update()
        self.draw_hp()
        self.time_count -= 0.3
        if self.time_count < 0:
            self.time_count = 2
            if self.super_bullet > 0:
                self.super_bullet -= 1
                self.shoot2()
            else:
                self.shoot()

        pressed = pygame.key.get_pressed()
        if pressed[pygame.K_LEFT] and self.rect.centerx >= 50:
            self.rect.centerx -= 15
        if pressed[pygame.K_RIGHT] and self.rect.centerx < 420:
            self.rect.centerx += 15
        if pressed[pygame.K_UP] and self.rect.centery > 50:
            self.rect.centery -= 15
        if pressed[pygame.K_DOWN] and self.rect.centery < 620:
            self.rect.centery += 15
        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()

    def born(self):
        self.score = 0
        self.player = PlayerSprite("images/me1.png", (240, 600), 10, self.gm, )
        self.player.add(self.player_group)

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

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


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

    def update(self):
        pass


class UiManage:
    def __init__(self, gm):
        self.gm = gm
        self.fond = pygame.font.Font("font/font.ttf", 24)
        self.fond_surface = self.fond.render(f"score{0}", True, (0, 127, 0))
        # 开始按钮
        self.begin_group = pygame.sprite.Group()
        self.begin_btn = UiSprite("images/begin_btn.png", (240, 250))
        self.begin_btn.add(self.begin_group)
        # 重新开始按钮
        self.again_group = pygame.sprite.Group()
        self.again = UiSprite("images/again.png", (240, 250))
        self.again.add(self.again_group)
        # 借宿按钮
        self.over_group = pygame.sprite.Group()
        self.game_over = UiSprite("images/gameover.png", (240, 450))
        self.game_over.add(self.over_group)
        Audio.check_mics()

        self.bomb_surface = self.fond.render(f":{0}", True, (0, 127, 0))
        self.bomb_image = pygame.image.load("images/bomb.png")


    def update(self):
        # 游戏开始
        if self.gm.state == "ready":
            self.begin_group.draw(self.gm.screen)
            self.over_group.draw(self.gm.screen)
            # 点击事件
            if Util.check_click(self.game_over):
                Audio.check_sound("sound/click.mp3")
                pygame.quit()
                sys.exit()
            if Util.check_click(self.begin_btn):
                self.gm.state = "gaming"  # 游戏状态
                self.gm.player_manage.born()
                self.gm.enemy_manage.generate()
                self.gm.prop_manage.generate()
                Audio.check_sound("sound/click.mp3")

        elif self.gm.state == "gaming":
            self.fond_surface = self.fond.render(f"score{self.gm.player_manage.score}", True, (0, 127, 0))
            self.gm.screen.blit(self.fond_surface, (380, 20))
            self.bomb_surface = self.fond.render(f":{self.gm.prop_manage.bomb_count}", True, (0, 127, 0))
            self.gm.screen.blit(self.bomb_image,(10, 620))
            self.gm.screen.blit(self.bomb_surface, (80, 635))
        elif self.gm.state == "end":
            self.again_group.draw(self.gm.screen)
            self.gm.player_manage.die()
            self.gm.enemy_manage.clear()
            self.gm.prop_manage.clear()
            self.over_group.draw(self.gm.screen)
            if Util.check_click(self.game_over):
                pygame.quit()
                sys.exit()
            if Util.check_click(self.again):
                self.gm.state = "gaming"
                self.gm.player_manage.born()
                self.gm.enemy_manage.generate()
                self.gm.prop_manage.generate()
                Audio.check_sound("sound/click.mp3")


class BGSprite(Sprite):
    def __init__(self, name, top_left):
        super().__init__(name)
        self.rect.topleft = top_left

    def update(self):
        self.rect.top += 5
        if self.rect.top == 700:
            self.rect.bottom = 0


class BGManage:
    def __init__(self, gm):
        self.gm = gm
        self.bg_group = pygame.sprite.Group()
        BGSprite("images/background.png", (0, 0)).add(self.bg_group)
        BGSprite("images/background.png", (0, -700)).add(self.bg_group)

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


class GameManage:
    def __init__(self):
        pygame.init()
        self.state = "ready"
        self.screen = pygame.display.set_mode((480, 700))
        pygame.display.set_caption("飞机大战")
        self.clock = pygame.time.Clock()
        self.bg_manage = BGManage(self)
        self.ui_manage = UiManage(self)
        self.player_manage = PlayerManage(self)
        self.enemy_manage = EnemyManage(self)
        self.prop_manage = PropManage(self)

    def check_event(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            if event.type == pygame.KEYUP:
                if event.key == pygame.K_SPACE:
                    if self.prop_manage.bomb_count >= 1:
                        self.prop_manage.bomb_count -= 1
                        for enemys in self.enemy_manage.enemy_group.sprites():
                            enemys.kill()
                            Audio.check_sound("sound/use_bomb.wav")



    def collide_event(self):
        for player in self.player_manage.player_group.sprites():
            player_bullet_enemy_collide = pygame.sprite.groupcollide(player.bullet_group,
                                                                     self.enemy_manage.enemy_group, True, False)
            if player_bullet_enemy_collide:
                for enemys in player_bullet_enemy_collide.values():
                    for enemy in enemys:

                        if enemy.max_hp <= 1:
                            enemy.hp -= 1
                            if enemy.hp <= 0:
                                if enemy.enemy_alive:
                                    self.player_manage.score += 1
                                enemy.enemy_alive = False

                        elif enemy.max_hp <= 3:
                            enemy.hp -= 1
                            if enemy.hp <= 0:
                                if enemy.enemy_alive:
                                    self.player_manage.score += 2
                                enemy.enemy_alive = False
                        elif enemy.max_hp <= 5:
                            enemy.hp -= 1
                            if enemy.hp <= 0:
                                if enemy.enemy_alive:
                                    self.player_manage.score += 3
                                enemy.enemy_alive = False

                        print("杀死一个")
        player_prop_collide = pygame.sprite.groupcollide(self.player_manage.player_group, self.prop_manage.prop_group,
                                                         False, True)
        if player_prop_collide:
            for props in player_prop_collide.values():
                for prop in props:
                    if prop.prop == 1:
                        Audio.check_sound("sound/upgrade.wav")
                        self.player_manage.player.hp += 1
                    if prop.prop == 3:
                        Audio.check_sound("sound/get_bullet.wav")
                        self.player_manage.player.super_bullet = 20
                    if prop.prop == 2:
                        Audio.check_sound("sound/get_bomb.wav")
                        self.prop_manage.bomb_count += 1



        for enemys in self.enemy_manage.enemy_group.sprites():
            player_enemy_bullet_collide = pygame.sprite.groupcollide(self.player_manage.player_group,
                                                                     enemys.bullet_group, False, True)
            if player_enemy_bullet_collide:
                self.player_manage.player.hp -= 1
                if self.player_manage.player.hp <= 0:
                    # self.state = "end"
                    self.player_manage.player.hp = self.player_manage.player.max_hp
                    Audio.check_sound("sound/me_down.wav")
        if pygame.sprite.groupcollide(self.player_manage.player_group, self.enemy_manage.enemy_group, False, True):
            self.player_manage.player.hp -= 1
            if self.player_manage.player.hp <= 0:
                # self.state = "end"
                self.player_manage.player.hp = self.player_manage.player.max_hp
                Audio.check_sound("sound/me_down.wav")
            # self.state = "end"

    def run(self):
        while True:
            self.clock.tick(24)
            self.check_event()
            self.collide_event()
            self.bg_manage.update()
            self.ui_manage.update()
            self.player_manage.update()
            self.enemy_manage.update()
            self.player_manage.update()
            self.prop_manage.update()
            pygame.display.flip()


gm = GameManage()
gm.run()

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值