美文网首页大数据 爬虫Python AI Sql
从完全零基础教你用Python开饭一款打飞机的游戏!是个人就能学

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

作者: 919b0c54458f | 来源:发表于2018-07-21 14:56 被阅读3次

    默认图片左上角为原点 (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,设置位置。

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

    移动实现

    碰撞检测

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

    敌机和玩家碰撞在一起

    子弹和敌机碰撞在一起

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

    如图

    在 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开饭一款打飞机的游戏!是个人就能学

        本文链接:https://www.haomeiwen.com/subject/cgyhmftx.html