gpt4 book ai didi

javascript - 有巨大错误的打地鼠游戏!我可以得到一些帮助来修复它吗?

转载 作者:行者123 更新时间:2023-11-30 12:04:13 26 4
gpt4 key购买 nike

我正在使用 HTML5、CSS3 和 JavaScript 为类编写一个打地鼠游戏。我遇到了一个非常有趣的错误,在这个错误中,在看似随机的时间间隔内,我的内鬼停止更改它们的“onBoard”变量,因此将停止分配给董事会。这些漏洞也发生了类似的事情,但在我的测试中并不常见。所有这些都完全独立于用户交互。

在我放弃元素并完全从头开始之前,你们是我最后的希望。这让我很沮丧。这是 Codepen和我的 github如果您更喜欢这些图片。

由于 Codepen 链接显然需要附带代码,因此我认为这是出现问题的函数。

// Run the game
function run() {
var interval = (Math.floor(Math.random() * 7) * 1000);

if(firstRound) {
renderHole(mole(), hole(), lifeSpan());
firstRound = false;
}

setTimeout(function() {
renderHole(mole(), hole(), lifeSpan());
run();
}, interval);
}

我相信正在发生的事情是这样的。该函数以随机间隔运行,介于 0-6 秒之间。如果函数运行得太快,传递到我的 renderHole() 函数的数据会被新数据覆盖,从而导致之前的孔和痣永远不会从板上移除(至少在变量方面是这样)。

编辑:事实证明,我的问题来自于我的递归函数调用没有返回值。来自不同的语言,我不知道在 JavaScript 中,如果没有其他指示,函数会返回“未定义”。但是,我将 GameAlchemist 的答案标记为正确答案,因为我的原始代码令人费解和困惑,并且在某些地方是多余的。谢谢大家的帮助!

最佳答案

您在代码中到处犯了一些设计错误,这些错误一个接一个地导致代码难以阅读和遵循,而且几乎无法调试。
mole() 函数可能会返回一个痣...或不...或创建一个超时以稍后调用自身...当 mole 时将如何处理结果再次调用自己?什么都没有,所以它只会被标记为 onBoard 永远不会再出现。
--->>> 对 mole() 有明确的定义和单一责任:例如“返回一个可用的未显示的痣字符或 null”。仅此而已,没有计数,没有对象标记,只是 KISS(保持简单 S...):它应该始终返回一个值并且永远不会触发超时。
hole() 也是如此:返回一个空洞或 null,无标记,无超时设置。

render 应该被简化:得到一个痣,得到一个洞,如果找不到任何一个,再见。如果发现痣+洞,只需设置新的痣/洞对+事件处理程序(在单独的函数中)。您的主要 run 函数将确保一次又一次地尝试生成地鼠。

关于javascript - 有巨大错误的打地鼠游戏!我可以得到一些帮助来修复它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35707563/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com