Javascript 版的猜数字 *A*B
突然想起原来手机上玩的小游戏,随便写几个数字,然后告诉你是几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 ---