Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DelphiX [Delphi, Windows]


Страницы:   1 2

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]

Изменяй массив, разве не догадался?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо