JavaScript 迷宫代码失败

标签 javascript jquery algorithm maze

我的迷宫绘图功能无法正常工作。目前,它的工作原理是取一个中点,然后找到它上方、下方、左侧和右侧的位置——并将它们放入一个数组中。然后它检查是否有任何这些在迷宫网格之外,并将它们从数组中删除。然后它检查是否有任何已经被访问过的(这将是一个迷宫函数,但现在它只是画一条长长的波浪形虚线)并从数组中删除那些。

然后,如果没有剩余选项,则退出或返回,否则它将绘制一个彩色方 block 并再次运行该函数。

You can see it here ,目前我的网格非常小,无法放大我遇到的两个问题:

  1. 它经常认为负坐标是可以的。这让我觉得这些台词有问题:

    if(options[i][0]<0 || options[i][1]<0 || options[i][0]>size-1 || options[i][1]>size-1){
      // ... let us know that you're removing them...
      console.log("splicing: out of bounds "+options[i][0]+","+options[i][1]);
      // ... then remove them
      options.splice(i, 1);
    
  2. 它也经常没有注意到已经访问过一个方 block ,并且会覆盖它们,这让我认为这条线没有按预期工作:

    if(options.length > 0){
    

如果你启动控制台,会有很多输出解释一些正在发生的事情,如果它看起来工作正常,只需点击刷新几次,它就会出错 - 特别是如果它最终出现在右上角尽早转弯。

我当前的代码在这里:http://djave.co.uk/hosted/maze/js/script.js但如果有帮助的话,在http://djave.co.uk/hosted/maze/maze.zip还有一个包含所有内容的压缩文件。

如果你想让我澄清任何事情,请发表评论。

注意它现在应该跳过一个正方形,所以它不会是一条连续的线。

最佳答案

问题是您正在拼接您正在迭代的同一个数组。所以在循环的第二次迭代中,当 x=4, y=0 时,您有以下内容:

i=1, options[[2,0],[6,0],[4,-2],[4,2]]

拼接第二个选项后,数组将发生变化,第三次迭代时将得到以下内容:

i=2, options[[2,0],[4,-2],[4,2]]

请注意 [4,-2] 被跳过了。最简单的解决方法是使用 $.grep

options = $.grep(options, function(option, index) { 
    return option[0]>=0 && option[0]<size && option[1]>=0 && option[1]<size;
});

这将遍历数组并返回对象数组,其中 grep 返回 true。当你遍历已经访问过的方 block 时,你也应该做同样的一般事情。

关于JavaScript 迷宫代码失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19141992/

相关文章:

javascript - 如何使用 JS/CSS 在所有操作系统中像文件浏览器一样重新创建 Mac

Jquery,提取子文本

java - 测试两个二叉树是否相等的最有效方法

C#——引用传递的设计思路

python - 元素可以为零时的目标求和dp算法

javascript - 如何生成React Native项目的apk或ios文件

javascript - 如何使用 Angular JS 访问 JSON 中的嵌套对象

javascript - 使用 jquery 解析数据-*

javascript - JQuery UI - 可删除或排序 "clear"绝对位置元素彼此靠近

php - 停止在网页开始/结束时跳动 (OS X)