我正在编写一个简单的基于控制台的石头剪刀游戏作为练习。但是,以下条件的计算结果始终为true。
if (playerselection === computerselection) {
console.log('Draw!');
我介绍了几个console.log命令以及断点,以确定是否存在范围问题或参数更改;事实似乎并非如此。播放器选择可以是"Rock",而计算机选择可以是"Scissors"(两者都在调试期间验证(,但条件被视为true,控制台输出";画!(。整个代码如下所示:
array = ['Rock', 'Paper', 'Scissors'];
computerPlay();
userPlay();
evaluation();
function computerPlay() {
computerselection = array[Math.floor(Math.random() * array.length)];
}
function userPlay() {
playerselection = prompt('Choose: Rock, Paper or Scissors', 'Choose it! NOW!!');
}
function evaluation(playerselection, computerselection) {
if (playerselection === computerselection) {
console.log('Draw!');
} else if (
(playerselection == "rock" && computerselection == "scissors") || //All possible victories
(playerselection == "paper" && computerselection == "rock") ||
(playerselection == "scissors" && computerselection == "paper")) {
console.log("You win!");
} else {
console.log("You lose)");
}
}
是什么导致第一个if条件每次都评估为true,即使console.log(playerselection===computerselection(在调试期间评估为false?
一些提示。
在中
function evaluation(playerselection, computerselection) {
您有两个(区域设置(变量的声明,并使用它们进行比较。
稍后,您调用函数
evaluation()
没有一些参数,Javascript采用默认值undefined
,就像所有其他没有值的声明变量一样。
这里的代码有一些变化:
- 提前声明任何变量
- 返回输入的数组的值
- 在CCD_ 2中直接使用这两个值
- 提前退出以防止嵌套的
if
。。。CCD_ 4结构 - 防止使用不必要的括号,如果有疑问,请查看运算符的优先级
array
中的数据应使用小写字母作为输入。
function computerPlay() {
return array[Math.floor(Math.random() * array.length)];
}
function userPlay() {
return (prompt('Choose: rock, paper or scissors') || '').toLowerCase();
}
function evaluation(playerselection, computerselection) {
if (playerselection === computerselection) {
console.log('Draw!');
return;
}
if (
playerselection === "rock" && computerselection === "scissors" ||
playerselection === "paper" && computerselection === "rock" ||
playerselection === "scissors" && computerselection === "paper"
) {
console.log("You win!");
return;
}
console.log("You lose");
}
const
array = ['rock', 'paper', 'scissors'];
evaluation(userPlay(), computerPlay());
这里两个变量都不在全局范围内,因此在evaluate((函数内不可访问。这就是为什么evaluate((内部都是undefined
,每次都满足if条件的原因。
尝试在全局范围内定义这两个变量,如下所示,并从evaluate((函数声明中删除参数。
let computerselection = "";
let playerselection = "";
function evaluation() {
//code stuff
}