Python

状课网-少儿编程网课专业平台

Python python青少年编程—吃鸡联盟之亚瑟开枪(中)

发布时间:2021-11-24 13:49:23 浏览 0

各位小伙伴大家好:

上期我们实现了英雄的捡枪和安装子弹的功能,本期我们来实现后面的功能。逻辑上有点复杂,会有点绕。如果你是初学者,可能需要一些时间去理解各个类之间的互相调用。

首先我们接着来实现安装弹夹的功能:

英雄调用安装弹夹方法如图:

python青少年编程—吃鸡联盟之亚瑟开枪(中)

安装弹夹需要两个参数,一个是目标枪,一个是弹夹。

python青少年编程—吃鸡联盟之亚瑟开枪(中)

安装弹夹这个动作虽然是人发出的,但保存弹夹这个功能还得枪来实现。

所以在英雄类中调用了枪类中的保存方法(save保存方法定义在枪类中)

到目前为止人、枪、弹夹、子弹都有了,我们先来做一个小小的测试,看看各个功能是否能正常使用。

有一种测试方法就是“print”,也就是在需要检测的代码后面加一行打印信息,如果打印成功则表示程序正常运行。

一起来看看吧!

python青少年编程—吃鸡联盟之亚瑟开枪(中)

这里我们分别在英雄捡枪、保存子弹、弹夹安装这几处增加了测试行代码。

所增加的测试信息都打印成功,表示程序运行正常,这当然是我已经调试过的,大家伙自己也可以去试试。

下面就是本期的重点内容,也是整个程序逻辑上最复杂的一部分了。

接下来我们就一起来完善英雄开枪射击的功能:

python青少年编程—吃鸡联盟之亚瑟开枪(中)

对,就是这个功能。这个方法是由英雄发出的,所以由英雄调用。

python青少年编程—吃鸡联盟之亚瑟开枪(中)

现在我们回到英雄类中去定义这个射击方法,大家应该还记得英雄类中有个属性gun,它保存英雄的枪的信息。

具体的设计过程是英雄扣动扳机,就相当于告诉枪:你可以发射子弹了。

也就是说当英雄调用shoot方法的时候,并不能让子弹射出去。真正发射子弹的是枪,所以还需要进一步调用枪类中的发射子弹方法也就是fire()。

那么这个方法在哪呢?在枪类中,接下来就是到枪类中去调用fire方法。

下面我们就进入枪类,去调用fire方法让枪类发射子弹。

定义如下图:

python青少年编程—吃鸡联盟之亚瑟开枪(中)

接下来枪就开始发射子弹了,可子弹在哪呢?——还在弹夹中。

于是我们还得再进入弹夹类中去获取子弹,也就是程序的第34行。

还能怎么办呢?继续找弹夹呗。

于是乎,我们又在弹夹中定义了一个弹出子弹类out_bullet,它的定义如下:

python青少年编程—吃鸡联盟之亚瑟开枪(中)

是的,结果返回的是一个子弹的引用,在正常调用第43行后,上面的第34中的bullet就指向了一颗子弹,也就是说枪拿到了一颗子弹。

好了现在终于有子弹了,接下就是让子弹飞出去伤害敌人。

因为让敌人受伤害的是子弹,所以子弹还需要一个让敌人受伤的功能。

于是就有了子弹类中的第41行,hurt方法的定义。

python青少年编程—吃鸡联盟之亚瑟开枪(中)

具体怎么掉血呢?看第42行又回到了英雄类——调用英雄类中的loss_blood方法。

也就是说真正让敌人血量降低的是英雄类中的方法。

python青少年编程—吃鸡联盟之亚瑟开枪(中)

兜兜转转一大圈,又回到了英雄类。

最后来看一下运行结果:

python青少年编程—吃鸡联盟之亚瑟开枪(中)

亚瑟开枪,小兵掉血,运行成功。

开枪射击这个程序相对比较复杂,初学者或许较难理解。

下面是整个亚瑟开枪的大体流程:

1、英雄调用shoot方法(扣动扳机)告诉枪射击fire。

2、程序接到shoot指令后进入枪类中调用fire方法,告诉弹夹弹出一颗子弹,上图41行。

3、程序接到弹出子弹指令后,进入弹夹类调用out_bullet方法弹出子弹,并将子弹的引用返回给枪,接着回到枪类中(上图第43行)

4、枪在得到子弹后,进入子弹类调用hurt方法,让子弹击发(上图第36行)

5、子弹完成击发,进入英雄类调用loss_blood方法敌人产生伤害掉血(上图第22行)。

是不是有点绕,下面是完整代码,大家自己去琢磨琢磨吧。

python青少年编程—吃鸡联盟之亚瑟开枪(中)

python青少年编程—吃鸡联盟之亚瑟开枪(中)

python青少年编程—吃鸡联盟之亚瑟开枪(中)

本期就为大家分享到这里,为我们下期再聊。

文章来源:创客编程小屋

本文链接:https://www.ascratch.com/news/17544.html

上一篇:python青少年编程—吃鸡联盟之亚瑟开枪(上) 下一篇:返回列表