Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 随机if/else行为-石头、布、剪刀游戏_Javascript - Fatal编程技术网

Javascript 随机if/else行为-石头、布、剪刀游戏

Javascript 随机if/else行为-石头、布、剪刀游戏,javascript,Javascript,因此,我已经为此工作了一段时间,不明白为什么我的if/else语句不能控制台。根据计算机和播放器的选择记录正确的响应它似乎会返回一个随机语句,而不管来自播放器或计算机的输入。另外,我不明白为什么它会提示我输入两次。 我知道还有其他方法可以在控制台中构建一个简单的RPS游戏,但我不明白为什么这个方法不能具体工作。我更担心的是,我在构建一个简单的游戏时遗漏了哪些步骤,这些步骤对于以后的其他项目至关重要。我在这方面显然是新手,我正在通过Odin项目网站进行这方面的工作,以供参考。提前非常感谢您的帮助!

因此,我已经为此工作了一段时间,不明白为什么我的if/else语句不能控制台。根据计算机和播放器的选择记录正确的响应它似乎会返回一个随机语句,而不管来自播放器或计算机的输入。另外,我不明白为什么它会提示我输入两次。

我知道还有其他方法可以在控制台中构建一个简单的RPS游戏,但我不明白为什么这个方法不能具体工作。我更担心的是,我在构建一个简单的游戏时遗漏了哪些步骤,这些步骤对于以后的其他项目至关重要。我在这方面显然是新手,我正在通过Odin项目网站进行这方面的工作,以供参考。提前非常感谢您的帮助!不管怎样,代码如下:

  <script>
    function computerChoice() {
      let choices = ['rock', 'paper', 'scissors'];
      let result = choices[Math.floor(Math.random() * choices.length)];
      return result
    };

    let playerSelection = function() {
      let playerChoice = prompt('What do you choose, young Padawan?')
      return playerChoice.toLowerCase()
    };

    let computerSelection = computerChoice();

    console.log(computerChoice());
    console.log(playerSelection());

    function play(playerSelection, computerSelection) {
      if (playerSelection === 'rock' && computerSelection === 'paper') {
        console.log('Paper beats rock! Computron wins!');
      } else if (playerSelection === 'rock' && computerSelection === 'scissors') {
        console.log('Rock smash scissors! You win!');
      } else if (playerSelection === 'paper' && computerSelection === 'rock') {
        console.log('Paper covers rock! You win Starlord!');
      } else if (playerSelection === 'paper' && computerSelection === 'scissors') {
        console.log('Scissors cuts paper! Thanos is king!'); 
      } else if (playerSelection === 'scissors' && computerSelection === 'paper') {
        console.log('Scissors cuts paper! The Avengers avenge!'); 
      } else if (playerSelection === 'scissors' && computerSelection === 'rock') {
        console.log('Rock smash! Avengers suck!');
      } else {
        console.log('Tie! You must select a different weapon!');
        }   
    };

      play();

  </script>

函数选择(){
让选择=[‘石头’、‘布’、‘剪刀’];
让结果=选择[Math.floor(Math.random()*choices.length)];
返回结果
};
让playerSelection=函数(){
let playerChoice=prompt('你选择什么,年轻的学徒?')
return playerChoice.toLowerCase()
};
让计算机选择=计算机选择();
console.log(computerChoice());
console.log(playerSelection());
功能播放(播放器选择、计算机选择){
如果(playerSelection==='rock'和&computerSelection==='paper'){
log('Paper击败rock!Computron获胜!');
}else if(playerSelection==='rock'和&computerSelection==='scissors'){
console.log(“石头砸剪刀!你赢了!”);
}否则如果(playerSelection==='paper'和&computerSelection=='rock'){
原木('纸盖石头!你赢了星主!');
}否则如果(playerSelection==='paper'和&computerSelection==='scissors'){
原木(“剪刀剪布!塔诺斯为王!”);
}else if(playerSelection===‘剪刀’和&computerSelection===‘纸’){
原木(“剪刀剪纸!复仇者复仇!”);
}否则如果(playerSelection===‘剪刀’和&computerSelection===‘石头’){
console.log('Rock-smash!复仇者很烂!');
}否则{
log('Tie!您必须选择其他武器!');
}   
};
play();

