|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
01.12.2007, 01:15 | #1 |
Пользователь
Регистрация: 30.11.2007
Сообщений: 19
|
Нужен алгоритм уклонения монстра
Всем здравствуйте!
Я занимаюсь программированием ради удоаольствия, в свободное время. Поэтому, уровень мой, можно сказать, близок к нолю. Тем не менее, узнавать что-то новое для меня всегда приятно. У меня следующая проблема: В игре есть персонаж (Р) и есть монстр (М). Если монстр ранен, он убегает (>>>) от персонажа и прячется за препятствиями (Х). Когда расстояние от пересонажа до монстра справа и слева вокруг препятствия одинаково, монстр должен остановиться (О). Монст должен выбирать только те препятствия, вокруг которых можно обойти. Как реализовать такое поведение? Нужен принцип, алгоритм. М>>> ХХХO ХХХ ХХХ Р ХХХ Заранее спасибо. |
01.12.2007, 17:10 | #2 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Вам нужно поискать по темам "Поиск пути", это не такой сложный алгоритм, он должен выполняться на каждого монстра как только его жизнь на низком уровне.
1) Если HP монстра выше нужного прога - поиск пути до персонажа (нападение); 2) Если HP монстра ниже нужного порога - поиск пути (пока не появится возможность скрыться от прямого вида персонажа).
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
01.12.2007, 18:58 | #3 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Это довольно популярная тема, в сети много информации. Ключевые слова для поиска:
Алгоритм поиска кратчайшего пути Алгоритм Дейкстры
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
01.12.2007, 20:03 | #4 |
Пользователь
Регистрация: 30.11.2007
Сообщений: 19
|
Спасибо за советы, но то, что Вы мне предлагаете - это не то.
Уйти из поля зрения персонажа - мало. Монстр должен держаться на самом дальнем расстоянии и прятаться за препятствием. Как найти кратчайший путь, я знаю. Я не могу найти самую удаленную точку за преградой. Нужно что-то подобное: step1: пустить волну от персонажа во все стороны, пока волна не наткнулась на препятствие. step2: от точки столкновения волны с препятствием начать трассировку вокруг препятствия в обе стороны пока круг не замкнется. step3: от точки смыкания пустить волну пока она не наткнется на монстра. Заставить монстра идти по клеткам с наименьшим значением Вот как-то так. Может можно проще? Подскажите. |
01.12.2007, 22:01 | #5 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Забавно, ...ваш алгоритм построен так, что монстр задом чувствует где персонаж и постоянно перемещается за препятствием на равное растояние. Как тогда убить монстра, если он все время бегает, даже если не видит вас? По идее, монстр должен укрываться за ближайшим к нему препятствием и останавливаться, а если он снова увидит персонажа, то делать ноги чтобы опять не видеть персонажа. Волну следует пускать от монстра. Ну это ИМХО, а как вам нужно вы уже знаете, даже план действий есть, в чем проблемы?
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
01.12.2007, 22:44 | #6 | ||||
Пользователь
Регистрация: 30.11.2007
Сообщений: 19
|
Цитата:
Цитата:
Ну, если серьезно, просто я так хочу. Моя игра - не имитация реальной жизни. Пусть монстр слышит шаги, пусть у него будет радар, или еще что-нибудь. В конце концов, мы-то видим всю игровую ситуацию сверху (игра лабиринтная двумерная), видим все ходы, всех врагов, себя... Пусть монстр тоже видит. Цитата:
Цитата:
Нужен надежный метод. Планируется еще редактор уровней, поэтому, каким будет игровое поле предсказать сложно. Может кто-то уже сталкивался с такой проблемой? |
||||
02.12.2007, 04:15 | #7 |
Laravel/Vue expert
Старожил Подтвердите свой е-майл
Регистрация: 08.08.2007
Сообщений: 2,832
|
|
02.12.2007, 17:49 | #8 | |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Цитата:
Раз дела обстоят таким образом, то может просто не париться, пускать волну от монстра к ближайшему препятствию, переть туда, брать сразу позицию персонажа и выполнять противоположные движения, но направленные кроме того к центру препятствия? Задачу можно упростить, если для каждого препятствия можно будет задать его центр обхода в редакторе. P.S. "Иногда бывают случаи, когда 11-летний пацан решает задачу проще и эффективнее, только потому, что он не такой умный как вы."
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
|
02.12.2007, 20:08 | #9 |
Пользователь
Регистрация: 30.11.2007
Сообщений: 19
|
Да, так было бы логичнее всего. Дойти до препятствия и "спросить" у него, куда идти дальше, но сами препятствия у меня тоже меняются и исчезают...
Можно попробовать использовать контрольные точки (или как они там называются). Насчет последнего утверждения полностью согласен. |
03.12.2007, 20:42 | #10 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
pre_pod, если посмотреть в корень, то все гораздо проще. Вот есть монстр. По определению хитрый, по поведению вполне тупой. Это определение выполняется не сложными алгоритмами, а применением той же хитрости программирования. Раз препятствия появляются и исчезают, то и соответственно точки центра в них так же появляются и исчезают. Как делать? ...через расчет ширины и высоты (наибольшее число клеток по-горизонтали и по-вертикали и деление пополам, с учетом четности или нечетности). Искусственного интеллекта нет, и не может быть, есть только то, что заложено алгоритмами. В вашем случае важен результат видимый на экране, своего рода псевдоинтеллект, который на самом деле просто противоположные действия. Нужно лишь установить пределы работы "хитрого" метода.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Логика монстра(ов) | ChukCha | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 15 | 19.08.2008 15:31 |
Алгоритм | SunKnight | Работа с сетью в Delphi | 5 | 29.04.2008 15:24 |
Алгоритм | Rifler | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 30.03.2008 01:33 |