准备实现一个计算24点的小游戏,由Scratch随机发4张牌,由玩家判断是否可以通过混合运算求出24点。在博主所在的地区,花牌“J,Q,K”分别代表“11,12,13”,游戏的流程考虑这样实现,允许用户从左至右排列好待算纸牌的顺序,给出第一步的运算符号选择按钮,第一步的运算符确定第一张牌与第二张牌的运算方式,当用户确认第一步的运算符后,再给出第二和第三个运算符,以此减少游戏的走向分支,达到简化程序的目的。首先,我们来实现排列纸牌顺序的功能。
卡牌交换模板文件
首先是卡牌的布局与一些参数设定,这里用“_”开头的变量为私有变量,在某个视频里看到了这种命名方式,觉得是一个很好的方法,另外请忽略图中最后的这个公共变量“鼠标防抖”,在这个案例中,只有在“卡牌移动状态监控”这个变量为0时才允许鼠标点击,而卡牌移动这个过程时间较长,并不容易引起误点击。所以这个变量最后并没有用上,千言万语汇总成四个字——“忘记删了”。
私有变量“_卡牌位置”给定了卡牌的初始位置,当两张邻近卡牌前后交换位置后,这个变量也需要实时交换,卡牌的面值被存入了一个列表中,卡牌交换位置后,列表中的数据也需要被交换,这个列表后续在计算结果时会需要用到。利用列表来计算结果,个人感觉比直接在克隆体总循环中提取“_卡牌面值”这样的私有变量要方便一些。
布局好后的卡牌,位置从左右依次为“1,2,3,4”。关于卡牌禁用列表,因为只有4张牌,准备只实现从右至左换牌的功能,默认状态第一张牌不支持点击,随着运算进程的改变,当第一个运算符被确定后,第2与第3张牌也会被加入列表,只剩第4张牌允许点击。当第二个运算符被确定,所有卡牌都会被禁用。因为运算顺序大局已定,再换牌就要出bug了。
一个点击实现两个克隆体的动作,思路是去修改一个公共变量,这里的关键变量就是“点击卡牌”,这个变量默认为0,当2号牌被点击后,公变量会被修改成卡牌的位置变量,也就是“点击卡牌”被赋值为了2,这个时候两个移动判断条件就满足了,这里“_卡牌移动生效”是一个私有变量,开始移动后被修改为1,效果类似于按键防抖,确保该卡牌移动操作只被执行一次。所以虽然上下两个判断都有“_卡牌移动生效”这个参数,实际针对的是两个不同的克隆体,两者并不冲突哦。
为了更精确的掌握移动动作的进程,这里在移动前和移动后都添加了“卡牌移动状态监控”这个变量,在卡牌开始动作时,这个监控为2,卡牌移动结束后,这个监控会最终变为4,将一些动作过程中被修改的参数复原的工作我们需要等到监控变为4之后,判断判断是否有牌没有移动,则只要判断该值是否小于2就可以了,大于等于2的时候,说明已经有两张牌开始了动作,就没必要再去筛选待移动的克隆体了。
移动结束将数据复原的模块,注意这里有一个名为“卡牌移动生效计数器”的变量,移动卡牌过程中,有两张卡牌的私有变量“_卡牌移动生效”被修改了,复原时,我们也要确保这两张卡牌都会恢复了原样,这里使用了一个计数器,复原一张,我们就增加一次计数,当两张都恢复原状后,再进行数据还原的操作。这个时候,一个完整的卡牌移动过程就圆满结束了。本文中提供的实例,请在全屏下测试,在代码窗口测试时,需要注意当鼠标长按点击,会触发角色的拖拽功能,导致出现预期外的结果,这是程序的功能冲突,真的不是代码逻辑问题哦。