python中类声明
如下:
1 | class Student(object): |
Student类有两个成员变量,name和score,类的成员函数第一个参数都为self,用来实现成员变量的赋值,__init__是类的初始化函数,初始化成员变量。
类的使用:
1 | s1 = Student('niuniu',78) |
定义s2对象,并且通过s2.age=100,定义了s2的成员变量age,并且初始化为100
类的成员变量有两种方式定义,一个是在__init__函数中,一个是通过类的对象初始化。
类的权限设置:
1 | class Student2(object): |
__name通过在变量名前边加上__表示该变量为私有变量
,python没有严格的权限限制,只不过通过重命名将__name变为其他的名字了,这样在外部就访问不到这个变量了。
通过添加getname和getscore函数获取成员变量。
1 | s3 = Student2('s3',99) |
虽然通过s3.__name = ‘iloveu’赋值后,并没有改变类的私有变量__name的数值,因为类的私有变量__name的名称被改为其他的名字,用户无法知道。所以打印出的名字和s3.__name数值不同。
python类同样支持继承
1 | class Peaple(object): |
可以通过isinstance判断类对象是否是一个类型的实例
1 | print(isinstance(p, Peaple)) |
子类对象是基类类型的实例,而基类对象不一定是子类类型的实例
。比如Student继承于Peaple,学生是人,但是人不一定是学生。
类的属性控制:
1 | class Designer(Worker): |
获取属性,设置属性,判断是否含有某个属性
1 | #判断类中是否有某个实例print(hasattr(designer, 'age') ) |
类的公有属性,为所有对象共有
,类似于C++的static成员变量
1 | #通过self变量或者实例自身可以实现实例属性绑定 |
可以为类绑定成员函数,也可以只为类的一个实例绑定成员函数
1 | def setage(self, age): |
可以通过@property的方式,通过属性访问的方式就可以调用函数
1 | class Definetion(object): |
将member分别实现为返回属性__member,设置__member,以及删除__member的函数。在每个member上添加对应格式的@property,@member.setter, @member.deleter。
通过属性访问的方式就可以调用对应的函数, definetioner.member返回__member值, definetioner__member = 1024调用设置__member的函数。deleter definetioner.member调用的是删除函数。
实战:用pygame库做一个打飞机的小游戏
pygame是python的一个做游戏的库
,安装方法自行百度。
实现子弹类
1 | # 设置游戏屏幕大小 |
写玩家的飞机类
1 | # 玩家飞机类 |
实现飞机类的几个功能函数
1 | # 发射子弹 |
实现敌方飞机类
1 | # 敌机类 |
实现游戏主逻辑
1 | # 初始化 pygame |
由于资源采用大图的方式,敌机和飞机,子弹都绘制在一站图片上,需要裁剪,pygame提供裁剪函数
1 | # 设置玩家飞机不同状态的图片列表,多张图片展示为动画效果 |
管理敌机和敌机被击中的等对象
1 | #存储敌机,管理多个对象 |
通过循环控制游戏逻辑,不断生成敌机和子弹,刷新场景等。
给大家个建议,也是忠告,pygame实现的游戏循环体中一定要捕捉事件消息,不然会因为死循环而一直卡顿,甚至崩溃。先实现循环体中事件捕捉
1 | # 游戏主循环 |
在while running循环中添加子弹和敌机生成逻辑
1 | # 生成子弹,需要控制发射频率 |
在while running循环中子弹和敌机移动逻辑
1 | for bullet in player.bullets: |
在while running循环中添加自己飞机动态逻辑
1 | # 绘制玩家飞机 |
效果显示:
源码下载地址:打飞机小游戏python
谢谢关注我的公众号: