我正在创建一个石头剪刀布游戏,其中有一个 playRound() 函数。我正在尝试创建一个 game() 函数,我可以多次调用此 playRound() 函数并得到不同的结果。
我想使用这个 game() 函数进行多轮比赛,以找到获胜者,但我仍然坚持让 playRound() 多次运行。
使用我当前的代码, playRound() 函数仅在控制台中运行一次。
这是我的代码:
function playRound(playerSelection, computerSelection) {
const lose = "You Lose! Paper beats rock";
const win = "You Win! rock beats paper";
const tie = "its a tie";
console.log(`Your selection is : ${playerSelection}`);
console.log(`PC selection is : ${computerSelection}`);
if (playerSelection === playerSelection && computerSelection === "paper") {
return lose;
} else if (
playerSelection === playerSelection &&
computerSelection === "scissors"
) {
return win;
} else {
return tie;
}
}
function game() {
for (let i = 0; i < 3; i++) {
return playRound(playerSelection, computerSelection);
}
}
function computerPlay() {
let choices = ["rock", "paper", "scissors"];
let choice = choices[Math.floor(Math.random() * choices.length)];
return choice;
}
const string = "ROck";
const playerSelection = string.toLowerCase() || string.toUpperCase();
const computerSelection = computerPlay();
console.log(game());
您的 game() 函数不仅返回该回合的结果,从而离开循环...而且您仅在调用 game() 函数之前设置 computerSelection 一次...因此,playerSelection 或 ComputerSelection 都不会改变。
我稍微重新排列了你的代码并添加了总体游戏得分。看一看。
function playRound(playerSelection, round) {
console.log("Round " + round);
const computerSelection = computerPlay();
console.log(`Your selection is : ${playerSelection}`);
console.log(`PC selection is : ${computerSelection}`);
if (playerSelection === playerSelection && computerSelection === "paper") {
return 'lose';
} else if (
playerSelection === playerSelection &&
computerSelection === "scissors"
) {
return 'win';
} else {
return 'tie';
}
}
function game() {
const lose = "You Lose! Paper beats rock";
const win = "You Win! Rock beats scissors";
const tie = "It's a tie";
let playerScore = 0;
let computerScore = 0;
for (let i = 1; i < 4; i++) {
const result = playRound(playerSelection, i);
switch (result) {
case 'win':
console.log(win);
playerScore++;
break;
case 'lose':
console.log(lose);
computerScore++;
break;
default:
console.log(tie);
playerScore++;
computerScore++;
break;
}
}
console.log("Final Results: Player: " + playerScore + " Computer: " + computerScore);
if (playerScore > computerScore) {
console.log("You win the game!");
} else if (playerScore < computerScore) {
console.log("You lose the game.");
} else {
console.log("The game was an overall tie.");
}
}
function computerPlay() {
let choices = ["rock", "paper", "scissors"];
let choice = choices[Math.floor(Math.random() * choices.length)];
return choice;
}
const playerSelection = "rock";
game();
不要return在 for 循环中 - 因为它会在该循环的第一次迭代中退出该函数
这将是生成器函数的巧妙应用。
你们知道如何让回合显示不同的结果,而不只是重复相同的结果 3 次吗?
在函数中,您将返回对您发布的代码中不存在的game函数的调用。playRound
您使用的这意味着它在一次调用后return playRound(...)退出功能。您应该对 的返回值求和,而不是 return。也许是这样的。game()playRound();playRound()sum += playRound(...);
这太棒了,非常感谢你,我明天要开始的下一个项目是使用 dom 操作将视觉前端连接到此