5.3 设计软件
设计好反应速度测试仪的硬件后,就可以用USB线连接上计算机,设计软件并开始测试了。
互动式作品使用的Scratch软件,是国内Makeblock公司开发的mBlock软件,下载地址为http://www.mBlock.cc/zh-home/download/。这款软件是基于Scratch核心开发的,支持开源硬件的免费软件。
下载安装好后,我们就可以打开软件,开始编写程序了。mBlock软件的主界面如图5.23所示。
图5.23 mBlock软件主界面
1. 整体思路分析
图5.24描述了反应速度测试仪控制程序思路,反应速度测试仪项目是一个标准的互动作品,也就是说,根据测试者操作外围硬件的情况,mBlock软件做出相关的反应。
图5.24 反应速度测试仪控制程序思路
第一步是初始化,将记录按键次数的变量“按键次数”设定为0。
第二步是倒计时3秒,mBlock将开始检测是否按下微动开关。
第三步将同时开启两项工作,这里通过广播“开始测试”,要开始的两项工作都用“当接收到‘开始测试’”作为开始事件,这样实现多种事件同时执行。同时执行之一,是判断是否超过测试时间;同时执行之二,是检测到微动开关被按下并弹起后,计数器增加1。
2. 初始化
反应速度测试仪项目的控制程序一开始,将变量“按键次数”设置为0,这就是本项目的初始化。和所有应用软件一样,初始化设置是相关的一些环境重置。变量“按键次数”用来统计测试者的按键次数,按键就是前面硬件制作时所使用的微动开关,而不是键盘上的某一个键,也不是鼠标左、右键。
3. 倒计时
倒计时是给测试者一个准备时间。如果没有这个准备时间,测试者按下绿旗,程序就开始运行了,这时测试者的手可能还握着鼠标,等测试者把手拿过来,放到微动开关上,开始不断地按下时,要花费一些时间,这样测试出来的按键次数是不准确的。所以,必须要设计一个倒计时。
4. 检测统计按键次数
倒计时3、2、1秒后,将“计时器”归零,mBlock从零开始计时。这时,mBlock开始检测测试者是否按下微动开关。当测试者按下微动开关后,变量“按键次数”增加1。这样一直重复检测,直到计时器设定的时间结束,停止检测。
5. 防“作弊”的程序设计
谈到检测端口的状态,很多读者很容易想到“如果”判断语句,我们把这种方式称为“如果式检测”,如图5.25所示。我们可仔细分析一下,重复检测:如果按下微动开关,变量“按键次数”增加1;如果测试者一直按着不放,会出现什么情况呢?我们测试一下,发现变量“按键次数”瞬间增加很多,这显然不符合我们的设计要求。
图5.25 如果式检测
现在再来看图5.26,“在数字口8=1之前一直等待”,意思就是程序一直在等待测试者按下微动开关,如果测试者不按下微动开关,程序就不会往下执行。测试者按下微动开关后,再继续往下执行。
接下来一条语句是“在数字口8=0之前一直等待”,意思是等待测试者按下微动开关后,再弹起来。微动开关弹起来之后,再将变量“按键次数”增加1,完成计数。这种“按下—弹起—计数”的方式,有效防止了测试者一直按住这类“作弊”情况。
图5.26 等待式检测
6. 检测到超时后,计算并汇报按键速度
图5.27是计时结束后计算并汇报按键速度设计。其中,测试开始后,两项功能将同时工作,一项功能是重复检测测试者是否按下微动开关;另一项功能是判断计时器是否超时。如果超时,立即计算单位时间的按键次数。例子中测试时间是10秒,所以用变量“按键次数”除以10,将计算结果用“说”的方式汇报出来。最后“停止当前脚本”。
图5.27 计时结束后计算并汇报按键速度
至此,程序设计完成。