根据虚拟代理的随机选择产生不同结果的功能

时间:2019-04-27 18:11:01

标签: javascript html

我正在尝试定义一个函数,该函数根据虚拟伙伴的随机选择产生不同的结果。游戏是通过提交实现的。 我创建了一个数组,然后随机选择。接下来,我试图用几个条件实现一个if语句。但是它不会返回警报。 感谢您的意见。

<h1>What is your choice?</h1><br>
<form id="d1">
  <input type="radio" name="choice" value="Cooperate"> Cooperate
  <input type="radio" name="choice" value="Betray"> Betray
</form>
<button onclick="submitAnswer()">Submit Answer</button>
<script>
  function submitAnswer() {
    var selected = document.querySelector('input[type="radio"]:checked').value;
    var myArray = ['Cooperate', 'Betray'];
    var rand = myArray[Math.floor(Math.random() * myArray.length)];
    if (selected === "Cooperate" || rand === "Cooperate") {
      alert("2");
    } else if (selected === "Betray" || rand === "Cooperate") {
      alert("3");
    } else if (selected === "Cooperate" || rand === "Betray") {
      alert("0");
    } else if (selected === "Betray" || rand === "Betray") {
      alert("1");
    }
  }
</script>

3 个答案:

答案 0 :(得分:1)

您有一些流氓括号。在Javascript中,整个条件子句必须用方括号括起来。另外,为了防止自动提交,请将按钮的类型设置为“按钮”。试试这个:

<h1>What is your choice?</h1><br>
<form id="d1">
  <input type="radio" name="choice" value="Cooperate"> Cooperate
  <input type="radio" name="choice" value="Betray"> Betray
</form>
<button type="button" onclick="submitAnswer()">Submit Answer</button>
<script>
  function submitAnswer() {
    var selected = document.querySelector('input[type="radio"]:checked').value;
    var myArray = ['Cooperate', 'Betray'];
    var rand = myArray[Math.floor(Math.random() * myArray.length)];
    if (selected === "Cooperate" || rand === "Cooperate") {
      alert("2");
    } else if (selected === "Betray" || rand === "Cooperate") {
      alert("3");
    } else if (selected === "Cooperate" || rand === "Betray") {
      alert("0");
    } else if (selected === "Betray" || rand === "Betray") {
      alert("1");
    }
  }
</script>

答案 1 :(得分:1)

而不是所有的if / thens,您可能只有一种可能性。然后,您可以使用二进制标志和二进制or来确定要选择的元素。 coop将是20(在二进制1000中,而背叛可能是10。在一起将产生4种不同的可能性:00011011对应于整数0到4。

const responses = [
  "coop - coop",
  "coop - betray",
  "betray - coop",
  "betray - betray"
]

function submitAnswer() {
  var selected = document.querySelector('input[type="radio"]:checked').value;
  var myArray = ['Cooperate', 'Betray'];
  var rand = Math.floor(Math.random() * myArray.length);
  // selected or'd with rand = correct array index
  console.log(responses[selected | rand])
}
<h1>What is your choice?</h1><br>
<form id="d1">
  <input type="radio" name="choice" value=0> Cooperate
  <input type="radio" name="choice" value=2> Betray
</form>
<button onclick="submitAnswer()">Submit Answer</button>

这将使您无需很多代码即可包含许多不同的二进制选择。

答案 2 :(得分:1)

您的问题已得到回答,但我想指出,在您的if语句中,永远不会达到最后两种情况。我认为您打算使用“ &&”运算符(或者在此示例中可能缺少某些内容)。无论如何,您可以考虑将其更改为以下内容:

if ( selected === "Betray" ) {
  if ( rand === "Betray" ) {
    alert( "1" );
    return;
  }
  else if ( rand === "Cooperate" ) {
    alert( "2" );
    return;
  }
}
else if ( selected === "Cooperate" ) {
  if ( rand === "Betray" ) {
    alert( "3" );
    return;
  }
  else if ( rand === "Cooperate" ) {
    alert( "4" );
    return;
  }
}