飞机大战成品 2 (附源代码)

本文介绍了使用Python的pygame库开发的飞机大战游戏,包括安装pygame库、设置游戏定时器、子弹发射机制、游戏精灵的创建,特别是敌机和英雄飞机的逻辑处理。
摘要由CSDN通过智能技术生成

导入第三方库

 pip install pygame 1.9.6

import pygame
import random

 定时器以及子弹

ENEMY_EVENT = pygame.USEREVENT  # 敌机定时器常量
FIRE = pygame.USEREVENT + 1  # 子弹类

游戏精灵 以及背景精灵

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()  # (0,0, 480, 700)
        self.speed = speed

    def update(self, *args):
        # 在屏幕的垂直方向向下移动
        self.rect.y += self.speed
class Background(GameSprite):
    def __init__(self, is_alt=False):
        super().__init__('./images/background.png')
        # is_alt判断是否是交替图像,如果不是,需要设置初识位置
        # (也就是不能让两张背景重叠)
        if is_alt:
            self.rect.y = -self.rect.height

    def update(self):
        # 调用父类方法实现
        super().update()
        # 判断是否移出屏幕,如果移出,将图像设置到屏幕上方
        if self.rect.y >= 700:
            self.rect.y = -self.rect.height

写敌机飞出屏幕 删除 以及被击中

class Enemy(GameSprite):

    # 1.调用父类方法,创建敌机精灵,同事指定敌机图片
    def __init__(self):
        super().__init__('./images/enemy1.png')
        # 2.指定敌机的初始化速度
        self.speed = random.randint(1, 4)  # 随机的选一个速度
        # 3.指定敌机的随机位置
        self.rect.bottom = 0
        max_x = 480 - self.rect.width
        self.rect.x = random.randint(0, max_x)

    def update(self):
        super().update()
        # 判断是否飞出屏幕
        if self.rect.y >= 700:
            print('飞出屏幕,从精灵组删除')
            self.kill()  # 可以将精灵从所在的精灵组中删除

    # __del__ 内置方法会在对象被销毁前调用,可以用于判断对象是否被销毁

    def __del__(self):
        print('敌机挂了%s' % self.rect)

写英雄飞机

class Hero(GameSprite):
    def __init__(self):
        super().__init__('./images/me1.png')
        # 初始化 英雄位置
        self.rect.y = 700 - self.rect.height - 30  # 整个屏幕的高 剪去 图片高度  -30 距离底部30
        self.rect.x = 240 - self.rect.width // 2
        # 创建子弹精灵组
        self.bullet_group = pygame.sprite.Group()

    # def update(self):
    #     self.rect.x = self.speed
        # if self.rect.x < 0:
        #     self.rect.x = 0
        # elif self.rect.x > 480 - self.rect.width:
        #     self.rect.x = 480 - self.rect.width
        # # # super().update()
        # self.rect.y += self.speed
        # if self.rect.y < 0:
        #     self.rect.y = 0
        # elif self.rect.y > 700 - self.rect.height:
        #     self.rect.y = 700 - self.rect.height

    def fire(self):
        print('发射子弹')
        for i in range(3):
            # 创建子弹精灵
            bullet = Bullet()
            # 设置精灵的位置
            bullet.rect.bottom = self.rect.y - i*20
            bullet.rect.centerx = self.rect.centerx
            # 将子弹添加到精灵组
            self.bullet_group.add(bullet)


# 子弹需求

# 子弹从英雄飞机的正上方发射 直线飞行
# 飞出屏幕之后从精灵组中删除
# 初始化方法  子弹图片 初始速度 -2
# update()  判断是否飞出屏幕,如果是,从精灵组删除
class Bullet(GameSprite):
    def __init__(self):
        # 调用父类方法 设置子弹图片,设置初速速度
        super().__init__('./images/bullet1.png', -2)

    def update(self):
        super().update()
        # 判断是否飞出屏幕
        if self.rect.bottom < 0:
            self.kill()

    def __del__(self):
        print('子弹被销毁%s' % self.rect)

# 捕捉 按键控制飞机左右移动
# 通过pygame.key.get_pressed() 返回所有按键元祖
# 通过键盘常量 判断元祖中某个键是否被按下 ,如果按下,对应数值为1
# if keypressed [pygame.K_RIGHT]: # 判断 向右的键是否被按下

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值