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

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

概述  默认图片左上角为原点(0,0)。进群:125240963  即可获取数十套PDF!要源码也可以进群哦!

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

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

显示窗口

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

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

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

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

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

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

这里写类比较麻烦一点

player的控制

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

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

让子d飞

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

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

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

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

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

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

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

创建移动的方法。

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

绘制敌机

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

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

移动实现

碰撞检测

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

敌机和玩家碰撞在一起 子d和敌机碰撞在一起

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

如图

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

self.is_hit = False

修改循环

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

细节处理

精细的碰撞检测

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

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

动画

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

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

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

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

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

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

plane_img.subsurface(pygame.Rect(873,697,

plane_img.subsurface(pygame.Rect(267,296,

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

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

音乐

有了动画还的有音乐。

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

背景音乐的播放。

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

分数&等级

分数

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

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

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

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

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

等级

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

同样的先绘制等级。

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

总结

以上是内存溢出为你收集整理的从完全零基础教你用Python开饭一款打飞机的游戏!是个人就能学会全部内容,希望文章能够帮你解决从完全零基础教你用Python开饭一款打飞机的游戏!是个人就能学会所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1208897.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存