在这里定义和调用函数的方法多种多样。您可以定义播放器选择函数,但不能像在计算机选择中那样在单个实例中调用它。要使玩家选择与结果一致,请将玩家选择定义为一个函数,然后在记录之前将结果分配给变量

函数计算机选择(){
让选择=[‘石头’、‘布’、‘剪刀’];
让结果=选择[Math.floor(Math.random()*choices.length)];
返回结果
};
函数播放器选择(){
let playerChoice=prompt('你选择什么,年轻的学徒?');
return playerChoice.toLowerCase();
}
让玩家选择=玩家选择();
让计算机选择=计算机选择();
日志(“玩家选择”,玩家选择);
console.log(“计算机选择”,计算机选择);
功能播放(播放器选择、计算机选择){
如果(playerSelection==='rock'和&computerSelection==='paper'){
log('Paper击败rock!Computron获胜!');
}else if(playerSelection==='rock'和&computerSelection==='scissors'){
console.log(“石头砸剪刀!你赢了!”);
}否则如果(playerSelection==='paper'和&computerSelection=='rock'){
原木('纸盖石头!你赢了星主!');
}否则如果(playerSelection==='paper'和&computerSelection==='scissors'){
原木(“剪刀剪布!塔诺斯为王!”);
}else if(playerSelection===‘剪刀’和&computerSelection===‘纸’){
原木(“剪刀剪纸!复仇者复仇!”);
}否则如果(playerSelection===‘剪刀’和&computerSelection===‘石头’){
console.log('Rock-smash!复仇者很烂!');
}否则{
log('Tie!您必须选择其他武器!');
}   
};

播放(播放者选择、计算机选择)您使用
console.log
调用函数时,我添加了一个承诺,确保在选择用户输入之前不会运行任何操作。然后显示,如果是平局,您将重新启动

console.log(computerChoice()); // re-runs function
console.log(playerSelection()); // re-runs function
我还确保在我们开始向用户发送一些警报以进行简短提示之前,页面已加载

document.addEventListener("DOMContentLoaded", function(event) { })
对于computerChoice函数,让我们删除冗余变量,因为我们返回的是变量值。我们改为这样做

return (choices[Math.floor(Math.random() * choices.length)]);
我们对用户输入使用承诺,承诺基本上是一个承诺值或拒绝某个值的函数。调用函数时,使用
。然后((value))
获取值

let playerSelection = function() {
      return new Promise((resolve) => {
        let playerChoice = prompt('What do you choose, young Padawan?')
        console.log(playerChoice); // we log the player choice here instead
        resolve(playerChoice.toLowerCase());
      })
};
我们得到这样的承诺值

playerSelection().then((value) => {  })
函数计算机选择(){
让选择=[‘石头’、‘布’、‘剪刀’];
return(choices[Math.floor(Math.random()*choices.length)];
}
让playerSelection=函数(){
返回新承诺((解决)=>{
let playerChoice=prompt('你选择什么,年轻的学徒?')
console.log(playerChoice);//我们在这里记录玩家选择
解析(playerChoice.toLowerCase());
})
};
//移除控制台日志(playerChoice);调用该函数会导致两个提示
函数播放(){
playerSelection()。然后((playerChoice)=>{
让computerSelection=computerChoice();//我们每次都想要一个新的。
如果(播放选择==='rock'&计算机选择==='paper'){
log('Paper击败rock!Computron获胜!');
}否则如果(playerChoice==='rock'和&computerSelection==='scissors'){
console.log(“石头砸剪刀!你赢了!”);
}否则如果(playerChoice=='paper'和&computerSelection==='rock'){
原木('纸盖石头!你赢了星主!');
}否则如果(playerChoice=='paper'&&compute)