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

目录

    • 前言
    • 算法研究
    • 核心代码
    • 最终效果
    • 小插叙
    • 体验地址
    • 项目地址
    • 特别感谢

前言

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

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

『003』闲下来,写个算24点的工具吧(ノωく)_第1张图片

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

『003』闲下来,写个算24点的工具吧(ノωく)_第2张图片

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

算法研究

说到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,不然还可以更快

『003』闲下来,写个算24点的工具吧(ノωく)_第3张图片

小插叙

小青说少玩游戏,特别是这类游戏的整体感觉还不行(哈哈,论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

你可能感兴趣的:(文章分享之路,24,计算,小游戏)