Воскресенье, 16 Мая 2021, 15:48

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker Studio » Рекурсивный проход с помощью instance_position (gms)
Рекурсивный проход с помощью instance_position
CmaujlukДата: Понедельник, 14 Июля 2014, 21:15 | Сообщение # 1
участник
Сейчас нет на сайте
Привет всем!
Сам додумать не смог, так что за помощь с меня +.

Пилю что-то на подобии 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.


Не жадный на плюсы.
Наши проекты:
Clicker Mine Mania 2 - Увлекательный кликер в стиле Minecraft
Angry Bee Evolution - Эволюция с элементами кликера
Чего не хватает? - Викторина на логику"
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker Studio » Рекурсивный проход с помощью instance_position (gms)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2021 Рейтинг