Я пытался собрать простой симулятор «Рок, бумага, ножницы», чтобы произвести впечатление на мою сестру, что я и сделал, но случайная часть кода не работала каждый раз. Вот:

<!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>

Пожалуйста, дайте мне знать, что я сделал неправильно, как я могу улучшить это в будущем, и что можно сделать, чтобы спасти это.

Спасибо.

-1
DJHakim 15 Дек 2015 в 18:19

3 ответа

Лучший ответ

Ваша семантика Math.random неверна. Попробуй это:

ai = Math.floor(Math.random() * 3 + 1);

Теперь вы получаете Win, Lose или Tie случайно

2
Siyual 15 Дек 2015 в 16:31
<!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>
0
M.James 15 Дек 2015 в 15:36

В линии:

ai= Math.floor(Math.random()+1*3);

Вы должны помнить, что математические операторы имеют определенный порядок. Умножение происходит перед сложением, поэтому в том виде, в каком оно написано, это означает, что нужно взять 1 * 3 (или 3) и добавить его или Math.random(). Я предполагаю, что вы всегда получаете 3. Лучшее и самое ясное решение обычно заключается в использовании скобок. Вот как это должно быть написано:

ai = (Math.floor(Math.random()*3)+1);
1
Hanlet Escaño 15 Дек 2015 в 15:26