Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.07.2011, 12:06   #1
Demiant
Новичок
Джуниор
 
Регистрация: 18.07.2011
Сообщений: 2
По умолчанию Движение обьекта по кратчайшему пути до точки

Всем привет!
дается поле ~14x14 клеток. каждая клетка - обьект Image. Все картинки находятся в двумерном массиве 14х14, так что свободный доступ к ним есть. каждая клетка может быть либо "водой", "камнем", "землей", "кустом", "травой". все это генерируется по особо хитрому алгоритму при запуске программы, и расставляется случайно. разве что кусты только возле воды ставятся. так вот, теперь мне надо сделать гипотетическое травоядное, кторое будет жрать кусты, спать на земле, срать на траве, и пить воду. сразу встал вопрос о составлении алгоритма передвижения, нахождении ближайшего куста/травы/земли/воды и передвижении до них.
Есть какие идеи по реализации? было бы конечно круто сразу код получить, но идеи сами по себе ценнее
Алгоритм Дейкстры не предлагайте, я еще даже школу не окончил...
Собсна, скриншот программы -
Снимок.jpg
Demiant вне форума Ответить с цитированием
Старый 18.07.2011, 14:04   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Алгоритм Дейкстры не предлагайте, я еще даже школу не окончил...
а что, тем, кто не закончил школу, алгоритмом Дейкстры запрещено пользоваться? Или этот алгоритм при использовании школьниками даёт неверные результаты?!


p.s. имхо, лучше (и проще) разобраться с известными алгоритмами, чем придумывать что-то своё... А многими алгоритмами можно пользоваться AS IS, даже не понимая, как алгоритм собственно работает...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.07.2011, 14:16   #3
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Да самый простой вариант это Алгоритм Дейкстры . Еще уточнение:
Цитата:
срать на траве
А почему Ваши травоядные избегают это делать на камнях?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 18.07.2011, 18:08   #4
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Цитата:
Ёжик по полю бежит и хохочет...
Ёжику травкой пипиську щекочет!
Кончилась травка, гравий пошел...
Ёжик без письки до дому ушел...
Utkin, теперь ясно?..

Извиняюсь, за оффтоп.
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 18.07.2011, 18:28   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Все просто:
трава - 0
вода - 1
камень - 2
куст - 3
игрок - 9

массив:
2313000002002
0333330222200

на вашем изображении это так:


место где стоит игрок отмечается 9. Если игрок может стоять только на траве то 0 заменяется 9.
Вот от него и считайте до обьекта наименьшее кол-во нулей по прямой линии во все 4 стороны вокруг себя.

Последний раз редактировалось Человек_Борща; 18.07.2011 в 18:31.
Человек_Борща вне форума Ответить с цитированием
Старый 18.07.2011, 18:56   #6
Demiant
Новичок
Джуниор
 
Регистрация: 18.07.2011
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а что, тем, кто не закончил школу, алгоритмом Дейкстры запрещено пользоваться? Или этот алгоритм при использовании школьниками даёт неверные результаты?!
Все дело в теории. так то у меня есть представление что такое граф, вершина, вес, но теоретическихз знаний никаких. и еще я предпочитаю пользоваться кодом и алгоритмами, которые мне понятны.

Вобщем, проблему с поиском ближайшего куста решил так: при генерации кусты запихиваются в отдельный (динамический ессесна) массив. потом в процедуре поиска ближайшего куста делается такая штука:
Код:
        
        for i := 1 to high(bushes) do
        begin
          k := 0;
          repeat
            inc(k);
          until sqr((bushes[i].X + round(Cell_size / 2)) -
            (XS + round(Cell_size / 2))) +
            sqr((bushes[i].Y + round(Cell_size / 2)) -
            (YS + round(Cell_size / 2))) <= sqr(k);
          if k < R then
          begin
            R := k;
            nearest:= @bushes[i];
          end;
        end;
т.е. в цикле перелпачиваются все кусты, при этом идет повторение, в котором за каждый раз увеличивается радиус окружности с центром в нужной точке (в данном случае - с центром в травоядном). ну и потом находится куст который попал в окружность с наименьшим радиусом, и указатель на него передается на выход функции.
По крайней мере должно работать, т.к. не проверил еще
Demiant вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод трапеций для определения пути обьекта в Delphi 7 fanLUMEN Помощь студентам 2 11.05.2011 09:11
Движение обьекта в OpenGL Delphi Krechet Помощь студентам 0 24.01.2010 14:22
даны две точки. организовать движение из точки А в точку Б окружности! Wi1D Помощь студентам 6 23.05.2009 19:55
Движение обьекта по прямой Wi1D Помощь студентам 1 16.05.2009 21:21
Движение обьекта клавишами в с++ Grizzzli Помощь студентам 2 05.04.2009 12:43