Javascript 为Odin项目Rock、Paper、Scissor努力循环函数并返回正确的结果。什么';我的代码怎么了?

Javascript 为Odin项目Rock、Paper、Scissor努力循环函数并返回正确的结果。什么';我的代码怎么了?,javascript,Javascript,我一直在努力从Odin项目中制作一个Javascript的石头、布、剪刀游戏。我可以让基本的游戏工作,但一旦我尝试在一个新函数中调用原始函数并循环它,我就会遇到问题。我目前的问题是,我可以让我的game()函数给出5个结果,但结果是相同的(5胜5负或5平)。我不知道怎么了。起初我认为这可能是因为我在每个案例之后都使用了return。在删除return之后,直到playRound()结束,我仍然遇到同样的问题。(我目前将玩家选择设置为rock,以便更容易跟踪/避免处理弹出窗口) 我是一个初学者,仍

我一直在努力从Odin项目中制作一个Javascript的石头、布、剪刀游戏。我可以让基本的游戏工作,但一旦我尝试在一个新函数中调用原始函数并循环它,我就会遇到问题。我目前的问题是,我可以让我的game()函数给出5个结果,但结果是相同的(5胜5负或5平)。我不知道怎么了。起初我认为这可能是因为我在每个案例之后都使用了return。在删除return之后,直到playRound()结束,我仍然遇到同样的问题。(我目前将玩家选择设置为rock,以便更容易跟踪/避免处理弹出窗口)

我是一个初学者,仍然有很多知识上的不足,所以如果你能像我5岁那样解释你的答案,我将不胜感激

/*variable declarations*/
var result = {win:0, tie:0, loss:0};
let playerChoice= "rock";
//let playerChoice = prompt("Rock, Paper, or Scissors");
const computerSelection = computerPlay();
const playerSelection = caseInsensitive();

let win = "You win";
let tie = "tie";
let loss = "You lose";

function computerPlay(){
  let a = Math.floor(Math.random() * 11);
 switch (a){
   case 0:
   case 1:
   case 2:
   case 3:
     return "rock";
   case 4:
   case 5:
   case 6:
   case 7:
     return "paper";
   default:
     return "scissors";
 }
}


function caseInsensitive(){
    return playerChoice.toLowerCase();
 }


function playRound(playerSelection, computerSelection){
let round;

 if(playerSelection==="rock"){
  switch(computerSelection){
  case "paper":
  round= loss;
  break;
  
  case "rock":
  round =tie;
  break;
   
  case "scissors":
  round= win;
  break;
  }
 }
 
  if(playerSelection=="paper"){
  switch(computerSelection){
  case "scissors":
  round= loss;
  break;
 
  case "paper":
  round = tie;
  break;
 
  case "rock":
  round = win;
  break;
  }
 }

 if(playerSelection=="scissors"){
  switch(computerSelection){
  case "rock":
  round= loss;
  break;
 
  case "scissors":
  round= tie;
  break;

  case "paper":
  round= win;
  break;
   }
  }
  return round;
 }   

