如何用 Javascript 创建 Game 24 的数字生成器?
随机数生成器应该只生成能够解决 24 问题的数字。仅生成能够解决问题的数字。
游戏规则:
您得到 4 个数字。您需要得到 24。您可以 +、x、- 和 % 这些数字来得到 24。
示例:4、2、8、1
((4-2) + 1) x 8 = 24
随机数生成器应该为您提供 4 个数字,组成 24。您不得获得任何不能组成 24 的数字,例如 1、1、1 和 2。
我只想使用整数。
我想稍微改变一下游戏。我可能不想总是使用 24,而是使用不同的数字,例如初学者使用 12,高级玩家使用 55,等等。
我是一个初学者,目的是学习 JavaScript。任何解释都会很棒。
最佳答案
这个 fiddle 展示了一种获取一系列数字的方法,这些数字可以以某种方式加起来为给定的数字:
这是一种获取“随机”数字的简单方法,因为我只需对随机操作求和并在最后插入一个受控操作,以确保它可以产生所需的目标。
对于那些不想点击链接的人,我将转储下面的源代码:
console.clear();
function getNumberGame(target, length) {
console.clear();
var dataset = [];
var methods = {
'add' : function (a, b) {
return (a + b);
},
'subtract' : function (a, b) {
return a - b;
},
'multiply' : function (a, b) {
if (a !== 0 && b !== 0 && a < Infinity && b < Infinity) {
return Math.round(a * b);
} else {
return false;
}
},
'divide' : function (a, b) {
if (a !== 0 && b !== 0 && a < Infinity && b < Infinity) {
return Math.round(a / b);
} else {
return false;
}
}
}
for (var i = 0; i < length - 1; i++) {
var obj = {
value : Math.round(Math.random() * target) + 1,
method : Object.keys(methods)[Math.floor(Math.random() * Object.keys(methods).length)]
};
dataset.push(obj);
}
delete dataset[0].method;
var data = dataset[0].value * 1;
console.log('Start with ' + data);
for (var i = 1; i < dataset.length; i++) {
data = methods[dataset[i].method](data, dataset[i].value);
console.log(dataset[i].method + " " + dataset[i].value + " to get " + data);
}
if (data > target) {
dataset.push({
value : Math.round(Math.abs(data - target)),
method : 'subtract'
});
console.log("subtract " + dataset[dataset.length - 1].value + " to get " + target);
} else if (data < target) {
dataset.push({
value : Math.round(Math.abs(data - target)),
method : 'add'
});
console.log("add " + dataset[dataset.length - 1].value + " to get " + target);
}
var returnArray = [];
while (dataset.length > 0) {
var i = Math.floor(Math.random() * dataset.length);
returnArray.push(dataset[i].value);
dataset.splice(i, 1);
}
console.log(returnArray);
alert("Make \"" + target + "\" by combining these " + length + ":\n" + returnArray.join(', '));
return returnArray;
}
getNumberGame(parseInt(prompt("Target number", 24)), parseInt(prompt("Steps", 4)));
编辑 1
请注意,乘法
和除法
函数中没有检查Infinity
或0
,这可能会导致在一些奇怪的行为中。在这种情况下,我的代码只是返回 0
(通过返回 false
)。
关于javascript - 24 Math Game - Javascript 中的随机数生成器和求解器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37317622/