Перейти к публикации
Syabro

Волновой алгоритм поиска пути [API]

Рекомендованные сообщения

Давно не играл на этом проекте но решил выложить свой API. Это файлик с функциями для ComputerCraft. Сейчас он имеет:

  • algLi2D(grid,ax, ay, bx, by) - волновой алгоритм для 2D карты
  • algLi3D(grid,a, b ) - Beta test
  • moovToCord(a,b, up) - как-то писал на форуме но удалили... ComputerCraft – Отправка робота на координаты X Y и Z
  • getFuel(a,b ) - ComputerCraft – Отправка робота на координаты X Y и Z тут есть!
  • easyScan2DMap(W_Size,H_Size) - сканирует поверхностно 2D карты сохраняя в формате algLi2D
  • easyScan3DMap(x,y,z) - сканирует 3D карту, так-же поверхностно в формате algLi3D (beta test)
  • tableSave(tbl,filename) - сохранение таблицы в файл (чтоб не искать)
  • tableRead(filename) - чтение таблицы из файла

Код Pastebin: 5B4tnUHA

  • Like 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Все офигенно! Я похоже рокал потому что пока я не помучаюсь с чем либо у меня ничего не выйдет, но если я долго мучаюсь то что-то по любому выходит! Так бета тест algLi3D и easyScan3DMap работают прелестно! вроде... остался последний тест с moovToCord.

Получается все так: easyScan3DMap сканирует кубоид в карту для algLi3D, algLi3D проходит карту и передает 3 массива с координатами x,y и z для moovToCord. Одна проблема с координацией черепахи, но она решаема с помощью GPS так:

 

side = 1
x,y,z = gps.locate(1)
a{x,y,z,side}
b{bx,by,bz}
_,_,_,side = sapi.moovToCord(a,b)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Просто блеск! Черепаха на ура справилась с трехмерным лабиринтом! Правда он пока на 5 слоя, просто очень долго сканирует черепаха!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

http-~~-//www.youtube.com/watch?v=PabvESaoJkM Показал работу программы

 

if fs.exists("sapi") then
  os.loadAPI("sapi")
end
map = sapi.tableRead("map")
local W      = #map[1]
local H      = #map

resp1,resp2,resp3,resp4 = sapi.algLi3D(map,{1,1,1},{15,17,1})
side = 1
if resp1 then
  for k=1,#resp2 do
    x,y,z = gps.locate(5)
    print(x..","..y..","..z.."->"..resp2[k]..","..resp3[k]..","..resp4[k].."|")
    a={x,y,z,side}
    b={resp2[k],resp3[k],resp4[k]}
    _,_,_,side = sapi.moveToCord(a,b)
  end
end

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Закрывайте тему

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×