JavaScript迷宫代码失败

时间:2013-10-02 16:30:59

标签: javascript jquery algorithm maze

我的迷宫绘图功能无法正常工作。目前,它的工作方式是取一个中点,然后找到它的上方,下方,左侧和右侧的位置 - 并将它们放入一个数组中。然后检查这些是否在迷宫网格之外,并将它们从阵列中移除。然后它检查是否已经访问过(这将是一个迷宫函数,但现在它只是绘制一条长点缀的摇摆线)并从阵列中删除它们。

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

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. 它也经常没有注意到已经访问过一个正方形,并且会在它们上面写字,这让我觉得这条线没有按预期工作:

    if(options.length > 0){
    
  3. 如果你启动控制台,有很多输出可以解释一些正在发生的事情,如果看起来工作正常,只需点击刷新几次就会出错 - 特别是如果它最终出现在右上角在早期开始。

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

    如果您希望我澄清任何评论。

    NB此刻它应该跳过一个方格,所以它不会是一条连续线。

1 个答案:

答案 0 :(得分:4)

问题是你正在拼接你正在迭代的同一个数组。所以在循环的第二次迭代中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的对象数组。当你遍历已经访问过的方块时,你也应该做同样的一般事情。