算是个很经典的小项目,一直没做过,补一下
创建一个窗口
这里用了一些pygame的库函数,之前没接触过
1 | 1. pygame.display |
我们现在创建一个surface,摆上我们的背景图
1 | import pygame |
创建玩家的飞机
我们不光要把飞机弄好,还要把上下左右移动的监听写好
飞机的类还是简单的,如下
1 | class HeroPlane(object): |
然后上下左右怎么监听,我去特地搜了一下pygame是怎么做的
1 | 1. pygame.event |
接下来我们的飞机就可以左右移动啦
1 | import pygame |
制作发射子弹
之前的空格键就是用来发射子弹的,我们给子弹重新创建一个类是比较好的选择
直接看完整代码就好,目前已经可以发射子弹了,其实就是在之前的基础上加了一点
这里还需要判断子弹越界就消失,不过这个小游戏里面改不改我觉得无伤大雅,但我自己还是写了
1 | import pygame |
创建敌机
没有对手是孤独的,没有条件就创造条件
这里创建一个敌机的类还是轻松的,左右移动也是老样子,只不过直接规定一个出事的默认移动方向就好,然后在初步定义一个判断何时改变运动轨迹的条件即可
1 | # 敌机的class |
以上部分完成后会出现一个自动移动的敌机,接下来我们给敌机添加子弹
其实还是差不多的,之后为了好看点,我换了点子弹的图片而已,现在一个没有任何歼灭敌机以及爆炸效果的破产游戏就诞生了,完整代码如下
1 | import pygame |
爆炸效果
高大上一点我们可以叫它碰撞检测,pygame.sprite库中,有一些函数可以用于碰撞检测
1 | pygame.sprite.collide_rect():检测两个精灵是否碰撞,两个精灵视为矩形。 |
我们有一大堆子弹,groupcollide显然是最优的选择
我们先看一下这个函数的doc
1 | detect collision between a group and another group |
现在就是要判断hero的子弹有没有击中敌机,集中的话,产生爆炸效果
这里有一个重要的变化,因为爆炸的原因,为了方便判断大量的子弹以及敌机是否碰撞,我决定只用精灵组,之前的一些class让他们继承精灵的类,基本上是一样
为了效果动态一点(毕竟选择默认的碰撞自动消失是没有特效的),可以用一个list存放效果的图片,然后爆炸的时候像幻灯片一样快速调用就好,就显得很酷炫
这里再介绍一个库函数pygame.Rect
1 | pygame.Rect(left, top, width, height) |
改完后的代码如下
1 | import pygame |
本文链接: http://woaixiaoyuyu.github.io/2019/03/17/Python-%E9%A3%9E%E6%9C%BA%E5%A4%A7%E4%BD%9C%E6%88%98/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!