努力循环函数并为奥丁项目石头、纸、剪刀返回适当的结果。我的代码有什么问题?



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

我是一个初学者,仍然有很多知识不足,所以如果你能像我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();

下面是您的代码的工作版本。要更改的主要内容是每次生成计算机选择(因此在循环开始时调用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();

最新更新