Javascript - Камень, ножницы, бумага (odinProject) Helpppp - PullRequest
0 голосов
/ 07 августа 2020

У меня возникли проблемы с заданием по созданию игры «камень, ножницы, бумага» в javascript (задание от odinproject.com). Всякий раз, когда я использую рок в качестве входных данных, кажется, что все работает нормально. Однако это не работает должным образом, когда вводятся бумага или ножницы. Пожалуйста, любая помощь, предложения и советы будут очень благодарны. Я все еще новичок в этом вопросе и очень хочу узнать больше!

Спасибо!

Вот мой код:

function userChoice() {
  const userChoice = prompt("Do you choose Rock, Paper, or Scissors?").toLowerCase();
  return userChoice
}

function compChoice() {
  let compChoice = Math.random();
  if (compChoice < 0.34) {
    compChoice = "rock";
  } else if (compChoice <= 0.67) {
    compChoice = "paper";
  } else {
    compChoice = "scissors";
  }
  return compChoice
}

function playRound(userChoice, compChoice) {
  //Rock Choice
  if (userChoice == "rock" && compChoice == "scissors") {
    return "You Win! rock beats scissors!";
  } else if (userChoice == "rock" && compChoice == "paper") {
    return "Loser! paper Beats rock";
  } else if (userChoice == "rock" && compChoice == "rock") {
    return "It's a Draw";
  } else {
    return "Something Went Wrong";
  }
  //paper Choice
  if (userChoice == "paper" && compChoice == "rock") {
    return "You Win! paper beats rock";
  } else if (userChoice == "paper" && compChoice == "scissors") {
    return "You Lose! scissors beats paper";
  } else if (userChoice == "paper" && compChoice == "paper") {
    return "It's a Draw";
  } else {
    return "Something Went wrong";
  }
  //scissors Choice
  if (userChoice == "scissors" && compChoice == "paper") {
    return "You win! scissors beat paper";
  } else if (userChoice == "scissors" && compChoice == "rock") {
    return "You Lose! rock beats scissors";
  } else if (userChoice == "scissors" && compChoice == "scissors") {
    return "It's a Draw";
  } else {
    return "Something Went Wrong";
  }
}

console.log(playRound(userChoice(), compChoice()))

Ответы [ 4 ]

2 голосов
/ 07 августа 2020

Если вы не введете rock, будет выполнен первый оператор else, поскольку ни одно из условий if или else if не будет истинным. Он вернет Something went wrong без выполнения каких-либо тестов для paper или scissors.

Все остальные комбинации должны быть дополнительными операторами else if, и у вас должен быть только один else в самый конец.

function userChoice() {
  const userChoice = prompt("Do you choose Rock, Paper, or Scissors?").toLowerCase();
  return userChoice
}

function compChoice() {
  let compChoice = Math.random();
  if (compChoice < 0.34) {
    compChoice = "rock";
  } else if (compChoice <= 0.67) {
    compChoice = "paper";
  } else {
    compChoice = "scissors";
  }
  return compChoice
}

function playRound(userChoice, compChoice) {
  //Rock Choice
  if (userChoice == "rock" && compChoice == "scissors") {
    return "You Win! rock beats scissors!";
  } else if (userChoice == "rock" && compChoice == "paper") {
    return "Loser! paper Beats rock";
  } else if (userChoice == "rock" && compChoice == "rock") {
    return "It's a Draw";
  }
  //paper Choice
  else if (userChoice == "paper" && compChoice == "rock") {
    return "You Win! paper beats rock";
  } else if (userChoice == "paper" && compChoice == "scissors") {
    return "You Lose! scissors beats paper";
  } else if (userChoice == "paper" && compChoice == "paper") {
    return "It's a Draw";
  }
  //scissors Choice
  else if (userChoice == "scissors" && compChoice == "paper") {
    return "You win! scissors beat paper";
  } else if (userChoice == "scissors" && compChoice == "rock") {
    return "You Lose! rock beats scissors";
  } else if (userChoice == "scissors" && compChoice == "scissors") {
    return "It's a Draw";
  } else {
    return "Something Went Wrong";
  }
}

console.log(playRound(userChoice(), compChoice()))

Или вы можете использовать вложенные блоки if.

function userChoice() {
  const userChoice = prompt("Do you choose Rock, Paper, or Scissors?").toLowerCase();
  return userChoice
}

function compChoice() {
  let compChoice = Math.random();
  if (compChoice < 0.34) {
    compChoice = "rock";
  } else if (compChoice <= 0.67) {
    compChoice = "paper";
  } else {
    compChoice = "scissors";
  }
  return compChoice
}

