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

How should I get adjacent blocks of the same color?

本文关键字:颜色 何获得 我应该      更新时间:2023-09-26

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

这是我正在处理的小提琴,如果你运行它,当我尝试将鼠标悬停在游戏区域边缘的元素上时,你会看到存在问题,告诉我它正在尝试使用未定义的变量

如果你在下面检查,在parse_quad_tree()函数中,你会看到我处理了未定义变量的情况,但由于它刹车,这意味着我在某处错了......

谢谢你的时间

您的 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/

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

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

在调用子数组之前,您没有检查第一个数组 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;

你需要检查你的边界

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/演示

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