python小项目练习我的Python自学之路

python微信飞机大战

2017-01-08  本文已影响556人  happyte

先添上最终完成效果图

Github代码仓库链接

https://github.com/happyte/plane, 这个是飞机大战的代码仓库,不足之处希望大家指出。

基础类的构建

导弹类

  pygame.image.load(image).convert()

传入的参数是图片的相对路径

第一个参数为加载的图像,第二个参数为左上角坐标。两个函数是配合使用的,需要第二个函数去刷新界面。

## 飞机类
- 1.`Plane`类是接下来要创建的玩家类`Hero`和敌机类`Enemy`的基类。基类把两者共同的属性和方法定义出来,方便子类继承。飞机要发射导弹,有一定的发射间隔,因此定义一个对象属性`self.bulletSleepTime`。还需要一个列表存储导弹,定义一个对象属性为空列表`self.bulletList`。
![](http:https://img.haomeiwen.com/i4300291/7b20c8aebfb3415c?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
`time.time()`可以用来确定当前时间,按照一定的格式可以转换

- 2.在初始化的时候我们定义了导弹的发射间隔时间,大于间隔时间的话我们就往定义的列表中添加导弹对象,因为我现在只想让玩家飞机发射子弹,因此初始化导弹对象特意往`self.x`加了`36(是玩家飞机72x72图片宽度的一半)`,让导弹在玩家飞机的正中间开始显示。
![](http:https://img.haomeiwen.com/i4300291/6bd1343aff885c70?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

- 3.描绘出飞机的位置
![](http://upload-images.jianshu.io/upload_images/4300291-45446eedba25a1ab?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

# 继承类的构建
##玩家飞机类
- 1.在飞机基类中我们定义了一些共同的对象属性,不同的对象属性有图像和原始位置,而且玩家飞机类对象还想拥有基类对象的属性,所以需要调用`Plane.__init__(self)`函数,通过这个函数就拥有了`Plane`基类的对象属性`bulletSleepTime`、`lastShootTime`、`bulletList`。
![](http:https://img.haomeiwen.com/i4300291/f394984937086b2c?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

- 2.玩家飞机通过键盘的上下左右控制飞机的位置
![](http://upload-images.jianshu.io/upload_images/4300291-dc488d254669804a?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

##敌人飞机类
- 1.敌人飞机类中还多了速度对象属性,考虑到随着游戏难度的增加,敌人飞机速度越来越快,这个参数需要外界传入。而且敌人飞机有小中大三种类型,是随机的,起始的位置`x`轴也是随机的,`y`轴固定从最上方开始。
![](http:https://img.haomeiwen.com/i4300291/a4d66500742b5332?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
用到了随机数函数,需要导入`random`模块
 ```objc
  random.randint(1,3)

其中用到了super(Enemy,self).__init__()与玩家类中的Plane.__init__(self)效果是相同的。direction对象属性可以忽略,现在没有用到。

游戏初始化类(封装功能)

主函数

总结

上一篇 下一篇

猜你喜欢

热点阅读