我正在制作一個基本的 Rock Paper Scissors 游戲,并認為我正確地編碼了分數增量,但游戲將每輪的分數保持在 0。
我嘗試在函式內以及全域初始化變數。我嘗試在變數增量之前添加 return 。我嘗試了使用和不使用 playRound() 函式末尾顯示的回傳分數陳述句。我知道游戲要么沒有修改變數和/或一直推遲到初始給定值,我只是不知道為什么或我需要做什么來讓變數保持增量。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Rock Paper Scissors</title>
</head>
<body>
<script>
const choices = ['Rock', 'Paper', 'Scissors'];
let playerScore = 0;
let compScore = 0;
function computerPlay() {
return choices[Math.floor(Math.random() * choices.length)];
}
function playRound(playerSelection, computerSelection, playerScore, compScore) {
computerSelection = computerPlay();
playerSelection = prompt("Rock, Paper, or Scissors? ");
if (playerSelection === 'Rock' && computerSelection === 'Scissors') {
playerScore = 1;
return "You win! Rock beats Scissors!";
} else if (playerSelection === 'Scissors' && computerSelection === 'Paper') {
playerScore = 1;
return "You win! Scissors beats Paper!";
} else if (playerSelection === 'Paper' && computerSelection === 'Rock') {
playerScore = 1;
return "You win! Paper beats Rock!";
} else if (playerSelection === 'Scissors' && computerSelection === 'Rock') {
compScore = 1;
return "You lose! Rock beats Scissors!";
} else if (playerSelection === 'Paper' && computerSelection === 'Scissors') {
compScore = 1;
return "You lose! Scissors beats Paper!";
} else if (playerSelection === 'Rock' && computerSelection === 'Paper') {
compScore = 1;
return "You lose! Paper beats Rock!";
} else {
playerScore = 1;
compScore = 1;
return "Tie!"
}
return playerScore;
return compScore;
}
function game() {
for (let i = 0; i < 5; i ) {
console.log(playRound());
console.log(`Your score: ${playerScore}`);
console.log(`Computer score: ${compScore}`);
}
winner();
}
function winner() {
if (compScore > playerScore) {
console.log("\nThe computer dominated your ass! Better luck next time!")
} else if (compScore < playerScore) {
console.log("\nWay to crush it! You win!")
} else {
console.log("\nHoly shizzers! It's a tie!")
}
}
</script>
</body>
</html>
uj5u.com熱心網友回復:
有很多方法可以改進你的代碼。我洗掉了函式的引數playRound()
,洗掉了return
該函式末尾的陳述句,并game()
在腳本末尾添加了呼叫以使其作業。
中的引數playRound()
強制函式每次都使用未定義的本地值。
您根本沒有檢查用戶給出的輸入是否有效。
也許你可以看看這種另類的游戲方式:石頭、紙、剪刀?
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Rock Paper Scissors</title>
</head>
<body>
<script>
const choices = ['Rock', 'Paper', 'Scissors'];
let playerScore = 0;
let compScore = 0;
function computerPlay() {
return choices[Math.floor(Math.random() * choices.length)];
}
function playRound() {
computerSelection = computerPlay();
playerSelection = prompt("Rock, Paper, or Scissors? ");
if (playerSelection === 'Rock' && computerSelection === 'Scissors') {
playerScore = 1;
return "You win! Rock beats Scissors!";
} else if (playerSelection === 'Scissors' && computerSelection === 'Paper') {
playerScore = 1;
return "You win! Scissors beats Paper!";
} else if (playerSelection === 'Paper' && computerSelection === 'Rock') {
playerScore = 1;
return "You win! Paper beats Rock!";
} else if (playerSelection === 'Scissors' && computerSelection === 'Rock') {
compScore = 1;
return "You lose! Rock beats Scissors!";
} else if (playerSelection === 'Paper' && computerSelection === 'Scissors') {
compScore = 1;
return "You lose! Scissors beats Paper!";
} else if (playerSelection === 'Rock' && computerSelection === 'Paper') {
compScore = 1;
return "You lose! Paper beats Rock!";
} else {
playerScore = 1;
compScore = 1;
return "Tie!"
}
}
function game() {
for (let i = 0; i < 5; i ) {
console.log(playRound());
console.log(`Your score: ${playerScore}`);
console.log(`Computer score: ${compScore}`);
}
winner();
}
function winner() {
if (compScore > playerScore) {
console.log("\nThe computer dominated your ass! Better luck next time!")
} else if (compScore < playerScore) {
console.log("\nWay to crush it! You win!")
} else {
console.log("\nHoly shizzers! It's a tie!")
}
}
game();
</script>
</body>
</html>
uj5u.com熱心網友回復:
我不知道。
但我可能對你的問題有一個答案,那就是停止使用全域變數。
一旦 JavaScript 執行了一個return
陳述句,它就會退出該程序,所以playround
's secondreturn
永遠不會被呼叫。
所以試試這個...
洗掉您的全域分數變數。
不是更改分數,而是
playround
根據計算機獲勝、平局或玩家獲勝而回傳 -1、0 或 1。在
game
中,宣告兩個分數變數,并for
根據playround
函式回傳的內容在回圈中遞增它們。將最終得分傳遞給
winner
.
這也更有意義,因為分數在游戲的范圍內。
uj5u.com熱心網友回復:
您的游戲現在可以運行了,只知道您沒有處理玩家在 3 次之外輸入內容的情況
const choices = ['Rock', 'Paper', 'Scissors'];
let playerScore = 0;
let compScore = 0;
function computerPlay() {
return choices[Math.floor(Math.random() * choices.length)];
}
function playRound(playerSelection, computerSelection) { //2. you decare computer and playerscore twice,
computerSelection = computerPlay();
playerSelection = prompt("Rock, Paper, or Scissors? ");
if (playerSelection === 'Rock' && computerSelection === 'Scissors') {
playerScore = 1;
return "You win! Rock beats Scissors!";
} else if (playerSelection === 'Scissors' && computerSelection === 'Paper') {
playerScore = 1;
return "You win! Scissors beats Paper!";
} else if (playerSelection === 'Paper' && computerSelection === 'Rock') {
playerScore = 1;
return "You win! Paper beats Rock!";
} else if (playerSelection === 'Scissors' && computerSelection === 'Rock') {
compScore = 1;
return "You lose! Rock beats Scissors!";
} else if (playerSelection === 'Paper' && computerSelection === 'Scissors') {
compScore = 1;
return "You lose! Scissors beats Paper!";
} else if (playerSelection === 'Rock' && computerSelection === 'Paper') {
compScore = 1;
return "You lose! Paper beats Rock!";
} else {
playerScore = 1;
compScore = 1;
return "Tie!"
}
return playerScore;
return compScore;
}
function game() {
for (let i = 0; i < 5; i ) {
playRound(); //remove console here.
console.log(`Computer score: ${compScore}`);
console.log(`Your score: ${playerScore}`);
}
winner();
}
function winner() {
if (compScore > playerScore) {
console.log("\nThe computer dominated your ass! Better luck next time!")
} else if (compScore < playerScore) {
console.log("\nWay to crush it! You win!")
} else {
console.log("\nHoly shizzers! It's a tie!")
}
}
game()// 1. You didn't call game()
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/470973.html
標籤:javascript 增量