本次还是分为两个部分,第一部分为pygame模块参数汇总、第二部分我们要做的第一个python实例:游戏飞机大战。
飞机大战使用了两种方法,面对过程和面对对象,通过这两种方法,来了解一下java和pythoin作为面对对象编程的优势,和c作为面对过程编程的复杂所在。
第一部分 pygame模块参数汇总
第一部分我保存在了有道云笔记中,这部分是用于查询一些常用的参数,不必要全部背下来,在需要时可用于查询指令,但是在飞机大战实例中出现的参数还是背下来为好:
pygame模块参数汇总:(http://note.youdao.com/noteshare?id=a3a8a4d2bfd05ec4559ab3bde358d987)
第二部分 游戏飞机大战(上)
游戏中需要用到的图片素材:
(链接:https://pan.baidu.com/s/1TUC0nwuXIaBYTD2We45DEQ
提取码:uy2h )
首先先通过cmd下载一下pygame包
Cmd里输入 pip install pygame 等待安装
1、窗口面板设计
我们玩游戏都是在窗口中进行的,所以我们先建一个窗口:
效果:
2、素材加载
先看一下素材如何用坐标放在程序里:我方飞机居中在最下面,敌方飞机先居中放在最上。
添加背景、飞机、敌机
效果:
3、添加事件(让飞机动起来)
(1)事件就是鼠标点击,键盘录入等等
(2)添加后我们只能按一下走一步,如何让一直按着键就能一直移动呢?
在while循环外添加一行代码
这里我们可以把
简化为:
思考一下其中逻辑
最后效果如下:
、
4、让敌机动起来
我们规定:敌机如果移动到最右边,向左移动,如果移动到最右边,向左移动。
所以我们先在循环外加个敌机的移动标志
然后写敌机移动代码:
效果如下:
5、子弹代码
子弹需要定义一个类
子弹是从飞机头打出来的,所以子弹的坐标应该是飞机横坐标加上飞机长度的一半再减去子弹宽度的一般,纵坐标是飞机的宽度减去子弹的宽度。
(1)定义一个子弹类:
类一般在开头定义:
(2)初始化一个子弹的变量:
(3)然后添加按键,按空格射子弹,实例化子弹对象并调用类方法:
(4)让子弹移动:
在类中添加移动方法,并在射出去的时候调用
(5)改进子弹
现在已经可以发射子弹了,但是只能发射一发,那如何让他发射多个子弹呢?
定义一个列表,发射一个添加到列表里,这样就可以发射多发了。
那先把之前初始化的子弹换成列表、
把onezd = None 删除改为:
然后修改之前射子弹的内容:
因为用到了copy,所以在开头需要调用copy函数,impore copy’:
演示:
6、敌机子弹
敌机子弹的建立方法和我方飞机的是一样的,注意改变一下子弹的发射位置,我们先从简单的来,先做一个按a键敌方飞机射击。
(1)创建敌方飞机子弹类:
(2)初始化敌方子弹列表
(3)设置发射按键
(4)发射子弹
(5)建立好基础了,我们来让敌方飞机自动随机发射子弹,
先把敌方按键发射子弹删除、第(3)步的代码
我们调用随机数import random’
这样敌方自动发射就实现了:
效果:
7、我方飞机的喷火效果
飞机的喷火效果其实就是两张图片来回切换,就和gif一个道理
那如何把两张循环的图片放在大的循环中呢?
先加载另一张飞机图
然后定义一个飞机变换的变量
然后在加载飞机素材那里加上一个判断:
效果如下:
8、我方飞机的击毁效果
敌方子弹接触到飞机时会发生爆炸,这时候我们就需要算出飞机一些关键位置的坐标,让子弹接触到飞机再击毁,经过大概测量,飞机头长为40,距离边框为36.
(1)先定义机头、机身的大小
(2)当我们的飞机被敌方子弹打中后子弹会消失,所以我们可以把这两句话放在敌方子弹那里,并添加子弹的大小,这里引用一个pygame自带的碰撞函数。
效果:
(3)我们把爆炸的文字输出替换为游戏里的动态效果
文件夹里发现爆炸一共4张图
我们先初始化爆炸变量,然后把四个爆炸图放在列表中
然后再之前的碰撞代码后加入爆炸变量的改变
最后,实现爆炸效果。
效果:
9、敌方飞机爆炸
其实和我方的一模一样,改几处就行
(1)先定义敌机的大小
(2)当我们的飞机被敌方子弹打中后子弹会消失,所以我们可以把这两句话放在敌方子弹那里,并添加子弹的大小,这里引用一个pygame自带的碰撞类。
(3)添加爆炸变量的改变 djboom = True
(4)添加爆炸图片,制作动态效果
文件夹里发现爆炸一共4张图
我们先初始化爆炸变量,然后把四个爆炸图放在列表中
最后,实现爆炸效果。
效果:
这样一个简单的不是你死就是我亡的飞机大战已经做好了,方法就是这些,素材还有很多,剩下的就靠大家尽情发挥了。
明天,我们将以面向对象的方法重做这个程序,让大家体会到,面向对象的三大特性:封装、继承、多态究竟应该怎么使用。