『003』闲下来,写个算24点的工具吧(ノωく)

前言

昨天在群里看到了一个分享的小游戏《王者算24点

然后开心地分享了自己340秒10个的战绩

在这里插入图片描述

结果被小青瞬间KO。。她用202秒就结束了

在这里插入图片描述

既然作为程序员,那就用程序员的方式来继续战斗吧~

算法研究

说到24点,无非就是4个数字之间的组合,也不知道是怎么写的,反正我最后算出来是有3888种组合方式,只要算完这3888种,就能找出结果了,不然就是没有结果

  • 先从4个里挑1个
  • 从剩下3个里挑1个
  • 组合后计算出1个新的数字(通过加减乘除)
  • 去掉挑出的2个数字,加入新的数字
  • 循环往复

核心代码

/**
 * 相当与是每一次计算的分布
 * @param arr {Array} 一堆数字
 * @param step {Array} 一堆步骤
 */
function getOneCalc(arr, step) {
    step = step || [];
    for (let i = 0; i < arr.length; i++) {
        for (let j = i + 1; j < arr.length; j++) {
            /** 
             * 0 a+b
             * 1 a-b
             * 2 b-a
             * 3 a*b
             * 4 a/b
             * 5 b/a
             */                     
            for (let z = 0; z < 6; z++) {
                let newVal;
                let newArr = getOtherNum(arr, i, j);
                let newStep = JSON.parse(JSON.stringify(step));
                if (z == 0) {
                	// 计算新的值
                    newVal = Number(arr[i]) + Number(arr[j]);
                    // 用来记录操作方法,最后看出流程用
                    newStep.push(arr[i] + '+' + arr[j]);
                }
                if (z == 1) {
                    newVal = arr[i] - arr[j];
                    newStep.push(arr[i] + '-' + arr[j]);
                }
                if (z == 2) {
                    newVal = arr[j] - arr[i];
                    newStep.push(arr[j] + '-' + arr[i]);
                }
                if (z == 3) {
                    newVal = arr[i] * arr[j];
                    newStep.push(arr[i] + '*' + arr[j]);
                }
                if (z == 4) {
                    newVal = arr[i] / arr[j];
                    newStep.push(arr[i] + '/' + arr[j]);
                }
                if (z == 5) {
                    newVal = arr[j] / arr[i];
                    newStep.push(arr[j] + '/' + arr[i]);
                }
                newArr.push(newVal);
                if (newArr.length !== 1) {
                	// 如果还没有计算到最后的值,就继续计算
                    getOneCalc(newArr, newStep)
                } else {
                	// 如果最后的结果正确,就打印计算流程
                    if (newArr[0] === 24) {
                        console.log(newArr[0], newStep);
                    }
                }
            }
        }
    }
}

最终效果

达成了160秒完成了10题的成就,超越了99%的玩家~

主要是输入和判断还要时间( •̀ ω •́ )y,不然还可以更快

在这里插入图片描述

小插叙

小青说少玩游戏,特别是这类游戏的整体感觉还不行(哈哈,论UI的重要性了),顺带一提,长期寻找UI美术小伙伴一起研发小游戏,有兴趣的可以联系我哈tel:18868196263~

体验地址

https://tekii.cn/public/24/

Chrome里面textarea换行有问题,可以在手机上访问该页面

项目地址

https://gitee.com/ko-orz/24/

特别感谢

[1] 匿名. 《王者算24点》2019-02-12
[2] 小青. 体验游戏 2019-02-20
[3] 写了这篇文章的2019年02月21日21时29分的Maxmon

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值