2013-10-02 57 views
0

我有一个迷宫绘图功能,因为我不喜欢。目前,它的工作方式是取一个中点,然后找到它上下左右的位置并将它们放入数组中。然后检查它们是否在迷宫网格之外,并将它们从数组中移除。然后检查是否有任何已经被访问过(这将是一个迷宫函数,但现在它只是绘制一条长虚线的摆动线)并从数组中删除。JavaScript迷宫代码失败

然后,如果没有选项,则退出或返回,否则将绘制彩色正方形并再次运行该函数。

You can see it here,目前我有网格很小扩增2个问题我越来越:

  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){ 
    

如果你火起来的控制台存在大量输出,解释一些正在发生的事情,如果它似乎工作好,刚打刷新了几次,它会出错 - 特别是如果它早期在右上角结束。

我当前的代码是在这里:http://djave.co.uk/hosted/maze/js/script.js但如果它可以帮助也有一切在http://djave.co.uk/hosted/maze/maze.zip

一个zip文件,如果你要我澄清那些仅仅发表评论。

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

回答

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]] 

请注意0​​被跳过。造成这种情况的最简单的解决办法是使用$.grep

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

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

+0

Ahhhh ......这很有道理!谢谢你的帮助。 – Djave

+0

另一种选择是在for循环周围交换以便从结尾开始并向后计数 - for(i = options.length-1; i> = 0; i - ){ – Djave