![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DelphiX [Delphi, Windows]
VasyaPupkin © (2004-09-28 12:51:00)Как внести изменение в созданную карту.
Типа редактора карт.
VasyaPupkin (2004-10-03 18:26:00) [1]to [20]
Spasibo za stat'i.
cyborg (2004-10-01 16:10:00) [2]
> [20] Omar2002 (01.10.04 16:03)
> Этот ваш рендомайзный алгоритм ничего не даст
Почему же не даст? У меня танчики как раз только на нём и ездят. Вполне прилично ездят.
Omar2002 (2004-10-01 16:03:00) [3]Этот ваш рендомайзный алгоритм ничего не даст, т.к. все функции случайных чисел дают вам небольшой разброс -вернее в среднем число всех выдаваемых значений остается постоянным. Я такую штуку года два назад пробовал - пехотинец фактически топтался на одном месте. Описывал всякие абракадабры вокруг начального положения. Другое дело, если задавать направление движения только, когда этот ваш "Крот" во что-нить воткнется, тогда это получится обычный пак мен. Но в стратегиях такое исполнять я думаю не надо :)
Сам алгоритм поиска пути по-началу не понятен в реализации, но можно использовать уже готовый модуль, который прилагается к статье про А* .
статья тут: http://delphigfx.mastak.ru/doc/path/path.htm
файл тут: http://delphigfx.mastak.ru/samples/samp2.rar
Там По-моему второй юнит программы как раз саму реализацию и содержит. Во всяком случае я именно так и начинал. Если этого покажется мало и захочется усовершенствовать этот алгоритм до красивого состояния, то можно еще вот эту статейку почитать
http://dev.dtf.ru/articles/read.php?id=51
(не забудьте в конце страници нажать "Следующая страница), а то я в первый раз только треть статьи прочел :) )
Если уж волнует вопрос безграничного пространства(ну Очень большие карты), то решение есть в конце статьи
http://dev.dtf.ru/articles/read.php?id=50&page=1
Правда там нету примера, за то есть ссылка на первоисточник :)
Что касается положения спрайта в любой точке карты - если хочется искать маршрут быстро - придется в любом случае загонять всю карту и юнитов в массив, иначе придется те сложный алгоритм свой придумывать, но не факт, что он у тя получится эффективнее и быстрее.
Можно так же для просчета маршрута использовать более мелкий массив(ячейки мелкие - раза в 2-4 меньше, чем ячейки в редакторе карт)
Jus (2004-09-30 21:56:00) [4]А вот диалог между Рандумом и кротом!
-Random, куда идти?
-ну... вверх!
-там тупик! теперь куда?
-вверх!
-я туда уже ходил, там тупик!!!
-Я рандум, и я говорю иди вверх!
-там, ...тупик!
-Тогда влево иди!
-там стена!
-тогда, вверх!
-тупик!
-мы собрали совет и решили, ... иди вниз!:)
МЯУ (2004-09-30 21:47:00) [5]Jus (30.09.04 21:44) [16]
поиск пути по рандому? это ты мощно задвинул! :))))
надо реализовать где-нибудь :)
МЯУ (2004-09-30 21:44:00) [6]насколько я понял, объекты привязаны к ячейкам массива, но обладают также смещением относительно сетки. Тады, наверно, надо рассчитывать через какие-то промежутки времени, к какой клетке относится движущийся объект, и делать её непроходимой, а ту, которая была занята до этого - освобождать.
ещё есть определенная сложность, если по карте одновременно носится большое кол-во народу, как в случае RTS. Там попотеть придётся над алгоритмом, чтобы твои уродцы на пятки не наступали друг другу.
Jus (2004-09-30 21:44:00) [7]
>
> Servelat © (30.09.04 16:08) [15]
Хитрые вычисления:)
Я наверное с этим скоро тоже столкнусь!) А как делать? Я понял что это как крот, идёт, столкнулся, увидел припятствие, развернулся, идёт дальше, о!!! вижу на вытянутую руку лестницу, куда идти?!, попробую спросить у Randomа, ага!, вниз, ой, вниз лестница не идёт, тогда вверх лезим!, и т.д.:)...?
Servelat (2004-09-30 16:08:00) [8]
> массив у меня в редакторе карт.
> карта по массиву создается а потом с помошю массива загружается
> а спрайт может в любую координату встать
Заводишь еще один массив [0..x,0..y] of boolean, туда заносишь по своим хитрым вычислениям, занята клетка или нет. Если в ней стоит монстр, например, то занята, или если по ней ходить нельзя - то тоже занята, иначе - свободна. А поиск пути проворачиваешь по этому массиву.
VasyaPupkin (2004-09-30 13:37:00) [9]массив у меня в редакторе карт.
карта по массиву создается а потом с помошю массива загружается
а спрайт может в любую координату встать
> вообще, как это?
как это?....я не знаю даже как обяснить.
МЯУ (2004-09-30 13:28:00) [10]VasyaPupkin (30.09.04 12:27) [12]
а нафига тогда массив нужен, если "препятствие не только на элементе массива"? и, вообще, как это?
VasyaPupkin (2004-09-30 12:27:00) [11]Я кучу примеров нашел, но как их реализовать не понимаю
И мне надо чтоб не в двухмерном массиве было, а на всех координатах(т.е. препяпствие стояло не только на элементе массива)
Servelat (2004-09-29 23:11:00) [12]2 [9] VasyaPupkin
Тебе быстро или точно :) ?
Шучу. На самом деле статей дофига, на DelphiGFX тоже что-то было по этой теме. Rambler, Google, Jandex тебе в руки и вперед. Так могу сказать, что по мне лучше всего волновой алгоритм, его легче всего понять. Алгоритм A* является оптимизацией, расширением этого алгоритма, работает вроде быстрее, но из-за оптимизаций понавешанных, сходу в нем разобраться весьма не просто. Могу заделиться примерчиком волнового алгоритма, было у меня как-то такое задание по информатике.
Jus (2004-09-29 22:52:00) [13]
> 2 Jus [6]
> ты умеешь читать мысли? Было дано: использован массив, есть
> какая-то карта, все виснет. Как ты догадался в чем причина,
> целую теорию подвел: ...
Ну... я исходя из примера своего редактора, с объектами, ... ну уже не важно, VasyaPupkin теперь просит в другом помочь:)
VasyaPupkin (2004-09-29 22:41:00) [14]Спасибо,но я уже сделал редактор карт.
Помогите сделать алгоритм поиска пути.
Servelat (2004-09-29 22:34:00) [15]2 Jus [6]
ты умеешь читать мысли? Было дано: использован массив, есть какая-то карта, все виснет. Как ты догадался в чем причина, целую теорию подвел:
> при нажатии на пробел добавляеш в массив "объект" и на карту
> редактирования тоже, при этом объект у тебя на карте в одном
> месте создаётся несколько раз.
Мне просто интересно, что такое "карта редактирования" (может я дурак просто :) , но о таком страшном слове раньше не слышал). Как ты сделал вывод, что объект создается несколько раз, и что там вообще объекты использованы? Кстати, по идее, виснуть не должно в описанном тобой случае, там просто объекты создаются, а указатели на них теряются, может быть утечка памяти, но при этом программа нормально работать дожна и не виснуть, по крайней мере до того, как попытаешься её закрыть.
Кстати, хотелось бы видеть более удобоваримые посты, с запятыми (у тебя штуки 4 пропущено), мягкими знаками (добавляешЬ), и не понятно еще по чему "объект" в кавычках. Но это так, к слову :), я и сам не всегда пишу разборчиво ;) .
> массиве[x,y]=''
чего-то странно, вроде у тебя дальше написано array[0..100] of TMyObject;. А тут ты его с пустой строкой сравниваешь. Видимо ты имел в виду =nil, но отгадывать, что имел в виду ты (и автор вопроса тоже, кстати) - значит тратить лишнее время.
Jus (2004-09-29 21:54:00) [16]Забыл
For i:=0 to fMyObject do MyObject[fMyOjcect].Free;
> VasyaPupkin (28.09.04 13:18) [4]
Кстати, гдето я тебя раньше видел:) Ты случайно не в Тюменских краях обитаеш? чё то имя знакомое.
Jus (2004-09-28 13:45:00) [17]
> VasyaPupkin (28.09.04 13:18) [4]
> я то догадался только у меня све виснет
> я думал что можно по другому
Походу я так понял что при редактировании карты ты к примеру при нажатии на пробел добавляеш в массив "объект" и на карту редактирования тоже, при этом объект у тебя на карте в одном месте создаётся несколько раз.
Примерно
varСделай чтоб программа проверяла сначала если в
MyObject:array[0..100] of TMyObject; fMyObject: integer;массиве[x,y]='', то догда добавляеш
MyObject[fMyOjcect]:=TObject.Create;Если в
fMyObject:=fMyObject+1;массиве[x,y]>''then стираетсямассив[x,y]=''и удаляется объект ... который находится там иfMyObject:=fMyObject-1;и тогда в массив добавляется новый 'обект' и на карте тоже;
Описал буквально:)
cyborg (2004-09-28 13:21:00) [18]
> [4] VasyaPupkin (28.09.04 13:18)
> я то догадался только у меня све виснет
> я думал что можно по другому
Как ты думаешь, причина сама исчезнет или нужно покопаться в том, чего ты там понаписал? Открывай и смотри! И отладку включи.
VasyaPupkin (2004-09-28 13:18:00) [19]я то догадался только у меня све виснет
я думал что можно по другому
cyborg (2004-09-28 13:14:00) [20]Изменяй массив, разве не догадался?