Python项目实战之《飞机大战游戏》

news2024/11/27 15:49:48

目录

一、Pygame库包简介

二、Pygame安装

三、项目开发思路

3.1前言

3.2飞机大战开发步骤


一、Pygame库包简介

Pygame是一个基于python的游戏开发库,它提供一系列的工具和接口,使开发人员能够轻松的创建各种类型的游戏,包括2D游戏和简单的3D游戏。说白了就是一个目录包,里面包含了许多已定义好的函数模块和属性。

二、Pygame安装

Windows为例:

 #pygame库中模块使用教程:https://www.pygame.org/docs

 

 

三、项目开发思路

3.1前言

__name__属性

我知道一个项目中可能有多个"*.py"的文件,每个“*.py"文件中都定义了许多功能函数来作为模块文件来使用。模块文件创建好后,开发者为了测试模块中定义的功能函数是否可以使用,一般都会在模块文件中调用一下自己写的函数方法。这样当程序主"*.py"文件要使用模块中的某个函数时,就需要将相应模块文件导入到启动"*.py"文件中(导入模块相当于将模块文件中的代码复制到本“*.py”导入位置处);这样就导致当调用模块中的某函数时、模块文件中已写调用函数的代码也会执行。因此,为了避免这种事情我们可以在调用函数之前在模块文件中,函数调用处添加一个"__name__="__main__"的判断。

1、当“*.py”文件作为启动文件时,其文件中__name__的值为“__main__"

2、当“*.py" 文件作为模块导入到”*.py"启动文件时,模块中的__name__属性值就等于其模块的文件名,而本启动文件中的__name__的值为“__main__"。

总结:__name__="__main__"所在的.py文件如果作为模块被导入时,其文件中的__name__值就等于模块文件名。 但如果直接在本地文件运行,__name__的值就为"__main__"。

3.2飞机大战开发步骤

说明:《飞机大战游戏》源代码资源包已上传到本文章顶部,欢迎下载测试!

一、创建游戏窗口

        1、设置窗口大小

        2、设置窗口标题

        3、设置窗口图标

二、添加音效

        1、游戏背景音效

        2、敌人飞机被击中爆炸音效

三、定义敌人和子弹列表,用来保存对应的实例对象

四、循环创建敌人实例对象

五、定义勾股定理距离函数

六、定义得分字体显示函数

七、定义游戏结束标语显示和对象清除函数

八、定义保存子弹和敌人实例对象的列表

九、while一直循环

*我们看到的游戏画面动态变化效果,其实和视频播放原理类似,都是由一张张前后相关联的图片、轮流显示在屏幕上。用户通过肉眼看屏幕时,由于屏幕上前后图片轮播速度快,因此给用户一种动态变化的视频感觉;其实用户看到的动态视频都是由一张张图片轮播展现出来的动态效果。因此在游戏中可以使用循环来展现游戏物种的实时位置变化实现动态视觉效果。

        1、画出背景图

        2、玩家键盘或鼠标事件监测

                ●玩家按不同的键,玩家飞机相应位置也随之变化

                ●玩家按空格键发射子弹即创建子弹实例对象

        3、显示玩家位置

                ●定义并创建玩家飞机类和实例对象

                ●定义实例属性: 玩家飞机x,y轴图片初始位置。

                                          定义玩家移动速度即坐标变化值变量

                                          加载玩家飞机图片

               ● 定义玩家移动边界控制方法(只能在指定x轴水平范围内移动)

        4、显示敌人

                ●定义敌人类

                ●实例属性:随机定义敌人图片初始坐标x、y值

                                    定义敌人移动速度变量

                                    加载敌人图片

                ●定义敌人移动方法:默认水平移动,超过左右边界反向移动并朝玩家前进一步。当走到屏幕底部时或被子弹射中则重新随机初始化敌人位置给玩家一种敌人源源不断的错觉。

        5、显示玩家子弹

                ●定义子弹类

                ●定义子弹类实例属性: 子弹初始位置坐标(总是在玩家飞机头上面一点)

                                                       子弹移动速度

                                                       加载子弹图片

                ●定义子弹射中敌人方法: 定义勾股定理函数测量子弹和飞机之间的距离;如果两者距离在某个范围内则表示击中敌人---->子弹和敌人消失(敌人击中爆炸音效)---->删除列表中子弹对象、重置敌人飞机位置。

               ●定义子弹移动方法: 每循环一次子弹向上移动一次;如果子弹到达窗口顶部则消失。

        6、显示玩家得分

                ●在循环外: 分数变量累加+1;初始化字体函数;设置字体及其字号。

                ●定义得分字体显示函数: 定义字体内容变量;通过字体变量熏染装饰字体(颜色);显示得分字体。

        7、显示游戏结束

                ●调用游戏结束函数(玩家飞机和敌人飞机相撞游戏结束--->清理掉所有对象---->显示游戏结束标语)

        8、更新窗口内容(每循环一轮,将本轮的各对象位置变化显示在背景图上)

