![]() |
|
![]() ![]() ![]() |
|
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Pac-man - классическая игра. Кто не помнит в ней некий смайлик бегает по лабиринту и ест некие плюшки. При этом уворачивается от двух-четырек привидений, тупо его преследующих. Задача - слопать все плюшки. Простенько и со вкусом.
Смайликом управляет игрок. Приведения используют алгоритм A* (как правило) для того, чтобы направляться в сторону смайлика. Впрочем, могут быть и варианты проще. Мне же нужен алгоритм не самой игры, а демо к ней. Т.е. вариант, в котором смайлик тоже управляется компьютером. Т.е. смайлик направляется по лабиринту в сторону не съеденных еще плюшек, но одновременно и убегает от привидений. Не подскажет ли кто-нибудь алгоритм хорошо расписанный? Честно говоря не хочется велосипед городить. Если гуглю - все время вылезают описания алгоритма самой игры, т.е. движения привидений. Спасибо. -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 4 Всего: 27 |
а почему нельзя использовать алгоритм движения приведений применимо к смайлику? Пусть он случайно выбирает точку и движется к ней, съедая всё на своём пути (точка будет выступать в роли смайлика, на которого охотится приведение), а приведения пусть считает за стенки лабиринта.
|
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Bitter, пожалуй приведения его сразу слопают.
Здесь скорее надо выбирать некое среднее между привлекательностью плюшек и страхом привидений. При этом и страх и привлекательность, видимо, должны слабеть с расстоянием. Но это тоже туповато. И, главное, требует многих экспериментов с параметрами. Вот я и думаю - надо ли самому изобретать то, что другие уже раз восемьсот изобрели? -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 2 Всего: 49 |
Так а что мешает сделать тот же A*, только снабдить приведения очень большой стоимостью? Как вариант (чтобы смайлик не пытался пробегать под носом у приведений), места, находящиеся на некотором небольшом расстоянии от приведений (на графе лабиринта, конечно), также снабжаются большой стоимостью, растущей по мере приближения к приведению.
|
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Фантом, хорошо. Пусть будет так. Хотя это опять ведет к экспериментам с параметрами. А как задать привлекательность множества плюшек?
-------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 2 Всего: 49 |
||||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Наверное это будет иногда приводить к маятниковым движениям смайлика. Впрочем - с этого наверное можно начинать. А там видно будет ![]() Потом отпишу что получилось. Единственно, это "потом" может сильно затянуться. Проект этот у меня почти последний в списке срочности испольнения. Спасибо! -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 2 Всего: 49 |
Можно первоначально выбранной плюшке дополнительно приписать отрицательную стоимость, тогда при прочих равных смайлик будет двигаться к ней. Хотя, в принципе, при начальном продвижении к ней стоимость пути и так будет уменьшаться, если на дороге не попадутся привидения. |
|||
|
||||
миг |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 15.9.2008 Репутация: нет Всего: 1 |
может смайлику сначало стоит. есть точки в одном углу игрового поля.. тогда все приведения будут пытаться поймать смайлик в том углу.. т.е. приведения сместятся как можно ближе друг к другу и не будут рассредоточены по всему игровому полю.. потом смайлик будет бежать в другой угол. а все приведения будут идти паровозиком за смайликом..
--------------------
Oaks may fall when reeds stand the storm. |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
миг, вот в том и дело: как избежать патовых вариантов? Ваше решение подразумевает некий интеллект у смайлика. Как бы его описать простым алгоритмом, не городя нейронные сети на пол Атлантического океана
![]() -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 7 Всего: 386 |
_Y_, а почему бы не просчитывать "ходы" привидений на несколько ходов? Разбить все возможные варианты действий пакмена на элементарные предвижения - стоять-вверх-вниз-вбок на какой-то квант времени. Алгоритм движения привидений достаточно однообразен, так что особого разветвления дерева выбора не должно быть, глубина перебора должна быть достаточно приличной.
В качестве функции оценки можно использовать количество заработанных очков. При достаточной глубине перебора будет в меру эффективно. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
миг |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 15.9.2008 Репутация: нет Всего: 1 |
Допустим смайлик ест точки.. и вычисляет расстояние до всех приведений.. как только расстояние сократится до опасного, то смайлик бежит прочь с того места пытаясь увеличить это расстояние. Опасное расстояние допустим 3-5 шага до смайлика. если смайла пытаются окружить приведения, то смайл должен бежать до ближайшего свободного перекрестка в лабиринте. а потом думать куда бежать дальше, чтобы удалиться от приведений.. Если не придумал куда бежать дальше пускай бежит до следующего свободного перекрестка. Помоему весь алгоритм заключается в том, что призраки пытаются сократить расстояние до смайла.. а смайл пытается увеличить это расстояние.. расстояние от призрака до смайла считаеться не по прямой..
Или еще вариант вокруг смайла на расстоянии в несколько шагов образуется некое поле. как только призрак входит в это поле смайл пытается двигаться в противоположную сторону от призрака, так чтобы призрак оказался за этим полем... если второй призрак зашел в поле смайла, то смайл опять меняет направление чтобы как минимум увеличить расстояние до одного призрака и не сократить расстояние до другого.. если условие с двумя призраками выполнить не получиться, то опять бежим до свободного перекрестка. Я точно не уверен, но помоему в пэкмэне.. скорость движения смайлика выше скорости движения призрака.. так, что всегда можно оторваться от них.. Получается, что поедание плюшек это второстепенная задача.. если просто грамотно уворачиваться от призраков, то рано или поздно смайл гонимый призраками обойдет весь лабиринт и съест все плюшки)) Это сообщение отредактировал(а) миг - 11.1.2011, 23:00 --------------------
Oaks may fall when reeds stand the storm. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |