突然想起原来手机上玩的小游戏,随便写几个数字,然后告诉你是几A几B的。这么多年衍生除了很多玩法,桌游有个 MASTERMIND,淘宝、京东都有售。
玩起来也很有趣。

今天闲来,做了个javascript版的,https://tools.dyniao.com/4digits.html

具体实现:
首先生成4个数字不重复的数字串,我用的是0-9的数组,把数组乱序,在随机从1-6的位置取4个数字。
之后根据输入的字符判断几个A几个B,如果位置和数字正确是A,则跳过判断是否是B,循环往复判断出正确与否。
简单写写,判断的不完善,可优化的地方还很多,有时间优化优化。

以下是完整JS

var k = 8; //可以猜测的次数
        var correct = false; //判断正确
        var base = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]; //随机的数组
        var start = parseInt(Math.random() * 6,10); //取数组的开始位置
        var num = 0;//已猜测的数
        var setArray=[];
        //打乱数组
        base.sort(function () {
            return Math.random() > .5 ? -1 : 1;
        });
        //取4位随机字符串生成答案的数组
        setArray = base.slice(start, start + 4);
        function g(id) {
            return document.getElementById(id);
        }
        function Html(text) {
            g("result").innerHTML = text;
        }
        function getValue() {
            Html("答案是:" + setArray.join(""));
        }
        function filterStr(str) {
            var ar2 = str.split("");
            var array = new Array();
            var j = 0
            for (var i = 0; i < ar2.length; i++) {
                if ((array == "" || array.toString().match(new RegExp(ar2[i], "g")) == null) && ar2[i] != "") {
                    array[j] = ar2[i];
                    array.sort();
                    j++;
                }
            }
            return array;
        }
        function matchValue() {
            if (num < k) {
                var inputValue = g("number").value.replace(/\s/g, '').substring(0, 4);//去除所有空格并截取4位
                var inputArray = inputValue.split("");
                var a = 0, b = 0;
                if (inputArray.length == 0) {
                    Html("请输入4位不重复的数字");
                    return;
                }
                if (filterStr(inputValue).length == 4) {
                    num++;
                    for (var i = 0; i < setArray.length; i++) {
                        if (setArray[i] == inputArray[i]) {
                            a++;
                        } else {

                            for (var j = 0; j < inputArray.length; j++) {
                                if (setArray[i] == inputArray[j]) {
                                    b++;
                                }
                            }
                        }
                    }
                    var result = a + "A" + b + "B";
                    var para = document.createElement("li");
                    var node = document.createTextNode(inputArray.join("") + "\t" + result);
                    para.appendChild(node);
                    var element = document.getElementById("matchlist");
                    element.appendChild(para);
                    if (a == "4") {
                        Html("恭喜答对了!");
                        return;
                    }
                }
                else {
                    Html("输入有误,不能有重复的数字");
                }
            } else {
                Html("8次还没有猜出来么?答案是:" + setArray.join(""));
            }
        }
--- EOF ---
本文链接:
订阅本站:feed
声明:博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

标签: none

添加新评论