@声明:“山月润无声”博主知识水平有限,以上文章如有不妥之处,欢迎广大IT爱好者指正,小弟定当虚心受教!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/952482.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ptmalloc源码分析 - _int_malloc函数实现fastbins(06)

目录 一、_int_malloc内存分配的核心函数 二、bins的管理和chunk的结构 三、_int_malloc函数分配前的两个检查 四、REMOVE_FB原子实现fastbins的链表操作 五、fastbins的具体分配实现 一、_int_malloc内存分配的核心函数 前几章节,我们主要讲解了状态机malloc_…

xml

1.xml 1.1概述【理解】 万维网联盟(W3C) 万维网联盟(W3C)创建于1994年,又称W3C理事会。1994年10月在麻省理工学院计算机科学实验室成立。 建立者: Tim Berners-Lee (蒂姆伯纳斯李)。 是Web技术领域最具权威和影响力的国际中立性技术标准机构。 到目前为…

nginx反向代理 负载均衡

一、反向代理: 1.反向代理介绍: 反向代理:reverse proxy,指的是代理外网用户的请求到内部的指定的服务器,并将数据返回给用户的一种方式,这是用的比较多的一种方式。 Nginx 除了可以在企业提供高性能的web…

从2023蓝帽杯0解题heapSpary入门堆喷

从2023蓝帽杯0解题heapSpary入门堆喷 关于堆喷 堆喷射(Heap Spraying)是一种计算机安全攻击技术,它旨在在进程的堆中创建多个包含恶意负载的内存块。这种技术允许攻击者避免需要知道负载确切的内存地址,因为通过广泛地“喷射”堆…

三路排序算法(Java 实例代码)

目录 三路排序算法 一、概念及其介绍 二、适用说明 四、Java 实例代码 QuickSort3Ways.java 文件代码: 三路排序算法 一、概念及其介绍 三路快速排序是双路快速排序的进一步改进版本,三路排序算法把排序的数据分为三部分,分别为小于 v&…

blender 火焰粒子

效果展示 创建火焰模型 新建立方体(shift A ),添加表面细分修改器(ctrl 2 ),视图层级调整为 3 ,这样布线更密集; 右键将模型转换为网格,tab 进入编辑模式,7 切换到顶…

基于 Debian 12 的 Devuan GNU+Linux 5 为软件自由爱好者而生

导读Devuan 开发人员宣布发布 Devuan GNULinux 5.0 “代达罗斯 “发行版,它是 Debian GNU/Linux 操作系统的 100% 衍生版本,不包含 systemd 和相关组件。 Devuan GNULinux 5 基于最新的 Debian GNU/Linux 12 “书虫 “操作系统系列,采用长期支…

Kafka3.0.0版本——手动调整分区副本示例

目录 一、服务器信息二、启动zookeeper和kafka集群2.1、先启动zookeeper集群2.2、再启动kafka集群 三、手动调整分区副本3.1、手动调整分区副本的前提条件3.2、手动调整分区副本的示例需求3.3、手动调整分区副本的示例 一、服务器信息 四台服务器 原始服务器名称原始服务器ip节…

