最新消息:

python青少年编程第三季——14、吃鸡联盟之亚瑟开枪(上)

Python 少儿编程 2444浏览 0评论
Python青少年编程第三季

各位小伙伴大家好:

本期开始我们一起来做一个小项目,总结一下我们学习过的有关面向对象编程的知识。目标是实现一个另类版的简易吃鸡游戏,让亚瑟开枪射击小兵。

在为程序写代码之前,我们需要先分析这个程序大概需要实现的功能。更大的程序还需要事先就设计好类的详细方法和接口。

 

下面是我们这个程序的简要框架:

python青少年编程第三季——14、吃鸡联盟之亚瑟开枪(上)

这只是一个大概的框架,其他的功能我们在完善过程中再逐步添加。

通过对程序目标的分析我们大概抽象出了四个类:英雄Hero,枪Gun,弹夹CartridgeClip,子弹Bullet。

在类的定义中我们采用了大驼峰的命名规则,英文名称取自百度翻译,可能会存在有表述不够准确的地方,但这不是我们重点。

 

在主函数中我们实例化一些对象,写了一些大概需要实现的功能,其中需要参数的地方我们用arg占位表示。

接下来我们就开始一步步完善我们的程序:

首先是根据需要确定参数的类型和数量,并根据需要初步设计各个类的初始化方法,定义属性。

 

python青少年编程第三季——14、吃鸡联盟之亚瑟开枪(上)

这里英雄Hero我们设计了两个属性:名字和血量,Gun枪设计了名字属性,弹夹CartridgeClip设计了容量属性,而子弹Bullet则需要一个杀伤力属性。

给类的形参命名时我们一般在末尾添加了后缀_temp用以区分。

 

完成了初始化方法的定义,接下来我们开始逐步实现我们的功能:

按照先后顺序,首先我们来实现英雄捡枪和安装子弹的方法。

python青少年编程第三季——14、吃鸡联盟之亚瑟开枪(上)

python青少年编程第三季——14、吃鸡联盟之亚瑟开枪(上)

代码第40行捡枪的动作是由英雄发出的所以这个方法我们需要定义在英雄类中,也就是第5到7行。

所谓的捡枪就是用一个变量来保存一种状态,没有捡枪时变量gun的状态是None,完成这个动作后就用变量gun指向枪的引用,这里是M16。

 

下面的第42行,是实现一个将子弹压入弹夹的方法。这个方法也是在Hero类中调用的,只是这个方法涉及到了两个参数,弹夹和子弹。

虽然这个方法也是在Hero中调用的,但是正在实现却是在弹夹中。因为在上子弹的过程中,英雄只是将子弹交给弹夹,而真正保存这颗子弹的是弹夹。所以Hero类中只是调用了一下弹夹中的保存子弹的方法,接下来就是到弹夹类中去实现这个方法:save。

实现过程是:首先在弹夹类中添加了一个属性list,(代码的第20行)它是一个列表,用来存储子弹的引用。然后再第22、23行再将子弹的引用添加到列表中,完成整个给弹夹装子弹的过程。

 

本期我们暂时先只实现这两个方法,让大家有一个理解、消化的过程,其他方法我们后面再慢慢来完善。

转自公众号:
高维数学

您必须 登录 才能发表评论!