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

我试着在函数内部以及全局初始化变量.我试着在变量增量前面加上return.我try 了使用和不使用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>

推荐答案

有很多方法可以改进代码.我删除了playRound()函数的参数,删除了该函数末尾的return条语句,并在脚本末尾添加了game()调用以使其正常工作.

playRound()中的参数迫使函数每次使用未定义的局部值.

您根本没有判断用户提供的输入是否有效.

也许你可以看看这个游戏的替代方式: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>

Javascript相关问答推荐

你怎么看啦啦队的回应?

查找最长的子序列-无法重置数组

如何将Cookie从服务器发送到用户浏览器

制作钢琴模拟器,并且在控制台中不会执行或显示该脚本

我创建了一个创建对象的函数,我希望从该函数创建的对象具有唯一的键.我怎么能做到这一点?

使用领域Web SDK的Vite+Vue应用程序中的Web程序集(WASM)错误

在我的index.html页面上找不到我的Java脚本条形图

使用类型:assets资源 /资源&时,webpack的配置对象&无效

JS Animate()方法未按预期工作

WebSocketException:远程方在未完成关闭握手的情况下关闭了WebSocket连接.&#三十九岁;

处理TypeScrip Vue组件未初始化的react 对象

使用Perl Selify::Remote::Driver执行Java脚本时出错

输入数据覆盖JSON文件

扩散运算符未按预期工作,引发语法错误

将数据添加到数据库时不输出

如何导入我在Web Worker创建的函数?

改进了正则表达式的性能

onmouseover事件在Edge浏览器中突然不起作用

Reaction路由在身份验证后不会更改页面,只有在我刷新页面的情况下

基于单击按钮更改椭圆的填充/取消填充状态,同时跟踪用户是否 Select 另一种 colored颜色