新型安卓恶意软件使用Protobuf协议窃取用户数据

近日有研究人员发现,MMRat新型安卓银行恶意软件利用protobuf 数据序列化这种罕见的通信方法入侵设备窃取数据。 趋势科技最早是在2023年6月底首次发现了MMRat,它主要针对东南亚用户,在VirusTotal等反病毒扫描服务中一直未被发现。 虽然研究…

Linux--VMware的安装和Centos

一、VMware和Linux的关系 二、VMware的安装 VM_ware桌面虚拟机 最新中文版 软件下载 (weizhen66.cn) VMware-Workstation-Lite-16.2.2-19200509-精简安装注册版.7z - 蓝奏云 如果安装不成功,则设置BIOS 三、在VMware中加入Centos 下载地址: CentOS-…

深度学习论文分享(八)Learning Event-Driven Video Deblurring and Interpolation

深度学习论文分享(八)Learning Event-Driven Video Deblurring and Interpolation 前言Abstract1 Introduction2 Motivation2.1 Physical Model of Event-based Video Reconstruction2.2 Spatially Variant Triggering Threshold 3 Proposed Methods3.1 …

初学者如何制作属于自己的第一个网页?

如今,网页设计已经成为互联网世界不可或缺的一部分。随着网络的发展,越来越多的用户通过网页浏览信息、社交和购物。一个出色的网页设计能吸引用户的眼球,提升他们的浏览体验,从而提高用户满意度和忠诚度。那么,要设计…

机器学习——手写数字识别

0、:前言 这篇文章能够帮助你从数据到模型的整个过程实现不过至于安装第三方库等基础问题,本文不涉及,因为确实不难,搜一搜一大把本此实验运行环境为jupyter,当然通过pycharm也是可行的 1、数据: 手写数字…

简单了解网络基本概念

目录 一、网络含义 二、什么是以太网? 三、网络分类 四、网络架构 五、数据传输方式 六、双工模式 一、网络含义 在实际生活中我们用传输介质把独立的终端设备相互连接起来就构成了网络。 二、什么是以太网? 以太网是一种网络通信协议标准&#…

浅谈 Pytest+HttpRunner 如何展开接口测试!

软件测试有多种多样的方法和技术,可以从不同角度对它们进行分类。其中,根据软件生命周期,针对不同的测试对象与目标,可将测试过程分为 4 个阶段:单元测试、集成测试、系统测试和验收测试。本文着重介绍了如何借用 pyte…

【两周学会FPGA】从0到1学习紫光同创FPGA开发|盘古PGL22G开发板学习之数码管静态显示(四)

本原创教程由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处 适用于板卡型号: 紫光同创PGL22G开发平台(盘古22K) 一:盘古22K开发板(紫光同创PGL22G开发…

postgresql-集合运算

postgresql-集合运算 简介UNIONINTERSECTEXCEPT分组与排序集合操作优先级 简介 数据库中的表(table)本质上就是由行(row)组成的集合。因此,PostgreSQL 同样支持集 合论中的集合操作,包括并集(U…

CSS中的相对单位和绝对单位,以及rem自适应布局

在CSS中,我们经常需要指定元素的尺寸、间距和位置。为此,我们可以使用各种单位来定义这些值。本文将重点介绍CSS中的相对单位和绝对单位,并解释它们之间的区别。 相对单位 百分比(%):百分比单位是相对于父元…

Go 官方标准编译器中所做的优化

本文是对#102 Go 官方标准编译器中实现的优化集锦汇总[1] 内容的记录与总结. 优化1-4: 字符串和字节切片之间的转化 1.紧跟range关键字的 从字符串到字节切片的转换; package mainimport ( "fmt" "strings" "testing")var cs10086 s…

C#里Bitmap转Halocn的HObject

一般情况下,图像的width是4的倍数的话,用以下代码便可将彩色bitmap转出halcon里的HObject public void Bitmap2HObject(Bitmap bmp, out HObject image){try{Rectangle rect new Rectangle(0, 0, bmp.Width, bmp.Height);BitmapData srcBmpData bmp.L…