II Проверяем его соседей по
// Определяем цвет этого блока.
var с = _root["block "+x+" "+y]._currentframe;
_root["block "+x+" "+y].gotoAndStop(5);
II Проверяем его соседей по всем направлениям.
var n = 1;
n += testNeighbor(х-1,у,с);
n += testNeighbor(х+1,у,с);
n += testNeighbor(х,у-1,с);
n += testNeighbor(х,у+1,с);
// Если один их них того же цвета,
if (n > 1) {
// Уничтожаем группу блоков.
collapseDown();
collapseAcross();
// Начисляем очки,
score += n*n;
} else {
// Оставляем блок на месте.
_root["block "+x+" "+y].gotoAndStop(с);
}}
Функция testNeighbor проверяет цвет нового блока. Если цвет подходит, блок удаляется. Дальше функция вызывает сама себя и проверяет цвета четырех соседних блоков. Она следит за переменной n, которая определяет количество подходящих соседей.
Если текущий блок не подходит по цвету, вместо n возвращается 0, чтобы показать, что в этом направлении не было найдено ни одного подходящего блока.
function testNeighbor(x,у,с) {
if (_root["block "+x+" "+y]._current frame = = с) {
// Удаляем соседа.
_root [ "block "+x+""+y].gotoAndStop(5);
var n = 1;
// Проверяем всех его соседей,
n += testNeighbor(x-1,y,с);
n += testNeighbor(х+1,у,с);
n += testNeighbor(х,у-1,с);
n += testNeighbor(x,y+l,с);
// Возвращаем количество найденных соседей,
return(n);
} else {
// Не найдено никаких подходящих блоков.
return(0);
}}
После того как блок выбран и все соседи одного с ним цвета удалены, следующий шаг - это позволить всем оставшимся блокам упасть вниз на все свободные места. Это достигается прохождением по всем столбцам в цикле по переменной х. Затем, во вложенном цикле по у происходит проверка всех блоков в этом столбце снизу вверх. И если блок пустой, первый заполненный блок сверху смешается вниз.
function collapseDown() {
// Проходим по всем столбцам.
for(var x=0;x
// Проходим по всем блокам столбца снизу вверх.
for(var y=11;y>0;y--) {
// Смотрим, пустой ли блок.
thisColor = _root["block "+x+'"+y]._currentFrame;