我使用Javascript创建了一个简单的脚本,它生成一个介于0-5 + 1之间的随机数(Dice。)我的问题是,当我按下按钮时,它没有任何一半时间强迫我将垃圾按钮多个骰子卷出现之前的时间。
我到处寻找,但找不到任何问题可能是什么问题。 这是我的代码:
<html>
<head>
</head>
<body>
<button type="button" onclick="spin()">Click here to roll the Dice!</button>
<img src="" id="demo">
<script>
function spin() {
if (Dice() == 1) {
document.getElementById("demo").src="http://i.imgur.com/QRTs9Ax.png";
}
else if (Dice() == 2) {
document.getElementById("demo").src="http://i.imgur.com/OMz1o8U.png";
}
else if (Dice() == 3) {
document.getElementById("demo").src="http://i.imgur.com/J4Xx2yO.png";
}
else if (Dice() == 4) {
document.getElementById("demo").src="http://i.imgur.com/CJb2ojk.png";
}
else if (Dice() == 5) {
document.getElementById("demo").src="http://i.imgur.com/8W6UL5O.png";
}
else if (Dice() == 6) {
document.getElementById("demo").src="http://i.imgur.com/NGxBete.png";
}
}
</script>
<script>
function Dice() {
return Math.floor(Math.random() * 6) + 1;
}
</script>
</body>
</html>
答案 0 :(得分:2)
因为 Math.floor(Math.random() * 6) + 1;
可以返回7
。
修改强>
Math.floor(Math.random() * 6) + 1;
无法根据Mozilla Developers返回7
,因为Math.random()
不包含1
和Math.floor
削减该值,以便您始终在1
和6
之间重复一次。
问题在于,使用if (Dice() == x)
启动函数,因此它将为所有is语句返回不同的vaule。你必须像这样构建一个switch:
function spin() {
switch (Dice()) {
case 1:
document.getElementById("demo").src = "http://i.imgur.com/QRTs9Ax.png";
break;
case 2:
document.getElementById("demo").src = "http://i.imgur.com/OMz1o8U.png";
break;
case 3:
document.getElementById("demo").src = "http://i.imgur.com/J4Xx2yO.png";
break;
case 4:
document.getElementById("demo").src = "http://i.imgur.com/CJb2ojk.png";
break;
case 5:
document.getElementById("demo").src = "http://i.imgur.com/8W6UL5O.png";
break;
case 6:
document.getElementById("demo").src = "http://i.imgur.com/NGxBete.png";
break;
}
答案 1 :(得分:1)
将dice()
的值存储一次到变量并使用if语句进行检查。您每次都重新生成该值,因此无法保证在检查时您将获得当前值。
此外,正如paolo所述, Math.floor(Math.random() * 6) + 1;
可以返回7
。
<html>
<head>
</head>
<body>
<button type="button" onclick="spin()">Click here to roll the Dice!</button>
<img src="" id="demo">
<script>
function spin() {
var dice = Dice();
if (dice == 1) {
document.getElementById("demo").src="http://i.imgur.com/QRTs9Ax.png";
}
else if (dice == 2) {
document.getElementById("demo").src="http://i.imgur.com/OMz1o8U.png";
}
else if (dice == 3) {
document.getElementById("demo").src="http://i.imgur.com/J4Xx2yO.png";
}
else if (dice == 4) {
document.getElementById("demo").src="http://i.imgur.com/CJb2ojk.png";
}
else if (dice == 5) {
document.getElementById("demo").src="http://i.imgur.com/8W6UL5O.png";
}
else if (dice == 6) {
document.getElementById("demo").src="http://i.imgur.com/NGxBete.png";
}
}
</script>
<script>
function Dice() {
return Math.floor(Math.random() * 6) + 1;
}
</script>
</body>
</html>
答案 2 :(得分:1)
您尝试通过在地板之后将0
增加+ 1
来保持随机数返回Math.random()
。但是,当1.0
完全返回6
时,您的乘法会产生6
,它会被+ 1
覆盖,然后会7
添加5
,它return Math.floor(Math.random() * 5) + 1;
。
相反,只需将Math.ceil()
的随机数加倍。
return Math.ceil(Math.random() * 6);
或者,更简单地说,只需使用strcmp(thestring,F("knownstring"))
即可。这将始终向上舍入到最接近的整数。
const PROGMEM char *
答案 3 :(得分:0)
你在其他所有if语句上调用Dice()
函数。
我已经创建了a fiddle,您可以在控制台上看到已生成的号码,但您的旋转功能将如下所示:
function spin() {
var number = Dice();
console.log(number);
switch (number) {
case 1:
document.getElementById("demo").src="http://i.imgur.com/QRTs9Ax.png";
break;
case 2:
document.getElementById("demo").src="http://i.imgur.com/OMz1o8U.png";
break;
case 3:
document.getElementById("demo").src="http://i.imgur.com/J4Xx2yO.png";
break;
case 4:
document.getElementById("demo").src="http://i.imgur.com/CJb2ojk.png";
break;
case 5:
document.getElementById("demo").src="http://i.imgur.com/8W6UL5O.png";
break;
case 6:
document.getElementById("demo").src="http://i.imgur.com/NGxBete.png";
break;
}
}
此外,您可能会多次获得相同的号码,因为它是随机的。
答案 4 :(得分:0)
仅仅因为Dice()
没有静态值并且可能会为每个if语句返回不同的值,也可能返回带有多个if的相同随机数。
因此,将生成的数字存储在变量中,然后根据需要执行if语句。
以下示例基于从imgs
数组中选择随机图像,并应按照您的代码执行任务。
//add images what ever.
var imgs = [
"http://i.imgur.com/QRTs9Ax.png",
"http://i.imgur.com/OMz1o8U.png",
"http://i.imgur.com/J4Xx2yO.png",
"http://i.imgur.com/CJb2ojk.png",
"http://i.imgur.com/8W6UL5O.png",
"http://i.imgur.com/NGxBete.png"
];
function spin() {
var d = Dice(); //store the number in a variable
//Dice(5); ===> if you want the max random number will be 5
var i = d-1; //to get the right position in array
if(imgs[i])document.getElementById("demo").src = imgs[i];
//Also if you want additional statements use if(d == 1){}else if(d == 2){}
}
function Dice(max){
max = max || imgs.length;
return Math.floor(Math.random() * max) + 1;
}