Привет всем!
Сам додумать не смог, так что за помощь с меня +.
Пилю что-то на подобии 3 в ряд и столкнулся с одной проблемкой...
Как только все кубы опускаются, от каждого куба проверяется сколько во все стороны от него кубов такого же цвета из которых как минимум можно составить 3 в ряд.
Получается что-то вроде
Пытаюсь написать рекурсию которая начиная из произвольного куба где значения куба >=2 в нашем случаи на изображении отмечено как start.
В функцию я передаю текущее значение координат Х и У а так же массив Box в котором содержится максимально большое, найденное значение и координаты где такой квадрат был обнаружен.
У всех кубов значения которых >=2 переменной gem_combinations присвоено значение 1, когда мы переходим на квадрат то мы эту переменную занулям чтобы не было зацикливания.
Так вот, почему-то рекурсия не проходит, т.е. она идёт в какую-то сторону например в низ, и остаётся там, а при возвращении всё равно оказывается в последнем (нижнем кубе) =\ хотя по идее должна проходить все соседние одинаковые квадраты.
Так выглядит старт рекурсии:
Код
var box;
ox=argument0
oy=argument1
priority=argument2 //получаем значения из программы
box[1]=priority
box[2]=ox
box[3]=oy //запоминаем их как максимальное значение
box=scr_check_gem_combinations(ox,oy,box) и запускаем рекурсию
Сама рекурсия:
Код
ox=argument0
oy=argument1
box=argument2
gem_size=obj_spawn_gems.gem_size;
//####################################
(instance_position(ox,oy,obj_gem_common)).gem_combinations=0 //зануляем переменную чтобы не было зацикливания
if (instance_position(ox,oy,obj_gem_common)).priority>box[1] //проверяем на максимальное значение данного куба
{
box[1]=(instance_position(ox,oy,obj_gem_common)).priority//если оно больше то запоминаем его и координаты
box[2]=ox
box[3]=oy
}
show_message(string('IN: ')+string(ox)+string(' ')+string(oy))//отображает координаты текущего куба
if gem_sprite=(instance_position(ox+gem_size,oy,obj_gem_common)).gem_sprite && (instance_position(ox+gem_size,oy,obj_gem_common)).gem_combinations=1 //если спрайт = спрайт справа и его gem_combinations=1 то снова
{ //вызываем данную подпрограмму.
scr_check_gem_combinations(ox+gem_size,oy,box)
}
if gem_sprite=(instance_position(ox-gem_size,oy,obj_gem_common)).gem_sprite && (instance_position(ox-gem_size,oy,obj_gem_common)).gem_combinations=1 //здесь всё по аналогии только другие направления
{
scr_check_gem_combinations(ox-gem_size,oy,box)
}
if gem_sprite=(instance_position(ox,oy+gem_size,obj_gem_common)).gem_sprite && (instance_position(ox,oy+gem_size,obj_gem_common)).gem_combinations=1 //здесь всё по аналогии только другие направления
{
scr_check_gem_combinations(ox,oy+gem_size,box)
}
if gem_sprite=(instance_position(ox,oy-gem_size,obj_gem_common)).gem_sprite && (instance_position(ox,oy-gem_size,obj_gem_common)).gem_combinations=1 //здесь всё по аналогии только другие направления
{
scr_check_gem_combinations(ox,oy-gem_size,box)
}
return(box) //возвращаем массив box.