【022】Python全栈日记-飞机大战(下)

 

上一次我们完成了面向过程的飞机大战编程,接下来我们来重新编写一个面对对象的飞机大战。

 

我自己的飞机大战(面向对象)源码:(http://note.youdao.com/noteshare?id=833c2cca5acf5bd81772d293d17279bd

 

由于实现的功能和(上)是一样的,就不放动图展示效果了。

 

一、普通封装

1、首先还是先创建窗口、图标、背景和标题

2、接下来我们创建我方飞机

这时候就可以通过一个类来定义我方飞机。

然后创建我方飞机实例,调用显示在窗口中的方法

 

3、让飞机移动

(1)先设置一个函数,放在飞机类和建立窗口之间。

(2)然后给飞机类添加移动方法:

Move里的if 是为了限制飞机别飞出窗口了。

(3)添加长按移动,并调用移动函数

上下移动自己添加就行,方法都是一样的。

 

4、创建敌机

和创建我方飞机完全一样的方法,因为敌方飞机时自动移动的,需要重写move方法。

然后创建敌方飞机实例,调用显示在窗口中的方法和移动的方法

 

 

5、接下来是建立子弹类

(1)我方子弹:

先创建子弹类:

然后在我方飞机的类中添加射击和子弹发射代码

最后在控制函数里加入空格射击:

(2)敌方子弹

其实和我方的完全一样,只不过是自动发射,先调用随机函数import random,然后建立敌方子弹类。

然后在敌方飞机的类中进行修改:

这样就实现敌方飞机随机射击了。

 

 

6、飞机动态效果

先学一个牛逼的方法。循环列表。

有一个列表a=【1,2,3,4】,我现在想要循环取出123412341234应该如何呢?

这时候需要用这样一个循环条件:i = (i+1)%len(a)  ,大家好好思考一下,如果i小于最后一个数的下标,那和平时一样,当i等于最后一个数的下标,i就会变为0。

 

现在我们把这个方法用在我们的动态效果中:

先要删除原先显示飞机的那句话,然后输入如下:

 

7、飞机爆炸效果:

还是需要用到上面的方法。

(1)我方飞机

先在我方飞机类中添加碰到子弹爆炸的方法:

然后在之前显示飞机喷火的那里加上爆炸的代码:

然后调用碰撞方法:

 

(2)敌方飞机

完全一样,子弹改为我方的,飞机改为敌方的就行

先在敌方飞机类中添加碰到子弹爆炸的方法:

然后在敌方飞机显示的那里加上爆炸的代码:

然后调用碰撞方法:

 

 

 

 

二、强封装

这样封装性比较差的程序就做好了,但是大家肯定发现个问题,不同类里好多的代码都是一模一样的,

 

1、这时候我们先把两个飞机类中共性的东西抽取出来,做一个公共飞机类,BasePlane()

黄色为两个飞机类一样的敌方:

(1)我们抽取出来,放在BasePlane()中,

(2)我方飞机继承父类BasePlane():删除父类中包含的变为:

 

(3)敌方飞机继承父类BasePlane():删除父类中包含的变为:

把在while True中的调用移动删除,在函数中调用(我之前的一个小错误,效果其实一样的)

 

 

2、这时候我们在看看我方和敌方射子弹

一模一样,只是子弹移动方向和子弹图片不一样,那我们创建一个子弹类,加上图片和子弹方向参数。

 

(1)创建子弹类Bullet() 加入path:图片地址和moveSize:子弹移动速度

 

(2)删除原先的两个类,修改我方飞机和敌方飞机里的射击方法

我方:-5就是往上射,调用类的名字也得改为Bullet

敌方:3就是往下射,调用类的名字也得改为Bullet

 

3、抽中抽

让我们观察之前抽出来的Bullet()和 BasePlane():

还是有一样的,继续抽,我们给这两个父类再建立一个父类Base():

然后修改Bullet(),让他继承Base()

同样的方法修改BasePlane():

 

这样,一个190行的代码就变成了150行。

我们在未来的开发中,也需要用到这种方法,精简自己的代码,让代码更具观赏性。当我把代码收起来后,你会发现,整个程序被分成了几个部分‘

这就是python的高度封装。抽丝剥茧,通过继承和多态的方式让代码更精简。

 

封装好一个已经能够实现功能的函数之后如果想要为其添加新功能,记住不要修改原函数的函数体内代码,使用闭包的思路添加功能更合适所以,维护的问题不是什么大问题,面向对象的问题在于代码逻辑和人的逻辑的脱离,理解成本上升了

 

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值