Легко, правда моя рекурсия не корректно строила пути.
Var
Cx:array[0..3]of integer; // 0, 1 , 0, -1
Cy:array[0..3]of integer; // -1, 0 , 1, 0
Карта мира
m:array[0..9,0..9]of integer;
Карта ботов
b:array[0..9,0..9]of integer;
Массив M, игровой мир, допустим 0-свободная клетка, 1 препятсвие
Получения карты B для юнита.
Стоим карту массива B из массива M, я делал так.
for i:=0 to 9 do
for j:=0 to 9 do
if B[j,i]=0 then B[j,i]:=-1; Проходимым участкам присваивал -1, для того что бы поиск пути был более комфортный,
if B[j,i]=1 then B[j,i]:=-2; Непроходимые участки -2
Делал прежде всего бота, который искал ближайшую приоритетную цель, но если вам нужно сделать, просто движение к указанной точке то все проще.
В этом массиве B, координате юнита присваивал значение 0, -3 допустим наша цель, после запускал рекурсию.
Us:boolean -глобальная переменная, для остановки рекурсии если цель найдена.
Процедура Поиск цели(x,y:integer; );
Переменные z:integer;
Начало
If us=false then
for z:=0 to 3 do {Используем константы, и проверяем 4-е направления}
if b[ x+Cx[z] ,y+Cy[z] ]=-1 then
begin
b[ x+Cx[z] ,y+Cy[z] ] := b[x,y];{Пристваиваем соседним ячейкам значение на 1-цу больше, поэтому стартовую точка и имела значение 0 для удобства}
Поиск(x+Cx[z] ,y+Cy[z] );{Заново запускаем рекурсию}
end;
Конец
В этом же коде вставляем проверку на цель. Если находим цель, останавливаем рекурсию . Сохраняем точку цели, я потом уже от этой точки запускаем рекурсию еще раз, но точкой цели будет уже наш юнит.
После заполнения Массива Карты B,
сдвигаем юнита на ячейку с меньшим значением. Вот и все.
Так двигался мой бот.
На ранних этапах проект работал корректно, но после поиск стал идти кругами, что и логично в общем.
Поэтому интересно услышать что нибудь по-поводу рекурсии поиска, и что собственно не так.