因为是想实现一个计算24点的小“游戏”,所以希望游戏过程尽量的简洁,减少一些点击操作,增加一些视觉效果。视觉效果主要体现在卡牌移动上了,现在我们来尝试梳理运算逻辑并简化一些点击事件。前文中也有所提及,博主考虑先提供一个运算符选择按钮,请用户先移动第一步运算的2张牌至左侧。我们将通过一个公共变量“运算流程控制”来判断程序的运算进程,该变量默认值为1。
模板下载
游戏设计流程
卡牌定位完成后,用户通过点击运算按钮弹出子菜单(克隆体实现),选定运算符后锁定,此时“运算流程控制”进入流程2,该按钮以及第2,第3张牌不再允许用户点击,同时弹出第2,第3个运算符选择按钮。
子菜单的实现过程如下,记得要在用户选择后及时清除已生成的克隆体,克隆体的数量有上限,不及时清理很容易就到达数量上限,从而引发难以预料的bug。
当第一个运算符被确定之后,弹出剩余的两个运算符选择按钮。
根据牌的面值,此时的运算会出现分支,可能会接着计算第三张牌,如下图中的第一种情况,也有可能先计算第3张和第4张牌的结果,如下图中的第二种情况。也会有没能计算出正值,但能按顺序算出“-24”的情况,这一类我们在游戏的最终判断绝对值为24的都算过关,所以就以上帝模式将其归为了第一种。
这里博主想在用户运算的时候给用户一些提示,所以不光是用一个列表记录了运算的值,还用一个变量通过连接字符的方式记录了运算的公式。并将这个记录公式的变量实时显示在了屏幕上。顺序运算的流程很容易实现,按第一个运算按钮算出第一张牌与第二张牌的结果,存入“计算结果”列表第一项,第二个运算按钮继续运算“计算结果”第一项与第三张牌的运算结果,并将“计算结果”列表第一项替换为新的结果,最后用“计算结果”第一项与第四张牌的运算结果收尾。遇到上图第二种情况,先算第一二张牌,再算第三四张牌时,我们可以把第三与第四张牌的结果存入“计算结果”列表第二项,当最后一个运算符被确定时,根据运算符来确定“运算结果”第一项与第二项的数学关系。
上图是第一个运算符被确认后执行的运算与记录公式代码,对于第二与第三个运算符,其代码大同小异,但要注意的是,后两个运算符,需要根据“运算流程控制”变量来区分一下不同流程时同一按钮需要完成的工作。有兴趣的亲可以根据博主提供的模板尝试一下哦
当第一个运算符被选定并执行完运算工作之后,我们将“运算流程控制”这个变量增加1,进入下一个流程。当第二个流程结束后,同样需要将这个变量增加1,告知程序当前的运算进度。而当流程执行到3,我们就可以去判断“计算结果”列表第一项的值,等于24则输出运算正确的提示。