作品的设计目标:提醒工作人员对列车进站做好准备,提醒旅客及时上车以免延误,为旅客提供准确详细的检票信息。随着国际开放融合,更多的外国游客来到中国,听不懂中国话,无法交流,直接影响他们的出行,所以为本系统加入了英语播报。
本系统模拟石家庄火车站的情况,对接车(工作人员专用,所以无英文广播)、检票、停止检票环节进行设计,实现语音自动播报。满足工作人员及旅客的需求。
正文
经过这两个多月的学习,果冻老师带领大家一起解析了五部Scratch全国竞赛的获奖作品,这些作品拥有不同的主题,不同的编码技巧和不同游戏效果,但是,它们有一点是相同的,就是代码“很庞大”,动辄就要几十个角色,一个角色就要上百行语句,果冻老师不得不分为上下篇来介绍。今天,我们要解析的这个作品有点与众不同,它很“精简”,一共就五个角色加一个背景,所有角色的语句加起来不过一两百行,可是,这也是一等奖的获奖作品哦,没有想到吧!那它获奖的原因到底是什么呢?别着急,我们一点一点来看。
首先,和往常一样,还是从点击绿旗开始。
点击绿旗
点击绿旗后,作品中所有的角色就一下子就全都上场了,不落下一个角色,它们都会响应点击绿旗的事件。
一共有四个按钮,一个车站的图片,一个背景。
其中,三个蓝色按钮的代码非常简单,就是把按钮定位在不同的位置上。
车站图片显示在所有按钮的后面,背景的前面,并且设置了虚像特效让图片半透明,使得背景的颜色可以透过图片看到。
黄色按钮,除了设置定位,还有初始化变量、列表的语句。
背景的代码也非常简单,仅仅是初始化循环这个变量,为后面的代码做好准备。
以上这些代码设置对应在屏幕上,效果是这样的:
使用指导
屏幕上一共有四个按钮,分别是使用指导、接车、检票、停止检票。第一步,我们点击左上角黄色的使用指导按钮,看一看这个车站广播系统应该如何使用。
同学们一定知道在数学中有一类数字叫做整数,比如1,2,3,4……这些数字都是整数。而整数又可以分为偶数和奇数,能够被2整除的数叫做偶数,2,4,6,8……都是偶数;不能被2整除的数,或者说被2除余1的数则叫做奇数,1,3,5,7……这些数字都是奇数。一个整数它要么是偶数要么是奇数,只有这两种状态,并且按照顺序数数的话,刚好是一个奇数一个偶数这样岔开的。而一个开关按钮也只有两种状态:开和关,于是,我们可以将整数的状态与开关按钮的状态对应起来,偶数对应开,奇数对应关,这样,我们就可以通过数字来控制列表的打开关闭了,就像上面的代码中展示的一样。
接车
使用指导告诉我们,下面的三个按钮对应三个语音广播的功能,点击第一个按钮并输入火车车次信息,语音广播就会进行接车播报。
点击第一个按钮之后,会发出接车的广播(这里的广播是Scratch的指令,不要和上面的语音广播混淆了哦),接收这个接车广播的角色是背景:
背景接收到接车命令后,会使用询问语句让用户输入接车的车次信息,比如我们输入G234,然后回车,这时,代码就会将输入的内容保存在回答这个语句中。
接着,回答语句作为输入项被传送到接车这个自制积木中。
接车这个自制积木才是火车站广播系统的核心代码,它是系统语音的后台拼接控制模块。
首先,我们一起看一下这个核心模块中最重要的资源:声音。点击软件左上角的声音选项卡后,会发现这里已经上传了很多很多的声音文件。
这些声音文件就是实现广播系统必不可少的资源,我们将一句话拆分成单个的词或者字,比如:“注意、高、2、3、4、次列车即将到达本站、请做好准备”。我们就将这些词或者字录制成声音并上传到Scratch软件中,然后再通过拼接组合成不同的句子。果冻老师将接机的声音文件分成了四组:词语“注意”是一组,字母“G、Z、D、K”是一组,数字“0-9”是一组,词语“准备、接车”是一组。
例如,输入G234之后,先取出“准备”的声音,然后从第二组中取出字母“G”的声音,再从第三组中分别取出数字“2”的声音、数字“3”的声音和数字“4”的声音,最后取出“准备接车”的声音,将以上取出的声音再按顺序拼接起来,就组成了“注意,高234次列车即将到达本站,请做好准备”完整的接车广播声音。
接车的代码中使用到了循环这个变量,它是一个数字型的辅助变量,作用是记录当前正在获取第几位数字,协助将车次中的数字一个一个取出来。循环变量从0开始,每重复执行一次它的值就会增加1。
上面的代码看似很长,其实不难,就是通过播放声音语句和循环这个变量,从声音库中取出车次信息对应的声音文件,并一个字个一字的读出来,这样连起来就是接车按钮的广播内容了。
检票
接着,我们来看第二个按钮:检票。检票的意思呢就是火车出发的时间即将到了,需要检查上车旅客的车票是否和火车的车次一致。这里需要我们输入三个信息:火车车次、检票口1、检票口2。
与接车不同的是,检票的代码中需要将输入的三个信息先存入变量或者列表中,然后再将这三个存有车次、检票口1、检票口2的变量或列表值传递给检票的自制积木中。
检票积木的代码逻辑与接车是非常类似的,也是通过循环变量一个一个读出车次信息,并且根据检票口的数字读出不同的内容,要注意的是检票积木的代码有两个重复执行,分别是用中文和英文广播相同的信息。
停止检票
第三个按钮,也是最后一个按钮,停止检票,火车马上就要出发了,检票窗口即将关闭,语音广播督促还没有上车的旅客赶紧检票上车。
停止检票这个自制积木的代码逻辑与接车的逻辑基本上是一模一样的,老师就不贴在这里了,大家自己看源代码哦。 好了,火车站广播系统的解析到这里就结束了,是不是有点快呀?但是这个作品它真的就只有这些内容。:) 总结经过前面五个作品的学习,同学们应该都会认为竞赛获奖的作品必须是代码复杂庞大、编程技术高超的。但是,果源同学的作品《火车站广播系统》并没有这些特点,相反它简单易懂,使用的编码逻辑在之前的作品中都见到过,可它同样得到了评委们的认可,并且获得了一等奖。果冻老师认为这其中的原因主要在于这个作品的实用性,我们学习编程的目的并不是为了制作游戏,而是为了解决生活工作中各种各样重复的麻烦的问题,让它们变得自动化、智能化,甚至为了未来人工智能的世界提前做好准备,国家设立少儿编程竞赛的初衷应该也是这样的。果源同学的广播系统虽然简单,但是相比其它作品它更加的接近比赛选拔的目的,它的命题更具有优势。果冻老师相信这个广播系统再进行一些完善都可以实际应用到一些车站中,大家可以想象到之前广播站的阿姨们每天要广播好多好多的信息,有了这个系统之后就可以实现常规信息的电脑自动化,她们的工作一下子就会轻松不少,这就是这个作品的意义。