代码之家  ›  专栏  ›  技术社区  ›  redemerald26

如何让Javascript跟踪我的分数增量?

  •  1
  • redemerald26  · 技术社区  · 3 年前

    我正在做一个基本的石头剪刀游戏,我以为我正确地编码了分数增量,但游戏将每轮分数保持在0。

    我试着在函数内部以及全局初始化变量。我试着在变量增量前面加上return。我尝试了使用和不使用playRound()函数末尾显示的return score语句。我知道游戏要么没有修改变量,要么一直遵循初始给定值,我就是不明白为什么或者我需要做什么才能让变量保持增量。

    <!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>
    3 回复  |  直到 3 年前
        1
  •  1
  •   Carsten Massmann    3 年前

    有很多方法可以改进代码。我删除了你的论点 playRound() 函数,删除了 return 语句,并添加 game() 在脚本结束时打电话让它工作。

    中的论点 游戏回合 每次都强制函数使用未定义的局部值。

    您根本没有检查用户提供的输入是否有效。

    也许你可以看看这个游戏的替代方式: rock,paper,scissors ?

    <!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>
        2
  •  0
  •   JSmart523    3 年前

    我不知道。

    但我可能会对你的问题有一个答案,那就是停止使用全局变量。

    一旦JavaScript执行 return 声明,它退出了程序,所以 playround 第二 回来 永远不会被召唤。

    所以试试这个。。。

    1. 删除全局分数变量。

    2. 与其改变分数,不如改变 游乐场 根据计算机获胜、平局或玩家获胜返回-1、0或1。

    3. 在里面 game ,声明两个分数变量,并在 for 循环基于你的 游乐场 函数返回。

    4. 把最后的分数传给 winner .

    这也更有意义,因为分数在一场比赛的范围内。

        3
  •  0
  •   Wasiu    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()