Я пытался собрать простой симулятор «Рок, бумага, ножницы», чтобы произвести впечатление на мою сестру, что я и сделал, но случайная часть кода не работала каждый раз. Вот:
<!DOCTYPE html>
<html>
<body>
<button type="button" onclick="rps(1)">Rock</button>
<button type="button" onclick="rps(2)">Paper</button>
<button type="button" onclick="rps(3)">Scissors</button>
<script>
var ai= null;
var rps=function(type){
ai= Math.floor(Math.random()+1*3);
switch(ai){
case 1:
switch(type){
case 1:
alert("Tie");
break;
case 2:
alert("Win");
break;
case 3:
alert("Loose");
break;
}
break;
case 2:
switch(type){
case 1:
alert("Loose");
break;
case 2:
alert("Tie");
break;
case 3:
alert("Win");
break;
}
break;
case 3:
switch(type){
case 1:
alert("Loose");
break;
case 2:
alert("Tie");
break;
case 3:
alert("Win");
break;
}
break;
default:
alert("Error");
break;}
};
</script>
</body>
</html>
Пожалуйста, дайте мне знать, что я сделал неправильно, как я могу улучшить это в будущем, и что можно сделать, чтобы спасти это.
Спасибо.
3 ответа
Ваша семантика Math.random
неверна. Попробуй это:
ai = Math.floor(Math.random() * 3 + 1);
Теперь вы получаете Win, Lose или Tie случайно
<!DOCTYPE html>
<html>
<body>
<button type="button" onclick="rps(1)">Rock</button>
<button type="button" onclick="rps(2)">Paper</button>
<button type="button" onclick="rps(3)">Scissors</button>
<script>
var ai= null;
var rps=function(type){
var typeArray= ['','Rock', 'Paper', 'Scissors'];
ai= Math.floor(Math.random()*3+1);
alert(typeArray[type]);
if(type ===1)
{
if(ai ===1)
{
alert("draws with rock");
}
else if(ai ===2)
{
alert("loss to paper");
}
else if(ai ===3)
{
alert("win vs scissors");
}
}
else if(type ===2)
{
if(ai ===1)
{
alert("win vs rock");
}
else if(ai ===2)
{
alert("draw paper");
}
else if(ai ===3)
{
alert("loss vs scissors");
}
}
else
{
if(ai ===1)
{
alert("loss vs rock");
}
else if(ai ===2)
{
alert("win vs paper");
}
else if(ai ===3)
{
alert("draw with scissors");
}
}
};
</script>
</body>
</html>
В линии:
ai= Math.floor(Math.random()+1*3);
Вы должны помнить, что математические операторы имеют определенный порядок. Умножение происходит перед сложением, поэтому в том виде, в каком оно написано, это означает, что нужно взять 1 * 3
(или 3) и добавить его или Math.random()
. Я предполагаю, что вы всегда получаете 3. Лучшее и самое ясное решение обычно заключается в использовании скобок. Вот как это должно быть написано:
ai = (Math.floor(Math.random()*3)+1);
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.