function game(){
  for(i=0;i<5;i++){
  console.log(playRound(playerSelection, computerSelection));
      if(playRound()==win){
            result.win++;
        }else if(playRound()==tie){
        result.tie++;
        }else{
        result.loss++;
    }
    }
  
  console.log("Wins: " +result.win);
  console.log("Losses: " +result.loss);
  console.log("Ties: " +result.tie);
}
game();
/*变量声明*/
var结果={赢:0,平:0,输:0};
让玩家选择“摇滚”;
//让玩家选择=提示(“石头、布或剪刀”);
const computerSelection=computerPlay();
const playerSelection=不区分大小写();
let win=“你赢了”;
让tie=“tie”;
let loss=“你输了”;
函数computerPlay(){
设a=Math.floor(Math.random()*11);
开关(a){
案例0:
案例1:
案例2:
案例3:
返回“岩石”;
案例4:
案例5:
案例6:
案例7:
返回“文件”;
违约:
返回“剪刀”;
}
}
函数不区分大小写(){
return playerChoice.toLowerCase();
}
功能playRound(玩家选择、计算机选择){
让它转过来;
如果(玩家选择==“摇滚”){
开关(计算机选择){
案例“文件”:
轮=损失;
打破
案例“岩石”:
圆形=平局;
打破
案例“剪刀”:
回合=胜利;
打破
}
}
如果(playerSelection==“纸张”){
开关(计算机选择){
案例“剪刀”:
轮=损失;
打破
案例“文件”:
圆形=平局;
打破
案例“岩石”:
回合=胜利;
打破
}
}
如果(玩家选择=“剪刀”){
开关(计算机选择){
案例“岩石”:
轮=损失;
打破
案例“剪刀”:
圆形=平局;
打破
案例“文件”:
回合=胜利;
打破
}
}
回程;
}   
函数游戏(){

for(i=0;i下面是代码的工作版本。要更改的主要内容是每次生成计算机选择(因此在循环开始时调用
computerPlay()
)并将该轮的结果存储在循环中。
playRound
不带参数使用参数
null
执行新的计算,并始终返回损失

/*variable declarations*/
let result = {win: 0, tie: 0, loss: 0};
let playerChoice = "rock";
//let playerChoice = prompt("Rock, Paper, or Scissors");

let win = "You win";
let tie = "tie";
let loss = "You lose";

function computerPlay() {
    let a = Math.floor(Math.random() * 11);
    switch (a) {
        case 0:
        case 1:
        case 2:
        case 3:
            return "rock";
        case 4:
        case 5:
        case 6:
        case 7:
            return "paper";
        default:
            return "scissors";
    }
}


function caseInsensitive() {
    return playerChoice.toLowerCase();
}


function playRound(playerSelection, computerSelection) {
    let round;

    if (playerSelection === "rock") {
        switch (computerSelection) {
            case "paper":
                round = loss;
                break;

            case "rock":
                round = tie;
                break;

            case "scissors":
                round = win;
                break;
        }
    }

    if (playerSelection === "paper") {
        switch (computerSelection) {
            case "scissors":
                round = loss;
                break;

            case "paper":
                round = tie;
                break;

            case "rock":
                round = win;
                break;
        }
    }

    if (playerSelection === "scissors") {
        switch (computerSelection) {
            case "rock":
                round = loss;
                break;

            case "scissors":
                round = tie;
                break;

            case "paper":
                round = win;
                break;
        }
    }
    return round;
}

function game() {
    for (let i = 0; i < 5; i++) {
        let playerSelection = caseInsensitive();
        let computerSelection = computerPlay();

        let roundResult = playRound(playerSelection, computerSelection);
        console.log(roundResult);
        if (roundResult === win) {
            result.win++;
        } else if (roundResult === tie) {
            result.tie++;
        } else {
            result.loss++;
        }
    }

    console.log("Wins: " + result.win);
    console.log("Losses: " + result.loss);
    console.log("Ties: " + result.tie);
}

game();
/*变量声明*/
让结果={赢:0,平:0,输:0};
让玩家选择“摇滚”;
//让玩家选择=提示(“石头、布或剪刀”);
let win=“你赢了”;
让tie=“tie”;
let loss=“你输了”;
函数computerPlay(){
设a=Math.floor(Math.random()*11);
开关(a){
案例0:
案例1:
案例2:
案例3:
返回“岩石”;
案例4:
案例5:
案例6:
案例7:
返回“文件”;
违约:
返回“剪刀”;
}
}
函数不区分大小写(){
return playerChoice.toLowerCase();
}
功能playRound(玩家选择、计算机选择){
让它转过来;
如果(玩家选择==“摇滚”){
开关(计算机选择){
案例“文件”:
轮=损失;
打破
案例“岩石”:
圆形=平局;
打破
案例“剪刀”:
回合=胜利;
打破
}
}
如果(玩家选择==“纸张”){
开关(计算机选择){
案例“剪刀”:
轮=损失;
打破
案例“文件”:
圆形=平局;
打破
案例“岩石”:
回合=胜利;
打破
}
}
如果(玩家选择==“剪刀”){
开关(计算机选择){
案例“岩石”:
轮=损失;
打破
案例“剪刀”:
圆形=平局;
打破
案例“文件”:
回合=胜利;
打破
}
}
回程;
}
函数游戏(){
for(设i=0;i<5;i++){
让playerSelection=不区分大小写();
让计算机选择=计算机播放();
让roundResult=playRound(playerSelection,computerSelection);
console.log(roundResult);
如果(roundResult==win){
结果.win++;
}否则如果(roundResult==平局){
结果:tie++;
}否则{
结果.损失++;
}
}
console.log(“Wins:+result.win”);
控制台日志(“损失:+结果损失”);
console.log(“Ties:+result.tie”);
}
游戏();

random
12个结果并将其中四个结果分配给同一个结果,有什么特别的原因吗?为什么不仅仅是
random
3个结果呢?不管怎样,你得到五次相同结果的原因是因为你只要求计算机一次移动-就在开始-然后使用该移动五次。因为玩家与“摇滚乐”类似,结果将始终是五个相同的结果。我试图为石头、布和剪刀获得相同数量的结果,因此每个结果的概率相等。我甚至没有想到使用3。谢谢,这将有助于清理一些代码。我想我不明白为什么每个循环都不会重新启动请求另一个移动的过程我是玩家和电脑。如果我循环使用round()5次,它不应该每次都从头开始吗?请求另一个移动的过程是否在
playRound
内部?不-在外部。因此,像现在这样调用
playRound
不会给你一个新的移动。非常感谢!你的解释是正确的