Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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-帮助调试简单游戏?_Javascript - Fatal编程技术网

Javascript-帮助调试简单游戏?

Javascript-帮助调试简单游戏?,javascript,Javascript,我正在创建一个简单的游戏,其中有两个门,一个包含奖品,另一个不包含(随机生成)。用户可以单击其中一个,如果他们赢了/输了,就会收到通知。当我运行下面的代码时,结果总是“booyoulose”。我怀疑这与: if ("door1Selection" === "randomDoor"){ $(文档).ready(函数(){ 让门=[“门1”,“门2”] 函数selectDoor(){ const randomDoor=doors[Math.round(Math.random())] 回程门 }

我正在创建一个简单的游戏,其中有两个门,一个包含奖品,另一个不包含(随机生成)。用户可以单击其中一个,如果他们赢了/输了,就会收到通知。当我运行下面的代码时,结果总是“booyoulose”。我怀疑这与:

if ("door1Selection" === "randomDoor"){
$(文档).ready(函数(){
让门=[“门1”,“门2”]
函数selectDoor(){
const randomDoor=doors[Math.round(Math.random())]
回程门
}
常量$door1=$('.door1')
常量$door2=$('.door2')
$door1.单击(函数(){
常量door1Selection=$door1.attr('class');
如果(“门1选择”==“随机门”){
警惕(“耶,你赢了”)
}否则{
警惕(“嘘,你输了”)
}
})
$door2.单击(函数(){
var door2Selection=$door2.attr('class');
如果(“door2Selection”==“randomDoor”){
警惕(“耶,你赢了”)
}否则{
警惕(“嘘,你输了”)
}
})
})

按钮1

按钮2
您的变量不应该用引号括起来。这使它成为一个字符串,因此您正在比较字符串
door2Selection===randomDoor
,这永远不会是真的

你想要:

if (door1Selection === randomDoor)

您还需要将
randodoor
的声明从函数中拉出。将其与您的
doors
声明放在一起(并使其成为
let
):


比较变量时,不应将变量置于引号中。当您将它们放在引号中时,您是在比较变量名称本身,而不是变量的值

if ("door1Selection" === "randomDoor"){
应该是

if (door1Selection === randomDoor) {
但是,在以下几个方面可以进行改进:

  • 变量randomDoor在selectDoor方法中创建为常量,但当函数返回其值时,它超出范围,因此以后无法用于比较。因此,您应该将randomDoor变量完全设置在函数之外,或者干脆将其去掉,然后在if语句中调用selectDoor
  • 您可以轻松地将click事件方法合并为一次单击,甚至可以对具有门类的所有按钮进行一次单击
进行这些更改将导致以下结果:

$(文档).ready(函数(){
让门=[“门1”,“门2”]
函数selectDoor(){
返回门[Math.round(Math.random())]
}
$('.door')。单击(函数(){
if($(this).hasClass(selectDoor())){
警惕(“耶,你赢了”)
}否则{
警惕(“嘘,你输了”)
}
});
});

1号门
门2
  • 您正在比较文字字符串而不是变量
  • 您需要调用函数
    selectDoor()
    ,以获取随机索引。变量
    random
    作用域关闭,以选择门的块
$(文档).ready(函数(){
让门=[“门1”,“门2”]
函数selectDoor(){
const randomDoor=doors[Math.round(Math.random())]
回程门
}
常量$door1=$('.door1')
常量$door2=$('.door2')
$door1.单击(函数(){
常量door1Selection=$door1.attr('class');
如果(门1选择===选择门()){
警惕(“耶,你赢了”)
}否则{
警惕(“嘘,你输了”)
}
})
$door2.单击(函数(){
var door2Selection=$door2.attr('class');
如果(门2选择===选择门()){
警惕(“耶,你赢了”)
}否则{
警惕(“嘘,你输了”)
}
})
})

按钮1

按钮2
您正在针对不同的字符串而不是不同的变量进行测试,而且当我删除两个字符串上的引号时,您的
随机门
变量不在可见范围内,我得到了随机门的错误undefined@ChiLee这是因为它是在函数中声明的,所以一旦函数结束,它就不存在了。这种方法很难看,OP只需要调用该函数。这取决于他们是想在游戏开始时初始化随机门还是在门被拾取时拾取随机门。这是一个设计决定。
if ("door1Selection" === "randomDoor"){
if (door1Selection === randomDoor) {