Python学习之路11-武装飞船

本系列是对入门书籍《编程:从入门到实践》的笔记整理,属于初级内容 。标题顺序采用书中标题 。
本章主要学习如何使用编写一个简单的小飞机打外星人的游戏,由于本人对用写游戏并不是特别感兴趣,所以主要是看代码的构建和一些编程规范 , 代码会有所简略 。
准备工作
标准库中并没有自带模块,所以需要自行安装,可以在控制台(下是cmd)上使用命令行安装:pip。如果你是用的,也可以在设置中安装:
点击右边的加号,在弹出的窗口中输入,然后安装即可 。
该项目中需要使用一些书中的图片,这些图片都可以在中下载到 。
游戏基本内容
首先需要新建一个项目,笔者取名为“” , 并在该项目的根目录下新建一个文件夹,用于存放项目中用到的图片 。在本节中,我们将先创建4个文件:
.py:游戏主程序
.py:游戏的配置文件
.py:存放游戏的控制函数,比如响应鼠标、键盘等
ship.py:飞船类
.py模块:
该模块经过重构后的代码如下:
①代码第1行导入模块,它包含开发游戏所需的基本功能;
②代码3到5行导入的是自行编写且经过重构的模块;
③第9行代码执行游戏的初始化工作,比如初始化游戏背景等;
④第10行实例化一个游戏配置类 , 用于配置游戏参数,该类的具体实现见本篇后面的内容;
⑤代码第12-13行用于生成一个名为的显示窗口,长宽从配置对象中读出;.()返回的是一个,在中,是屏幕的一部分 , 用于显示游戏元素,这里的表示的是整个游戏窗口 。我们激活游戏的循环后,每经过一次循环都将重绘这个 。
⑥代码第20行的()函数用于响应游戏中发生的时间,比如鼠标,键盘 , 关闭窗口等 。
⑦代码第21行用于更新飞船的信息,如飞船位置
⑧最后一行用于启动游戏,即初始化游戏 , 并开始主循环 。
.py模块
该文件主要是游戏的配置信息,存放游戏的各种参数 。
这里故意将飞船的速度设置为浮点数,也可以是整数 。在设置游戏元素的位置时有了游戏源码怎么安装,如果直接使用浮点数,则只会截取整数部分 。
ship.py模块
该模块描述了一个飞船类的基本内容:
①()中的self.属性,代码将self.rect.即飞船的中心x坐标转换成浮点数,并将其存储在self.中 。之所以转换成浮点数,是因为在.py文件中,我们将飞船移动速度设置成了浮点数 。
②self.和self.标志,用于表示飞船是否正在移动,用于实现飞船在不松开按键下连续移动 。

Python学习之路11-武装飞船

文章插图
Python学习之路11-武装飞船

文章插图
③()方法,用于增减飞船的中心位置x坐标(因为飞船只能在底部移动,所以不用改y坐标),并防止飞船移动出游戏窗口 。
④重写了()函数,用于绘制飞船
.py模块
该模块主要是集中处理游戏中发生的各种事件 。
①在中,用 , 表示方向按键,其实键盘上每个键在中都有所对于,以K_开头 。()函数和()函数都是对下面的()的进一步简化 , 这两个函数的代码均可以放在()中,但这样代码将会很臃肿,结构不清晰 。
②()函数用于监听游戏的事件,比如.QUIT,它表示游戏推出事件;.和.KEYUP分别表示键盘按下与松开事件 。本次大循环中(外层的while循环)发生的所有事件都存储在.event中,我们使用get()方法获得这些事件 。
③在()函数中,我们使用的fill()方法填充窗体的背景色,调用()方法来在窗体中绘制飞船,最后,调用..flip()方法让最近的绘制在窗体中可见 。
运行游戏
现在我们运行.py文件,我们将得到如下窗体:
目前功能还比较简单 , 只能实现飞船的左右移动 。
添加射击功能
为了添加射击功能,需要先添加一个子弹类 。
.py
首先我们需要导入模块以及其中的类(直译的话叫做“精灵类”,然而这名字叫的真的很尴尬) , 它可以让我们在后面方便批量处理相同类型的同一操作,子弹类继承自类 。该子弹类并没有使用图片,而是直接在上绘制矩形用于表示子弹 。()方法用于更新子弹的位置 。.draw.rect()用于在上绘制子弹 。
修改.py
在该模块中添加子弹类的参数:
修改.py
游戏中我们按空格键发射子弹,并发射子弹的过程单独写在一个函数()中 。为了响应空格键,需要修改()函数和()函数,前者只修改了参数,后者在判断结构中添加了一个判断 。有了子弹类,那我们还需要在中绘制子弹,所以还需要修改()函数 , 而子弹自身信息(比如子弹的移动)的修改则放在了一个新的函数()中 。
当子弹从窗口中消失时,它并没有从内存中消失,如果对于已经从屏幕中消失的子弹不做处理的话,时间一长 , 子弹数一多,光子弹一项的内存占用就会越来越多(土豪请忽略),虽然只是线性增长,但作为一个合格的程序员,应该避免这种无谓的浪费 。
修改.py
最后,我们修改主程序有了游戏源码怎么安装 , 在其中添加一个.中的Group对象用于表示子弹集合,以及对该对象的操作代码 。
运行新代码
以下是运行截图:
小结
自此,我们创建了一个能开火的小飞机,在下一篇文章中我们将向其中添加外星人 。
本篇中的代码都是经过了重构后的代码,但是,当我们自己在编程时,如果对某一框架还是小白,搞不清楚该如何组织代码,那就把所有代码都写在一个或几个文件里(虽然这种习惯很不好) , 也暂时不用考虑代码结构之类的问题,因为你的任务是造东西,而不是写漂亮代码 , 用精巧结构 , 用别人没看过的语法 。两者能兼备当然更好,但每个人都有当小白的时期,有一定熟练度后,再来考虑代码重构的问题 。
【Python学习之路11-武装飞船】本文到此结束,希望对大家有所帮助 。