项目实例:飞机大战(游戏代码分析)

本文详细分析了飞机大战游戏的实现,包括游戏循环的关键步骤:设置刷新帧率、事件监听、碰撞检测、更新精灵组以及屏幕显示。重点关注pygame中的精灵和精灵组管理,如背景精灵、敌人飞机精灵、子弹精灵和英雄精灵的创建。文章介绍了如何进行碰撞检测,使用`pygame.sprite.groupcollide()`和`pygame.sprite.spritecollide()`方法,并讨论了何时及为何使用`kill()`方法。此外,还阐述了游戏的全局变量和主程序的结构。
摘要由CSDN通过智能技术生成

首先我们需要明确我们的目标:

分析一下飞机大战的各自组成部分;

 

在游戏循环的部分我们需要:
        # 1. 设置刷新帧率,为了让我们看到动画效果
       
        # 2. 事件监听,检测我们按下左右键或者其他键的时候做出相关的反映
        
        # 3. 碰撞检测,需要检测子弹是否碰到了敌人的飞机,检测我方飞机是否碰到敌人飞机,然后做出相关的动作
        
        # 4. 更新精灵组,经过了事件监听等,比如移动飞机位置、还有敌人的飞机向下移动,等需要更新各个精灵组。
     
        # 5. 更新屏幕显示

 

关于精灵和精灵组:

首先我们要明确:我们需要重写精灵。

class GameSprite(pygame.sprite.Sprite):
    def __init__(self, image_name, speed=1):
        super().__init__()
        self.image = pygame.image.load(image_name)
        self.rect = self.image.get_rect()
        self.speed = speed

    def update(self, *args):
        self.rect.y += self.speed

 

然后我们需要创建如下精灵类:

背景精灵类:

为了实现让背景有滚动的效果,我们用两张背景图片

 

下面是背景精灵类的代码:

如果设置的是在上面的图片的话, 在初始化的过程中需要把图片的位置修改一下,所以 is_alt是用来判断的

(SCREEN_RECT)是创建的屏幕大小

SCREEN_RECT = pygame.Rect(0, 0, 480, 700)

# 创建游戏背景类
class BackGround(GameSprite):
    def __init__(self, is_alt=False):
        image_name = "./images/background.png"
        super().__init__(image_name)
        if is_alt:
            self.rect.y = -self.rect.height

    def update(self, *args):
        # 继承父类的update(),保证往下一点点移动
        super().update()
        # 扩展父类的方法,当 当前背景图像移动到屏幕底端时,更新当前背景图像的位置
        if self.rect.y >= SCREEN_RECT.height:
            self.rect.y = -SCREEN_RECT.height

 

然后我们需要创建敌人飞机的精灵类:

代码如下࿱

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值