我该如何获得相同颜色的相邻块?

时间:2012-05-03 17:25:39

标签: javascript jquery algorithm

我正在尝试制作一个简单的配色游戏,我想找到一种方法来选择相同颜色的块组。

这是我正在研究的fiddle,如果你运行它,你会发现当我试图将鼠标悬停在游戏区域边缘的元素时会出现问题,告诉我它正在尝试使用未定义的变量

如果你在下面查看,在parse_quad_tree()功能你会看到我处理未定义的变量的情况,但是因为它刹车了,这意味着我在某处错了...

感谢您的时间

4 个答案:

答案 0 :(得分:5)

你的2d数组实际上是嵌套数组。您只需要检查可能超出范围的数组级别:

var n = !!grid[x][y-1]?grid[x][y-1]:false;
var s = !!grid[x][y+1]?grid[x][y+1]:false;
var e = !!grid[x-1]?grid[x-1][y]:false;   // Instead of !!grid[x-1][y]
var w = !!grid[x+1]?grid[x+1][y]:false;   // Instead of !!grid[x+1][y]

换句话说,当您执行array[x][y]时,javascript首先检索array[x],然后在该检索到的数组中查找索引[y]。在您的情况下,第一个查找未定义(grid[x-1]),因此无法查找grid[x-1][y]。当第一步未定义时,您正在检查最后一步的未定义。

演示:http://jsfiddle.net/jtbowden/qWktv/

此外,如果$(c).addClass('active')开头parse_quad_tree,您将能够突出显示单个块,而不必为每个邻居调用`.addClass('active')因为它会在递归开始时发生。

演示:http://jsfiddle.net/jtbowden/qWktv/1/

答案 1 :(得分:2)

在调用子数组之前,您没有检查第一个数组var是否存在,更改

var e = grid[x-1]&&!!grid[x-1][y]?grid[x-1][y]:false;
var w = grid[x+1]&&!!grid[x+1][y]?grid[x+1][y]:false;

答案 2 :(得分:2)

你需要检查你的界限

var n = !! (y > 0 && grid[x][y - 1]) ? grid[x][y - 1] : false;
var s = !! (y < grid[x].length-1 && grid[x][y + 1]) ? grid[x][y + 1] : false;
var e = !! (x > 0 && grid[x - 1][y]) ? grid[x - 1][y] : false;
var w = !! (x < grid.length-1 && grid[x + 1][y]) ? grid[x + 1][y] : false;

http://jsfiddle.net/gaby/yHKkg/64/

演示

答案 3 :(得分:0)

不使用var colors = ['red', 'green', 'blue'];作为颜色,而是使用三种不同的css类和颜色集。这样,当您需要选择所有这些内容时,就像$(".blue")一样简单。