【转载】透过「事件处理」了解简单的「多线程」 | 亲子课堂 第 11 课

森林

地牢里的关卡主要是偏向锻炼用户的基本语法结构和计算机思维,让大家熟悉极客战记的操作与代码的使用。

来到了森林,关卡将会变得更多更难,同样,到了森林,大家就正式开始接触编程的几大重要知识点:

条件判断
运算符
函数
对象属性

博士猫咪

在这里插入图片描述

关卡简介:

「博士猫咪」涉及了一个新的知识点,事件处理函数,看起来本关与它前面的几关考察内容相同,其实不然,如果忽略了事件处理函数的某个特点,那你可能就无法通过本关了。

通关展示:

在这里插入图片描述

思路讲解

其实大多数关卡需要填充的代码并不多,大家如果完完全全按照注释填写,便可顺利过关,但如果不熟悉考察的知识点,多数同学都会按自己的想法对注释要求的代码“画蛇添足”,导致无法过关,本关也是如此。

知识点:事件处理函数

先来了解一下事件处理函数,在关卡 边地好伙伴 中,我们初次接触了这个知识点:
在这里插入图片描述

每个关卡的目标页和提示页,都会包含对当前关卡涉及的新知识点的讲解,同学们每次都有认真阅读吗?

函数大家已经比较熟悉了,而事件(Events)却是一个新的概念

什么是事件?
什么都是事件。

当你的英雄说话发出声音时,听见声音的人就是发生了听见(hear)事件

当你的英雄出现在游戏里时,你的英雄就是发生了生成(spawn)事件

因此当你的英雄做某事时,则必然会有相应的事件发生。

而事件处理函数,可以看作一个监测工具,或者说一个更高级的判断代码,时刻检测着某事件,若发生了,则调用相应的函数。
在这里插入图片描述
因此,事件处理函数的使用格式为:

pet.on(发生的事件名,调用的函数)

这里有一个易错点,要监测的事件,我们要填写的是事件的名字,名字——也就是字符串,因此此处的事件名必须是包含在双引号内。

如果你到了这一关还不了解字符串的话,问题就比较严重了,可以点击链接,了解字符串的相关知识:

【转载】用「变量输出」做一个全自动的说话机器人 | 亲子课堂 第 9 课

而要调用的函数,我们直接把这个函数的函数名写上去即可,不需要用双引号包括。

可能到这里大家会有一个疑问,为什么事件名是一个字符串,而函数名不是字符串,不需要加双引号呢?

这是因为创建一个函数,实际上就是定义一个函数:def 函数名,此时你的函数名就被关键字def进行了定义,定义以后,这个函数名就不再是一个名字了,它变成了一个函数,它代表的就是这个函数,它成为了一个有定义的对象。

也就是说,虽然我们明白,这个单词,它是这个函数的名字,但是电脑没有名字这种概念,它只知道,这个单词指的就是这个函数。

即:函数名被定义以后,成为了一个对象,因此电脑就可以直接通过调用这个单词来调用函数。

因此函数的调用则不需要使用双引号。

明白了事件函数的使用方法以后,我们再看看事件处理函数的特点。

上方有提到,事件处理函数就像一个时刻监测事件的机器,因此它一旦被运行,被启动了,就永远不会结束,会一直执行它的任务:监测并调用相应函数。

这与普通的代码是有区别的,大家都知道,正常的代码,都是按自上而下的顺序执行,执行完了,这一行代码就结束了。

因此我们的大部分通关代码都是放在一个while-True无限循环内的,为的就是利用循环,让我们的代码无限运行,不要一次性就结束了。

而事件处理函数则非常方便,这行代码一旦被执行,它的监测工作就永远不会停止,也不会影响你其他代码的运行,就像一个帮你做事的智能机器人,你可以做你自己的事,而一旦发生了事件,它就会尽职尽责的运行需要运行的函数。

那么此时最大的变化即是:执行代码的人,从一个人(你的英雄),变成了两个人(你的英雄,和你的智能机器人),大大提高了代码的效率

这就是多线程的思想。

明白了事件处理函数,我们就可以看看我们的关卡代码了。
在这里插入图片描述
现在的你,应该可以一眼就能看出当前代码的结构了

4到7行,代码定义了一个叫sayTwo的函数,它和我们常见的函数有个区别,它自带了一个叫做event的参数,这个参数用于接收发生的事件,目前暂时没有什么作用,属于可有可无的存在。

第9行,则是使用pet.on事件处理函数,来监测"hear"事件的发生,调用sayTwo函数,

那么此时通关思路为:

1. 编写sayTwo函数与事件处理函数
2. 英雄说话提问
3. 触发事件处理函数,调用sayTwo函数让宠物回答

此时,存在一个易错点,有的同学认为,英雄此时提了3个问题,所以宠物需要回答3次,所以他的代码是这样的:
在这里插入图片描述
在sayTwo函数里让宠物连续回答了3次答案。

然后就会发现并不能过关。

上文中有提到事件处理函数是一个时刻运行永不停止的机器,也就是说无需在sayTwo函数里写3次回答,游戏里每发生一次说话,宠物都能执行一次回答,因此英雄提了3次问题,宠物就发生了3次hear事件,则相应地,宠物会按顺序执行3次sayTwo函数。

试想,如果你在sayTwo函数里,填写了三句回答,那么此时你们的对话就变成了:

英雄:一加一等于几?
宠物:2
宠物:2
宠物:2
英雄:x^3 - 6x^2 + 12x - 8 = 0. x等于多少?
宠物:2
宠物:2
宠物:2
英雄:火星有多少卫星??
宠物:2
宠物:2
宠物:2

宠物的每次回答都连续说了3次2,而正确答案其实就是2,仅有一个,不能再多,所以无法过关。

因此将多余的两次回答删去即可过关。

通关代码

在这里插入图片描述
以上便是森林关卡「博士猫咪」的过关教学了~

本攻略发于极客战记
极客战记——学编程,用玩的!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值