码迷,mamicode.com
首页 > 编程语言 > 详细

从完全零基础教你用Python开饭一款打飞机的游戏!是个人就能学会

时间:2018-07-21 17:18:56      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:放音   就会   over   ima   默认   top   方法   text   大战   

技术分享图片

 

技术分享图片

 

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

进群:125240963   即可获取数十套PDF!要源码也可以私信哦!

显示窗口

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

技术分享图片

 

同时我们的资源文件里还有一个叫做 shoot.pack 的文件,里面记录了每个图片所在的位置。

我们通过下面的代码加载资源图片,并且获得我们需要的主角飞机。

技术分享图片

 

技术分享图片

 

下一步就是完善这四个方法。

简单的说就是按下方向键的时候(w,a,s,d)飞机向四周移动,但是不能移动离开屏幕。

此时我们就应该把我们的飞机形成一个类,类里面有控制飞机的方法。

这里写类比较麻烦一点

技术分享图片

 

player的控制

当飞机出现了,我们就应该实现我们在循环里写的方法。我们首先要判断它还在不在屏幕内,不能让飞机飞出屏幕。可以通过 rect.top,rect.bottom,rect.left,rect.right四个方法获取飞机图片的上下左右四个边界值。

这样我们就能对飞机进行判断

技术分享图片

 

让子弹飞

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

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

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

技术分享图片

 

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

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

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

技术分享图片

 

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

创建移动的方法。

技术分享图片

 

player 的飞机就算基本绘制好了

绘制敌机

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

技术分享图片

 

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

技术分享图片

 

移动实现

技术分享图片

 

碰撞检测

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

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

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

如图

技术分享图片

 

在 Player 类里面添加是否击中属性。

self.is_hit = False

修改循环

技术分享图片

 

做到这里基本算是实现了飞机大战.但是还有很多细节处理。

细节处理

精细的碰撞检测

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

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

技术分享图片

 

动画

做了怎么就,感觉它没有一点动效,感觉死气沉沉的。无论是飞机飞行,还是飞机被击中,都没有一个明确的反馈。

对于2d游戏,动画其实就是一张一张的图片不停的变化。就和电影的原理类似。要想让我们的飞机动起来,我们需要定义一个列表来存放这些图片,然后写个循环,让他一直不停的更换图片就好。

首先我们更改我们的主角 Player

任就是老套路,加载图片。把加载的图片放到list 里。

技术分享图片

 

飞机正常飞行的图片只有两张。所以我们要循环变化这两张图片。所以每发射一个子弹,图片变化两张。

技术分享图片

 

技术分享图片

 

加载图片enemies_shoot_img = [plane_img.subsurface(pygame.Rect(267, 347, 57, 43)),

plane_img.subsurface(pygame.Rect(873, 697, 57, 43)),

plane_img.subsurface(pygame.Rect(267, 296, 57, 43)),

plane_img.subsurface(pygame.Rect(930, 697, 57, 43))]

技术分享图片

 

这样的话基本完成了动画效果。

音乐

有了动画还的有音乐。

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

背景音乐的播放。

pygame 在处理背景音乐的时候都在 pygame.mixer 方法中。其中播放音乐的play中的参数,第一个为播放几次,-1 为循环播放,后面的浮点表示 从第几秒开始播放。

技术分享图片

 

分数&等级

分数

首先绘制得分情况,在屏幕上显示多少分。

绘制字体基本和绘制精灵是差不多的。首先要生成字体

两个参数分别是字体和字号

技术分享图片

 

我们还需要在文本的地方强制转换为 str 。

score_text = score_font.render(str(score), True, (128, 128, 128))

等级

有了分数,那么再加点等级会使游戏更加有趣味性。

同样的先绘制等级。

技术分享图片

 

需要源码记得私信小编哦!

 

从完全零基础教你用Python开饭一款打飞机的游戏!是个人就能学会

标签:放音   就会   over   ima   默认   top   方法   text   大战   

原文地址:https://www.cnblogs.com/PY1780/p/9346687.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!