我不知道如何在不使用这两个全局变量computerScore
和playerScore
的情况下运行此代码。如果我在函数中声明它们,则每次运行时值都将重置为0。
而且,如何显示return
时的增量?就目前而言,仅在再次调用该函数之后才更新值。
这里是代码。
奖金:我刚刚开始学习Javascript,因此,如果有任何改进此代码的方法,请随时提及它们!
const getPlayerChoice = (userChoice) => {
userChoice = userChoice.toLowerCase();
if (
userChoice === "rock" ||
userChoice === "paper" ||
userChoice === "scissor"
) {
return userChoice;
} else {
console.log("Invalid option.");
}
};
const computerPlay = () => {
let randomNumber = Math.floor(Math.random() * 3);
if (randomNumber === 0) {
return "scissor";
} else if (randomNumber === 1) {
return "rock";
} else if (randomNumber === 2) {
return "paper";
}
};
let computerScore = 0;
let playerScore = 0;
let tie = 0;
const playRound = (playerSelection, computerSelection) => {
playerSelection = playerSelection.toLowerCase();
let currentScores =
"Computer: " +
computerScore +
" Player: " +
playerScore +
" Tie: " +
tie;
if (playerSelection.toLowerCase() === computerSelection) {
++tie;
return "It's a tie\n" + currentScores;
}
if (playerSelection.toLowerCase() === "scissor") {
if (computerSelection === "rock") {
++computerScore;
return "Computer wins!\n" + currentScores;
} else {
++playerScore;
return "You win!\n" + currentScores;
}
}
if (playerSelection.toLowerCase() === "paper") {
if (computerSelection === "scissor") {
++computerScore;
return "Computer wins!\n" + currentScores;
} else {
++playerScore;
return "You win!\n" + currentScores;
}
}
if (playerSelection.toLowerCase() === "rock") {
if (computerSelection === "paper") {
++computerScore;
return "Computer wins!\n" + currentScores;
} else {
++playerScore;
return "You win!\n" + currentScores;
}
}
};
const game = () => {
for (let i = 0; i < 5; ++i) {
let playerSelection = getPlayerChoice(
prompt("Choose between rock, paper, scissor")
);
if (playerSelection == null) {
alert("Invalid. Try again.");
--i;
continue;
}
const computerSelection = computerPlay();
console.log(`You chose: ${playerSelection.toLowerCase()}`);
console.log(`Computer chose: ${computerSelection}`);
console.log(
playRound(playerSelection.toLowerCase(), computerSelection)
);
}
if (playerScore > computerScore) {
console.log("Congratulations! You beat the Computer!");
} else if (computerScore > playerScore) {
console.log("Sorry! You lost.");
} else {
console.log("You tied with the Computer.");
}
};
game();
编辑:添加了整个脚本以更加清楚。
返回赢家的对象,并从playRound打印赢消息。传递当前分数,以便您可以打印它但可以在game()
功能中对其进行跟踪。我会对此进行测试,但是您在代码中缺少computerPlay()
和getPlayerChoice()
之类的某些函数定义的实现不正确。但是您可以看到我在代码中所做的。
const playRound = (playerSelection, computerSelection, computerScore, playerScore) => {
playerSelection = playerSelection.toLowerCase();
let currentScores =
"Computer: " + computerScore + " Player: " + playerScore;
if (playerSelection.toLowerCase() === computerSelection) {
return "It's a tie\n" + currentScores;
}
if (playerSelection.toLowerCase() === "scissor") {
if (computerSelection === "rock") {
console.log("Computer wins!\n" + currentScores);
return {computerScore: 1, playerScore: 0};
} else {
console.log("You win!\n" + currentScores);
return {computerScore: 0, playerScore: 1};
}
}
if (playerSelection.toLowerCase() === "paper") {
if (computerSelection === "scissor") {
console.log("Computer wins!\n" + currentScores);
return {computerScore: 1, playerScore: 0};
} else {
console.log("You win!\n" + currentScores);
return {computerScore: 0, playerScore: 1};
}
}
if (playerSelection.toLowerCase() === "rock") {
if (computerSelection === "paper") {
console.log("Computer wins!\n" + currentScores);
return {computerScore: 1, playerScore: 0};
} else {
console.log("You win!\n" + currentScores);
return {computerScore: 0, playerScore: 1};
}
}
};
const game = () => {
let totalComputerScore = 0;
let totalPlayerScore = 0;
for (let i = 0; i < 5; ++i) {
let playerSelection = getPlayerChoice(
prompt("Choose between rock, paper, scissor")
);
if (playerSelection == null) {
alert("Invalid. Try again.");
--i;
continue;
}
const computerSelection = computerPlay();
console.log(`You chose: ${playerSelection.toLowerCase()}`);
console.log(`Computer chose: ${computerSelection}`);
let {computerScore, playerScore} =
playRound(playerSelection.toLowerCase(), computerSelection, computerScore, playerScore);
totalPlayerScore += playerScore;
totalComputerScore += computerScore;
}
if (totalPlayerScore > totalComputerScore) {
console.log("Congratulations! You beat the Computer!");
} else if (totalComputerScore > totalPlayerScore) {
console.log("Sorry! You lost.");
} else {
console.log("You tied with the Computer.");
}
};
game();
首先,请不要使用硬核数字,请在for循环中使用变量。使用var代替let。 Var在整个程序中定义。我明白你的问题。您当前的分数未更新。而是使当前分数成为可以返回当前玩家分数和计算机分数的函数。
嗨,我在您的代码中做了一些重构,这些是一些推荐:
(function () {
let computerScore = 0;
let playerScore = 0;
const playRound = (playerSelection, computerSelection) => {
const lowerCasePlayer = playerSelection.toLowerCase();
const currentScores = `Computer: ${computerScore} Player: ${playerScore}`;
const tieText = `It's a tie\n${currentScores}`;
if (lowerCasePlayer === computerSelection) {
return tieText;
}
if (lowerCasePlayer === "scissor") {
if (computerSelection === "rock") {
return setComputerWinner();
} else {
return setHumanWinner();
}
}
if (lowerCasePlayer === "paper") {
if (computerSelection === "scissor") {
return setComputerWinner();
} else {
return setHumanWinner();
}
}
if (lowerCasePlayer === "rock") {
if (computerSelection === "paper") {
return setComputerWinner();
} else {
return setHumanWinner();
}
}
};
const setComputerWinner = () => {
const computerWinsText = `Computer wins!\n${currentScores}`;
++computerScore;
return computerWinsText;
};
const setHumanWinner = () => {
const humanWinsText = `You win!\n${currentScores}`;
++playerScore;
return humanWinsText;
};
const game = () => {
for (let i = 0; i < 5; ++i) {
let playerSelection = getPlayerChoice(prompt("Choose between rock, paper, scissor"));
if (playerSelection == null) {
alert("Invalid. Try again.");
--i;
continue;
}
const computerSelection = computerPlay();
console.log(`You chose: ${playerSelection.toLowerCase()}`);
console.log(`Computer chose: ${computerSelection}`);
console.log(playRound(playerSelection.toLowerCase(), computerSelection));
}
if (playerScore > computerScore) {
console.log("Congratulations! You beat the Computer!");
} else if (computerScore > playerScore) {
console.log("Sorry! You lost.");
} else {
console.log("You tied with the Computer.");
}
};
game();
})();