function playRound(userChoice, compChoice) {
  //Rock Choice
  if (userChoice == "rock") {
    if (compChoice == "scissors") {
      return "You Win! rock beats scissors!";
    } else if (compChoice == "paper") {
      return "Loser! paper Beats rock";
    } else if (compChoice == "rock") {
      return "It's a Draw";
    } else {
      return "Something Went Wrong";
    }
  }
  //paper Choice
  else if (userChoice == "paper") {
    if (compChoice == "rock") {
      return "You Win! paper beats rock";
    } else if (compChoice == "scissors") {
      return "You Lose! scissors beats paper";
    } else if (compChoice == "paper") {
      return "It's a Draw";
    } else {
      return "Something Went Wrong";
    }
  }
  //scissors Choice
  else if (userChoice == "scissors") {
    if (compChoice == "paper") {
      return "You win! scissors beat paper";
    } else if (userChoice == "scissors" && compChoice == "rock") {
      return "You Lose! rock beats scissors";
    } else if (userChoice == "scissors" && compChoice == "scissors") {
      return "It's a Draw";
    } else {
      return "Something Went Wrong";
    }
  } else {
    return "That's not a valid choice";
  }
}

console.log(playRound(userChoice(), compChoice()))
1 голос
/ 07 августа 2020

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

function playRound(userChoice, compChoice) {
  //Rock Choice
  if (userChoice == "rock" && compChoice == "scissors") {
    return "You Win! rock beats scissors!";
  } else if (userChoice == "rock" && compChoice == "paper") {
    return "Loser! paper Beats rock";
  } else if (userChoice == "rock" && compChoice == "rock") {
    return "It's a Draw";
  }
  //paper Choice
  if (userChoice == "paper" && compChoice == "rock") {
    return "You Win! paper beats rock";
  } else if (userChoice == "paper" && compChoice == "scissors") {
    return "You Lose! scissors beats paper";
  } else if (userChoice == "paper" && compChoice == "paper") {
    return "It's a Draw";
  }
  //scissors Choice
  if (userChoice == "scissors" && compChoice == "paper") {
    return "You win! scissors beat paper";
  } else if (userChoice == "scissors" && compChoice == "rock") {
    return "You Lose! rock beats scissors";
  } else if (userChoice == "scissors" && compChoice == "scissors") {
    return "It's a Draw";
  }
  return "Something Went Wrong";
}
0 голосов
/ 07 августа 2020

Не прерывайте поток, возвращаясь раньше времени.

function userChoice() {
  const userChoice = prompt("Do you choose Rock, Paper, or Scissors?").toLowerCase();
  return userChoice
}

function compChoice() {
  let compChoice = Math.random();
  if (compChoice < 0.34) {
    compChoice = "rock";
  } else if (compChoice <= 0.67) {
    compChoice = "paper";
  } else {
    compChoice = "scissors";
  }
  return compChoice
}

function playRound(userChoice, compChoice) {
  //Rock Choice
  if (userChoice == "rock" && compChoice == "scissors") {
    return "You Win! rock beats scissors!";
  } else if (userChoice == "rock" && compChoice == "paper") {
    return "Loser! paper Beats rock";
  } else if (userChoice == "rock" && compChoice == "rock") {
    return "It's a Draw";
  } else
  //paper Choice
  if (userChoice == "paper" && compChoice == "rock") {
    return "You Win! paper beats rock";
  } else if (userChoice == "paper" && compChoice == "scissors") {
    return "You Lose! scissors beats paper";
  } else if (userChoice == "paper" && compChoice == "paper") {
    return "It's a Draw";
  } else
  //scissors Choice
  if (userChoice == "scissors" && compChoice == "paper") {
    return "You win! scissors beat paper";
  } else if (userChoice == "scissors" && compChoice == "rock") {
    return "You Lose! rock beats scissors";
  } else if (userChoice == "scissors" && compChoice == "scissors") {
    return "It's a Draw";
  } else {
    return "Something Went Wrong";
  }
}

console.log(playRound(userChoice(), compChoice()))
0 голосов
/ 07 августа 2020

Это потому, что ваша функция playRound() никогда не преодолеет это:

if (userChoice == "rock" && compChoice == "scissors") {
    return "You Win! rock beats scissors!";
} else if (userChoice == "rock" && compChoice == "paper") {
    return "Loser! paper Beats rock";
} else if (userChoice == "rock" && compChoice == "rock") {
    return "It's a Draw";
} else {
    return "Something Went Wrong";
}

Это связано с else, которое у вас есть в конце этого фрагмента кода. Поскольку userChoice настроен на бумагу или ножницы, он попадает в это значение и не переходит к остальной части функции. Вы можете связать ifs как так, чтобы исправить:

if (userChoice == "rock" && compChoice == "scissors") {
    return "You Win! rock beats scissors!";
} else if (userChoice == "rock" && compChoice == "paper") {
    return "Loser! paper Beats rock";
} else if (userChoice == "rock" && compChoice == "rock") {
    return "It's a Draw";
} else if (userChoice == "paper" && compChoice == "rock") {
    return "You Win! paper beats rock";
} else if (userChoice == "paper" && compChoice == "scissors") {
    return "You Lose! scissors beats paper";
} else if (userChoice == "paper" && compChoice == "paper") {
    return "It's a Draw";
} .... 
rest of ifs 
....
else {
    return "Something Went wrong";
}
...