打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
一名程序员用Python实现飞机游戏!企业为什么会聘用他?看完就会

所用技术和软件

python 2.7

pygame 1.9.3

pyCharm

准备工作

  1. 安装好 pygame 在第一次使用 pygame 的时候,pyCharm 会自动 install pygame。

  2. 下载好使用的素材。

技术实现

初始化 pygame

首先要初始化 pygame ,之后设定一些基本的要点,比如窗口大小(尽量避免魔法数字),窗口标题以及背景图像。pygame 通过加载图片,最后返回一个 surface 对象,我们不需要关系图片的格式。但是通过 convert()这个函数,会使我们的图片转换效率提高。

默认图片左上角为原点 (0,0)。

显示窗口

如果我们这样设定,当我们运行的时候,窗口会一闪而过,并不会出现我们想象的画面。因为窗口只是运行一下就会关闭,所以我们要写一个循环,使窗口一直保持出现。当然如果我们简单的写一个 while True那么我们的程序就出现了死循环,卡死。

所以还需要写个退出。

将 player 显示在屏幕上,并且刷新屏幕

screen.blit(player, [100, 400])pygame.display.update()

效果如下

让飞机 “飞” 起来

飞机已经出现在我们的屏幕上了,现在需要让飞机动起来让他可以上下左右的移动。

首先要获取键盘事件,获取键盘上什么按键被按下。

key_pressed = pygame.key.get_pressed()

简单的说就是获取飞机的图片,初始化飞机的矩形区域。 rect 该属性会获得四个值。分别是左上角 x , y 坐标,矩形的宽度。 topleft 初始化飞机的左上角坐标,也就是飞机出现的位置。如下图所示。

让子弹飞

子弹要沿着发射方向射出去。可以在屏幕上一直移动,直到移出屏幕。

我们只要有定义一个子弹对象,让这个对象显示在屏幕上就可以。

先定义飞机子弹类,基本和定义 player一样,获得图片,裁剪图片,设置图片初始位置,在屏幕上显示图片

下一步就是让飞机的子弹跟随飞机。

我们需要在 Player 类里面添加方法。

首先我们规定,按下空格发射子弹。

下一步就是让子弹在屏幕上移动。

创建移动的方法。

这个和我们的预期还是有差别的,频率太快了。

关于pygame 的键盘重复事件 官方好像并没有这个设置。那么我们只能在添加一个计数器,通过计算器的数值来判断子弹是否发射。这里的数值是多次测试后,自己感觉一个比较满意的频率。可以自己调整。

绘制敌机

下一步就是绘制敌机。敌机是从屏幕上方移动到屏幕下方。我们任就需要一个类来设置敌机。设置类任就和我们前面的差不多,加载资源,设置 rect,设置位置。

现在我们就应该想想敌机的特点了,其实他和子弹的特点基本一直,只不过方向不一样而已。还有一点是敌机是随机生成的。

碰撞检测

飞机和敌机还有子弹都有了,我们现在需要进行完成碰撞检测。有下面几种场景。

  1. 敌机和玩家碰撞在一起

  2. 子弹和敌机碰撞在一起

无论是那种情况的碰撞,其实就是两张图片有了交集。

如图

执行结果

当玩家被击中的时候,在显示一张 GameOver 图片提示

细节处理

精细的碰撞检测

从图上看,当敌机看似还没有和我们接触时,但是已经 GameOver 了。

实际情况是这样的,所有的图片都是矩形,当两张图片的矩形边框线碰撞的时候,就算两个对象碰撞,所以我们要更加精细的使用碰撞检测。

我们可以按着图片中心的某个长度为半径,在这个半径内发生碰撞才是碰撞。

正常发射子弹的动画效果已经做完。我们还需要进行被击中爆炸的动画效果。

击中的原理和正常也一样。只不过先要判断当前飞机状态,是否被击中。

同样我们需要创建 Group() 来存放被击中的敌机。

enemies_shoot = pygame.sprite.Group()

之后的处理逻辑基本相似,不多介绍

音乐

有了动画还的有音乐。

音乐的处理只要在特定的地方播放音乐就好,比如子弹发射的时候,背景音乐,被击中的时候,游戏结束的时候,等等。他们的处理逻辑都一样。先加载资源,然后在播放。

第一个参数是写的文字;第二个参数是个布尔值,以为这是否开启抗锯齿,就是说True的话字体会比较平滑,不过相应的速度有一点点影响;第三个参数是字体的颜色;第四个是背景色,如果你想没有背景色(也就是透明),那么可以不加这第四个参数

字体也有了,文本也有了,下一步就是绘制。通过 get_rect()获得矩形,之后绘制和精灵绘制方法一样

基本到这里算是写了一个相对完整的游戏。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【cocos2d-x入门实战】微信飞机大战之九:碰撞检测
500行代码,教你用python写个微信飞机大战
用 Python 实现微信版飞机大战
Python深度剖析贪吃蛇游戏的设计与实现
python飞机大战pygame快速入门
魂斗罗游戏中的算法详解及代码示例
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服