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