Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 新的JS,试图把石头布剪刀游戏_Javascript - Fatal编程技术网

Javascript 新的JS,试图把石头布剪刀游戏

Javascript 新的JS,试图把石头布剪刀游戏,javascript,Javascript,我是JS的新手,我被要求制作一个石头剪刀游戏。有谁能给我指点一下到目前为止我做了什么?这看起来合乎逻辑吗 我相信我的思路是正确的,但我需要一些指导,以使这段代码更具可读性 function getPlayerMove() { var playerMove = prompt("Please choose either 'rock', 'paper', or 'scissors'."); alert("You have chosen" + playerMove + ".");

我是JS的新手,我被要求制作一个石头剪刀游戏。有谁能给我指点一下到目前为止我做了什么?这看起来合乎逻辑吗

我相信我的思路是正确的,但我需要一些指导,以使这段代码更具可读性

function getPlayerMove() {
    var playerMove = prompt("Please choose either 'rock', 'paper', or 'scissors'.");
    alert("You have chosen" + playerMove + ".");
    return playerMove;
};

 function getComputerMove() {
    var computerMove = Math.random();
    if (computerMove < 0.33) {
        alert("The computer has chosen rock.");
        computerMove === "rock";
    } else if (computerMove < 0.66) {
        alert("The computer has chosen paper.");
        computerMove === "paper";
    } else {
        alert("The computer has chosen scissors.");
        computerMove === "scissors";
    }
    return computerMove;
}

function getWinner(playerMove, computerMove) {
    var playerWins === 0;
    var computerWins === 0;
    if (playerMove === "rock") {
        if (computerMove === "scissors") {
            alert("Rock beats scissors. The player has won.");
            return "player"
            playerWins++;
        };
        else if (computerMove === "paper") {
        alert("Paper beats rock. The computer has won.");
        return "computer";
        computerWins++;
        };
        else {
            alert("Both choose rock. It's a tie!")
            };
        };
        else if (playerMove === "scissors") {
            if (computerMove === "scissors") {
            alert("Both choose scissors. It's a tie!");
        }
        else if (computerMove === "paper") {
            alert("Scissors beats paper. The player has won.");
            return "player";
            playerWins++;
            {
        else {
            alert("Rock beats paper. The computer has won.")
            return "computer";
            computerWins++;
        };
    };
    else {
        if (computerMove === "scissors") {
            alert("Scissors beats paper. The computer has won.");
            return "computer"
            computerWins++;
        };
        else if (computerMove === "paper") {
            alert("Both choose paper. It's a tie!");
        };
        else {
            alert("Paper beats rock. The player has won!");
            return "player";
            playerWins++;
        };
     };
};

function playToFive {
    if (playerWins === 5) {
        alert("Player has won 5 times! You win!");
    }
    else if (computerWins === 5) {
        alert("Computer has won 5 times! You lose!");
    }
    else 
        getPlayerMove;
        getcomputerMove;
        getWinner;
    };
    }
函数getPlayerMove(){ var playerMove=prompt(“请选择‘石头’、‘布’或‘剪刀’”); 警报(“您已选择“+playerMove+”); 返回playerMove; }; 函数getComputerMove(){ var computerMove=Math.random(); 如果(计算机移动<0.33){ 警报(“计算机选择了摇滚乐”); computerMove==“岩石”; }否则如果(计算机移动<0.66){ 警报(“计算机已选择纸张”); computerMove==“纸张”; }否则{ 警报(“计算机已选择剪刀”); computerMove==“剪刀”; } 返回计算机移动; } 函数getWinner(playerMove、computerMove){ var playerWins===0; var=0; 如果(playerMove==“摇滚乐”){ 如果(计算机移动==“剪刀”){ 警惕(“石头打败剪刀,玩家赢了。”); 返回“玩家” playerWins++; }; 否则如果(计算机移动==“纸张”){ 警惕(“纸胜石头,电脑赢了。”); 返回“计算机”; computerWins++; }; 否则{ 警惕(“双方都选择摇滚乐,平局!”) }; }; 否则如果(玩家移动==“剪刀”){ 如果(计算机移动==“剪刀”){ 警惕(“双方都选择剪刀,这是一条领带!”); } 否则如果(计算机移动==“纸张”){ 警惕(“剪刀胜过纸,玩家赢了。”); 返回“玩家”; playerWins++; { 否则{ 警惕(“石头胜过纸张,电脑赢了。”) 返回“计算机”; computerWins++; }; }; 否则{ 如果(计算机移动==“剪刀”){ 警惕(“剪刀胜过纸,电脑赢了。”); 返回“计算机” computerWins++; }; 否则如果(计算机移动==“纸张”){ 警惕(“双方都选纸,打成平局!”); }; 否则{ 警惕(“纸胜石头,玩家赢了!”); 返回“玩家”; playerWins++; }; }; }; 函数playtoff{ 如果(playerWins==5){ 警惕(“玩家赢了5次!你赢了!”); } 否则如果(computerWins==5){ 警告(“计算机赢了5次!你输了!”); } 其他的 getPlayerMove; getcomputerMove; 赢家; }; }
我会添加一个数组来保存选项。这会使代码的其余部分更具可读性。一般来说,字符串越少越好。将选项按特定顺序添加到数组中还可以比较数字(索引)而不是字符串,这将使脚本的其余部分更加容易。(使用数组,我试图弥补JS中枚举数的不足)

这可以帮助您替换一组字符串

此外,通过选择与数组索引相对应的随机数,可以简化获取计算机移动

return choices[Math.floor(Math.random() * 3)];  
我相信还有更多,但这只是一个快速的检查,我还没有测试

--我看得越多,看到的东西就越多。但您只是要求提供指导,这样我就不会破坏您的思维。

函数返回 除了
getWinner
playToFive
函数外,所有功能看起来都很好。请记住,当函数返回某个内容时,该函数的执行将停止,因此类似于:

    if (computerMove === "scissors") {
        alert("Rock beats scissors. The player has won.");
        return "player"; // the execution stops here
        playerWins++;
    };
不会像您预期的那样工作-
playerWins
永远不会递增


不可及部分 接下来是
if(playerMove==“rock”){
,然后在其中:

else if (playerMove === "scissors") {
当然,这永远不会发生,因为如果代码进入第一个循环,这意味着玩家选择了
摇滚
,因此与
剪刀
的比较是不相关的


处理领带 使用领带的整个过程可以以不同方式处理,以避免重复:

else if (playerMove === "scissors") {
        if (computerMove === "scissors") {
        alert("Both choose scissors. It's a tie!");
    }
可以涵盖所有情况,如:

if (playerMove === computerMove) {
    alert("Both choose " + computerMove + ". It's a tie!");
}

优化
getWinner
我们可以删除所有返回,因为您没有在任何地方使用函数return value。 整个功能可优化为:

function getWinner(playerMove, computerMove) {
    if (playerMove === computerMove) {
        alert("Both choose " + computerMove + ". It's a tie!");
    }
    // no more ties below this line
    else if (playerMove === "rock") {
        if (computerMove === "scissors") {
            alert("Rock beats scissors. The player has won.");
            playerWins++;
        };
        else { // no need to specfically check for "paper" 
               // because it's all that remains now
            alert("Paper beats rock. The computer has won.");
            computerWins++;
        };
    }
    else if (playerMove === "scissors") {
        if (computerMove === "paper") {
            alert("Scissors beats paper. The player has won.");
            playerWins++;
        } // this bracket was wrong
        else {
            alert("Rock beats paper. The computer has won.")
            computerWins++;
        };
    }
    else {
        if (computerMove === "scissors") {
            alert("Scissors beats paper. The computer has won.");
            computerWins++;
        }
        else {
            alert("Paper beats rock. The player has won!");
            playerWins++;
        };
     }
}

游戏循环 下一件大事是你需要有一个循环-游戏需要重复,直到有人赢。这也意味着计数器变量应该在
getWinner
函数之外,否则它们将总是重置为零。无论如何,循环可以是
playtofe
函数,要实现循环,你需要每t调用一次ime还有更多游戏可玩:

function playToFive() {
  if (playerWins === 5) {
    alert("Player has won 5 times! You win!");
  }
  else if (computerWins === 5) {
    alert("Computer has won 5 times! You lose!");
  }
  else 
    getPlayerMove();   // don't forget the brackets - we need to call 
    getcomputerMove(); // these three functions, not
    getWinner();       // just put their bodies here

    // finally, this is where the loop happens:
    playToFive();
  }
}

现场演示:

这是什么。var playerWins==0;var computerWins==0;否则getPlayerMove;getcomputerMove;getWinner;};?`return“player”playerWins++;')。playerWins++永远无法访问。是的,我忘了将playerWins和computerWins转换为全局变量。无论如何,谢谢你。我知道这是一段写得很差的代码,所以我正在尝试完善我的推理,因为我才刚刚开始。但我非常感谢你关于数组包含choic的建议es。非常感谢你为我完整地阐述了这一点!我真是太感谢你了!!这真的会帮助我更好地理解JS的所有复杂之处。再次感谢你!!!嘿,没问题,我很高兴我能帮上忙。我可能还是错过了一两件事,但至少现在你有了一个工作代码。不客气。:)
function playToFive() {
  if (playerWins === 5) {
    alert("Player has won 5 times! You win!");
  }
  else if (computerWins === 5) {
    alert("Computer has won 5 times! You lose!");
  }
  else 
    getPlayerMove();   // don't forget the brackets - we need to call 
    getcomputerMove(); // these three functions, not
    getWinner();       // just put their bodies here

    // finally, this is where the loop happens:
    playToFive();
  }
}