我们这次的课题是做一个考验记忆力的小游戏——翻牌游戏,程序本身的逻辑意外的简单,生成一组有序的成对的数字,随机抽取并将其赋值给对应数量的克隆体。默认克隆体显示牌的背面,当被点击后显示牌的正面。
翻牌游戏模板下载
因为牌被翻开两张之后才进行比对,第一张翻开之后不允许用户再次点击,所以这个游戏我们并不需要做按键防抖,只需要在克隆体被点击之后,将一个私有变量“_禁止点击”设置为1即可。这里还设置了一个名为“开牌计数器”的变量,用于统计翻开纸牌的数量,当被翻开的纸牌数量大于一张时,我们进入对比的流程。
这里有一个很有意思的现象,如果缺少了这一块“等待0.8秒”的积木,当两张纸牌相同时,仅有一张会被消除,也就是说,会产生一个“BUG”。这是因为被翻开的纸牌一共两张,所以符合条件的私有变量“_禁止点击”等于1的克隆体一共两个,在重复运行过程中,第一个符合条件的克隆体直接删除掉了列表的其中一项,于是列表对比这一语句也就配不上对了。
克隆体就象排着队列运动的小狼,当第一只狼把羊吃掉以后,显然后面的狼就没法再吃到羊了。
等待时间就像一条河流,当第一只狼到达河边,准备等待0.8秒后跳过去的时候,后面的狼也没有闲着,争先恐后也赶到了河边,这个时候羊还没有被吃掉,判断牌面比较用的列表也还没有被删除。
等到等待时间走完,河对面的符合条件的克隆体早已经跃跃欲试。除了等待“x”秒之外,Scratch很多时间相关的积木都有这个效果,比如思考多长时间,说“xxx”多少时间。用在克隆体身上,就起了奇妙的化学反应。
不使用等待时间的情况
如果不采用这个机制,那么我们可能需要另外设置一个变量作为计数器,用来统计已经被修改正确的克隆体的数量,当满足数量条件后,再行修改或者复位程序相关的参数。而在这个翻牌游戏的案例中,因为翻牌之后需要一段时间让用户肉眼确认一下结果,所以应用等待时间来完善程序是一个一举两得的方案。