0318-SPACE 0318-SPACE

Python实现飞机大战小游戏(工具包文件)


作者: LLL 浏览量:544 阅读量:1 发布:2021年6月26日 21:42 更新:2021年6月26日 21:42 飞机大战 game 编辑文章 删除文章
预计阅读时长:2分16秒
import pygame
import random

# 定义屏幕常量
# SCREEN_RECT = pygame.Rect(0, 0, 1200, 1080)
SCREEN_RECT = pygame.Rect(0, 0, 1200, 800)
# 定义刷新的帧率的常量
FRAME_PER_SEC = 60
# 创建敌机的定时常量
CREAT_ENEMY_EVENT = pygame.USEREVENT

# 英雄发射子弹事件
HERO_FIRE_EVENT = pygame.USEREVENT + 1

# 背景音乐常量
BGM = pygame.USEREVENT + 2


class GameSprite(pygame.sprite.Sprite):
"""飞机大战的游戏精灵"""

def __init__(self, image_name, speed=1):
# 当某一个子类的父类不是object基类时,一定要在初始化
# 方法中,主动调用父类的初始化方法
# 调用父类初始化方法
super().__init__()

# 定义对象的属性
# 图像 从图像文件中加载数据,并传给image
self.image = pygame.image.load(image_name)
# 位置 调用get_rect()方法,返回位置信息,并用变量rect记录
self.rect = self.image.get_rect()
# 速度 默认速度为1
self.speed = speed

def update(self):
# 在屏幕的垂直方向移动
self.rect.y += self.speed


class Background(GameSprite): # 继承自精灵类
"""游戏背景精灵"""

def __init__(self, is_alt=False):

# 1.调用父类方法实现精灵创建
super().__init__("./images/background2.jpg")

# 2判断是否为交替图像,如果是,需要设置初始位置
if is_alt:
self.rect.y = -self.rect.height

# 重写父类的方法
def update(self):

# 1.调用父类的方法实现(垂直方向的移动)
super().update()

# 2.判断是否移出屏幕,如果移出,将图像设置在屏幕的正上方
if self.rect.y >= SCREEN_RECT.height:
self.rect.y = -self.rect.height


# 定义Enemy类
class Enemy(GameSprite):
"""敌机精灵"""

def __init__(self):

# self.image = pygame.image.load(path)

# 1.调用父类方法,创建敌机精灵,同时指定敌机图片

a = random.randint(0, 2)

if a == 0:
super().__init__("./images/enemy1.png")

elif a == 1:
super().__init__("./images/enemy2.png")

else:
super().__init__("./images/enemy3.png")

# super().__init__("enemies_list[0]")

# super().__init__("./images/enemy2.png")

# 2.指定敌机的初始速度 1~3
self.speed = random.randint(1, 4)

# 3.指定敌机的初始位置
self.rect.bottom = 0
self.rect.x = random.randint(0, SCREEN_RECT.width - self.rect.width)

def update(self):

# 1.调用父类的方法,保持垂直方向的飞行
super().update()

# 2判断是否飞出屏幕,如果飞出屏幕,kill该精灵
if self.rect.y > SCREEN_RECT.height:
# print("删除该敌机精灵")
# 删除该敌机,释放内存
self.kill()

def __del__(self):
# print("敌机挂了%s"%self.rect)
pass


class Hero(GameSprite):
"""英雄精灵"""

def __init__(self):

# 1.调用父类方法,设置image,speed
super().__init__("./images/hero.png", 0)

# 2.英雄的初始位置
self.rect.centerx = SCREEN_RECT.centerx
self.rect.bottom = SCREEN_RECT.bottom - 120

# 创建子弹的精灵组
self.bullets = pygame.sprite.Group()

def update(self):
"""控制英雄不能离开屏幕"""

if self.rect.x < 0:
self.rect.x = 0

elif self.rect.right > SCREEN_RECT.right:
self.rect.right = SCREEN_RECT.right

elif self.rect.y <= 0:
self.rect.y = 0

elif self.rect.y >= SCREEN_RECT.height - self.rect.height:
self.rect.y = SCREEN_RECT.height - self.rect.height

