javascript - javascript石头剪刀布游戏()函数中的循环功能和计数
问题描述
就像前言一样,我对编程很陌生,如果错误是我忽略的简单错误,我深表歉意。另外我提前知道游戏功能现在很乱,我在玩了几天后将它复制到现在的状态。
我一直在做 odin 项目的石头剪刀布项目,虽然我开发了一个运行良好的单轮功能,但我无法让总体游戏功能正常运行。我尝试过改变语法,我怀疑问题出在特定变量的范围内,但我还没有找到一种可行的方法。过去几天我也一直在做研究,试图弄清楚如何在简化单轮时做到这一点,但我无法找到与我的代码设置方式相关的查询。
我已将所有内容都放在同一个函数中,但是当我这样做时,我似乎无法让循环正常工作,并且我尝试将变量从本地范围拉到全局范围,但没有成功 - 正如我所提到的单轮函数可以正常工作,并且无论结果如何都会返回正确的字符串,所以我有一种预感,错误确实存在于可变比例的某个地方,我只是无法查明它。
我的游戏功能,大约是第五次或第六次无法运行的再现:
function game() {
let playerScore = 0;
let computerScore = 0;
let roundResult = computerPlay();
for (let counter = 0; counter <= 5; ++counter) {
computerPlay();
if (roundResult === 'You win, rock beats scissors' || roundResult === 'You win, paper beats rock.' || roundResult === 'You win, scissors beats paper.') {
++playerScore;
} else if (roundResult === 'You lose, paper beats rock.' || roundResult === 'You lose, scissors beats paper.' || roundResult === 'You lose, rock beats scissors.') {
++computerScore
}
if (playerScore > computerScore) {
return ('You win ' + playerScore + ' to ' + computerScore + '.');
} else if (playerScore < computerScore) {
return ('You lose ' + computerScore + ' to ' + playerScore + '.');
} else {
return 'It was a tie, you both won the same number of rounds.';
}
}
}
// and the single round (computerPlay) function that works fine:
function computerPlay() {
let playerInput = prompt('Enter your selection of rock, paper, or scissors.');
let playerTrimmed = playerInput.trim();
let playerSelection = playerTrimmed.charAt(0).toUpperCase();
let playerScore = 0;
let computerScore = 0;
if (playerSelection === 'R' || playerSelection === 'P' || playerSelection === 'S') {
let myArray = ['R', 'P', 'S'];
let computerSelection = myArray[Math.floor(Math.random() * myArray.length)];
if (playerSelection === 'R') {
if (computerSelection === 'S') {
++playerScore;
return 'You win, rock beats scissors.';
} else if (computerSelection === 'P') {
++computerScore;
return 'You lose, paper beats rock.';
} else {
return 'Tie.';
}
} else if (playerSelection === 'P') {
if (computerSelection === 'R') {
++playerScore;
return 'You win, paper beats rock.';
} else if (computerSelection === 'S') {
++computerScore;
return 'You lose, scissors beats paper.';
} else {
return 'Tie.';
}
} else if (playerSelection === 'S') {
if (computerSelection === 'P') {
++playerScore;
return 'You win, scissors beats paper.';
} else if (computerSelection === 'R') {
++computerScore;
return 'You lose, rock beats scissors.';
} else {
return 'Tie.';
}
}
} else {
//makes sure player entered a string starting with a valid letter (r, p, or s)
alert('Please make sure you enter a valid selection.');
}
}
game()
解决方案
就像 DBS 所说的 return 语句将停止你的函数和你的循环,所以试试这样:
function game() {
let playerScore = 0;
let computerScore = 0;
let roundResult = computerPlay();
for (let counter = 0; counter <= 5; ++counter) {
computerPlay();
if (roundResult === 'You win, rock beats scissors' || roundResult === 'You win, paper beats rock.' || roundResult === 'You win, scissors beats paper.') {
++playerScore;
} else if (roundResult === 'You lose, paper beats rock.' || roundResult === 'You lose, scissors beats paper.' || roundResult === 'You lose, rock beats scissors.') {
++computerScore
}
}
if (playerScore > computerScore) {
return ('You win ' + playerScore + ' to ' + computerScore + '.');
} else if (playerScore < computerScore) {
return ('You lose ' + computerScore + ' to ' + playerScore + '.');
} else {
return 'It was a tie, you both won the same number of rounds.';
}
}
像这样它只会在循环完成时返回结果。
(顺便说一句,您的 computerPlay() 函数中的 playerScore 和 computerScore 变量是无用的:p)
推荐阅读
- angular - 如何显示所选值的数据?
- vue.js - 如何访问 vue-good-table 中的标头索引
- html - 结果进入控制台但无法在循环内打印
- reactjs - 分派和减少操作后组件不重新呈现
- javascript - 如何在每个函数中使用循环对多个函数进行异步处理
- php - 谷歌正在显示我的旧网址,如何从谷歌索引中删除它并将我的新网址添加到谷歌索引中?
- python - 使用 Eve 运行 python 代码的 ValueError 问题
- php - 无法为序列化准备路由 [api/user]。使用闭包
- php - 如何在 Laravel 中存储带有附加功能的文本框数据
- amazon-web-services - 如何仅为一个文件在 s3 存储桶上设置重定向?