def fire(self):
# print("发射子弹")

for i in (0, 1, 2):
# 一次性发射3颗子弹
# 1.创建子弹精灵
bullet = Bullet()

# 设置子弹的位置
bullet.rect.bottom = self.rect.y - i * 20
bullet.rect.centerx = self.rect.centerx

# 把子弹精灵添加到子弹精灵组
self.bullets.add(bullet)


class Bullet(GameSprite):
"""子弹精灵"""

def __init__(self):

# 调用父类方法,设置子弹的图片,速度

super().__init__("./images/bullet1.png", -6)
keys_pressed = pygame.key.get_pressed()
if keys_pressed[pygame.K_l]: # 大招:
super().__init__("./images/bullet2-4.png", -6)

def update(self):

# 调用父类方法,让子弹沿着垂直方向飞行
super().update()

# 判断子弹是否飞出屏幕
# 删除子弹
if self.rect.bottom < 0:
self.kill()

def __del__(self):
pass
# print("子弹被销毁")



 {[collection_status]}  {[likes]}

有什么想对作者说的吗?

发 表
{[ comment.user.username]} {[comment.time]}
删除
{[comment.content]}
热文排行榜
日热榜 周热榜 月热榜

标签
golang 个人介绍 开发环境 最大之数组合 gui mro nginx 函数模板 清单 并发编程 小细节 matlab 图像处理 oracle python leetcode 多线程 c++ 人工智能 插入排序 seaborn 爬虫学习 动态规划 负载均衡 数学模型 虚拟环境 字符集 js 异常 面向对象 多态 异或 冒泡排序 循环语句 容器 Django 高级变量类型 数据库 单调栈 java基础 web aiohttp bug 基础 形态学操作 最短路径 闭包 桶排序 with tcp 数字图像 双指针 爬虫 算法 OpenCV 开发 开机自启 else 选择排序 装饰器 排序算法 HTM 数据处理 测试 二分法 c# python基础 存储异常 java 学生成绩管理系统 ER图 笔记 GUI编程 二叉树 序列 git 梯度计算 数据结构 多进程 table 建模 数据库编程 巩固 三数之和 实验报告 可视化 数据分析 可控自启 上下文管理器 生成器、迭代器 Linux 存储泄漏 角点检测 ip 数据类型 asyncio 动态 开发记录 协程 开发工具 numpy学习 特性 人脸检测 二叉排序树 整蛊 Web开发编程 面经 pygame 几何变换 html 数组 异步 有效单词数 十进制 内存管理 霍夫变换 飞机大战 drw restful 关于博主 penCV 可迭代对象 对象引用 Lcss pl css 基础爬虫框架 视频处理 插件 MSE 浅拷贝 迷宫求解 阶层 初学 图像去噪 层次遍历 defaultD 属性 边缘检测 暴力解法 生成器 回溯 优化更新 生成器函数 贪心算法 深浅拷贝 三元表达式 高阶函数 并查集 文件 最小生成树 z最短距离 os模块的学习 admin pytorch pyecharts 可达鸭 穷举法 模块 多继承 排序 无限弹窗 运算符重载 dfs CPUID 美赛 mysql cursor 函数 数据库原理 迭代器 安装 settings turtle dp yield from 基数排序 降维 绘图 线性回归 目标追踪 强类型 前端开发 pandas 小游戏 分布式 流程控制 文件目录指令 变量 ckeditor 数学建模 命令 对象 oracle基础 网络编程(书) 推导式 docker bfs 语法进阶 模板 反向传播 iter() crud 计数排序 drf 漫威 解析性 三次握手 归约函数 查询 目标跟踪 plt 深拷贝 hash表 图像直方图 题库链接 game Windows 网络编程 线索化 动态数组 复习 JavaScript 版本控制 存储过程 视频读写 脚本 二进制 性能 面向对象的特性 Haar特征 环境搭建 翻转 数据 正则表达式 静态资源 ARP 地址 集群 虚函数 定时任务 归并排序 numpy

推荐


留言
{[ message.user.username ]}({[ message.time ]})

{[ message.content ]}