PDA

Просмотр полной версии : AI для файтинга


Noorman
31.01.2007, 23:56
собственно занимаюсь реализацией сабжа
возникли следующие вопросы:
1) как организовать поведение противника
2) можно ли не методом подбора регулировать игровой балланс

О том что есть:
персонажи пока одинаковые и по ударам и по характеристикам
(сила/здоровье). Удары делятся на две категории и две под категории:
удар рукой - быстрый/сильный (близкие удары)
удар ногой - быстрый/сильный (дальние удары)
Так же есть блок - но не как в мортал комбат или еще где-нибудь
где блок это один кадр со скрещенными руками - блок это отведение
удара в сторону - поэтому даже при удерживании кнопки блока
возникает ситуация когда блок=false буквально на один кадр - но
этого хватает чтобы пробить блок.
Перемещение - пока только вправо/влево
Итак проблемы AI:
Распространенная тактика игрока - стоя на месте бить одним ударом,
AI вынужден подходить к игроку - возникает проблема - если AI не
ставит блок то получает повреждение и отлетает на несколько шагов
назад. В МК эта проблема была снята следующими решениями (ИМХО)
это прыжок и нанесение удара сверху, подход на минимальное рассто-
яние для подсечки (обычно игрок не достает до противника) и подсечка,
подбегание к противнику (уже на удачу) и моментальное нанесение
удара.
В моем случае можно конечно добавить атаки сверху и снизу...но мне
интересно как обойти эту проблему на данном этапе разработки. Вот
что я придумал - у противника есть параметр luck который в процентах
отвечает за удачу - то есть условно говоря каждый незапланированный
блок определяется удачей AI. Когда AI подходит к лягающемуся игроку
он проверяет - достанет ли меня игрок сейчас своим ударом (нужно
отметить что имеется в виду только удар ногой - так как он дальний)
и если ответ положительный то блок (на удачу) и затем уже атака.
Если же игрок машет руками - AI подходит на минимальное расстояние
для дальнего удара и атакует.
В других случаях при подходе используется стандартный алгоритм
выбора удара. Вот об этом хотелось бы поговорить подробнее.
Фактически алгоритм выбора удара (исключая ситуации которые
можно предугадать - например описанные выше) это есть логика
персонажа. Каким образом он будет атаковать противника - какими
комбинациями ударов - все это должно быть строго индивидуально
для каждого отдельно взятого бойца.
Но для упрощения сейчас действует обычная модель Math.random(),
которая действует так:

если мр(Math.random())<0.5
{
если мр<0.5
{быстрый удар рукой}
иначе {сильный удар рукой}
}
иначе
{
если мр<0.5
{быстрый удар ногой}
иначе {сильный удар ногой}
}

Собственно таким образом мы перебираем все возможные удары и
выбираем один на удачу. Но, как мне кажется этот алгоритм лишен
логики - а хотелось бы иметь умного противника который не только
знает что делать в стандартных ситуациях но и проявляет так сказать
творчество в нестандартных. Для этого нужны методы оценки ситуации
и вытекающие из них прототипы поведения...это конечно же ИМХО - мне
интересно что Вы думаете по этому поводу.

Следующий вопрос связан с игровым баллансом - буквально два дня
назад я и тестер на ура "валили" AI как тактикой одного удара так и
обычной дракой. Тогда я начал заниматься "воспитанием" AI и сегодня
я могу его победить только с 10 раза при этом конечно же игра начинает
раздражать - лезут мысли про корявое управление, дерганую анимацию
и прочее - все таки согласитесь в определенной мере игра должна
приносить удовольствие, а когда противник знает все твои шаги на перед
и бьет не переставая это может отпугнуть начинающих игроков...
с другой стороны все таки не хотелось бы на легком уровне сложности
с легкостью побеждать противника - например тактикой одного удара,
то есть на любом уровне сложности у игрока должна сформироваться
определенная сложная тактика с помощью которой он Может победить AI.
Это значит что должен быть набор вариантов действий включающих
не один удар а множество комбинаций, основывающихся на поведении
AI и тут конечно встает вопрос - а одинаково ли по сложности завалить
саб-зирой скорпиона или же скорпионом саб-зиру побить легче? Это уже
игровой балланс - в идеале для файтинга не должно быть такого
персонажа, который был бы сильнее/слабее других. То есть даже
если у скажем скелета - сила удара маленькая, то нужно компенсировать
её здоровьем. Тут опять возникает вопрос - "но ведь можно задать
AI такую тактику, при которой даже слабый персонаж может легко
бить самого сильного" - да можно...а как быть игроку?

В общем то сложные вопросы по игровой логике - но я надеюсь что
они будут Вам интересны - лично мне интересно реализовывать разные
тактики и наблюдать за процессом - да и вообще сам процесс создания
игровой логики и моделирования поведения AI скушным быть не может.

Я жду от Вас ответы и мысли по поводу вышеизложенного, а конкретно:
- как реализовать логику персонажа файтинга без функции рэндом() или
хотя бы с малым её использованием
- что делать с баллансом и можно ли его "высчитать"

Спасибо что прочли это огромное сообщение)))

П.С.: Для понятния о файтингах на флэше я решил поиграть в оных.
Две игры - это БушидоФайтерс и какая то про карате (непонятное)
обе меня не впечатлили - первая содержит несколько возможных
ударов и даже несколько рангов противников (легкий/средний/сложный)
но AI упорно не хочет вступать в бой...он всячески отходит и призывает
(жестами) подойти и отведать силушки богатырской - что я считаю
вообще нельзя делать в файтингах - все таки если вышел на татами
то дерись иначе зачем тогда вышел. И даже если подходишь к AI
все решается тактикой одного удара...
Вторая сделана по другому - там всего один удар - пробел...собственно
весь фатинг сводится к тому чтобы подойти поближе и жать пробел...
самое интересное что это работает - играть в принципе интересно - но
раздражает...хотя и сводится к понятиям файтинга подошел и провел
комбу - но вот один пробел...ИМХО конечно, но мне это не понравилось,
хотя в игре много идей - типа развития персонажа. Помоему что то
подобное было в "Путёвом Бойце". Самое тупое наверное это интеллект
противника для данной игры - нужно лишь подойти и в нужный момент
провести серию ударов без всякого сопротивления со стороны игрока
(блока нет)...Но для флэша - как интсрумент для расслабления в момент
когда нечем заняться на работе это наверное больше подойдет чем
серьезный файтинг - тут уже нужно определяться для чего и для кого
игра.
Вобщем все сводится к тому что в двух файтингах отсутствует
сложный интеллект противника - и отсутствует опция игры вдвоем...
Мне интересно узнать какие Вы встречали файтинге на флэше
(именно на флэше а не переложения с приставки) и какая там ситуация
с AI.

П.П.С.: если будет интерес и к моей конкретной реализации - буду
периодически выкладывать куда-нибудь для тестинга - чтобы можно
было наглядно оценивать Ваши предложения по AI и баллансу. Пока что
swf весит 44Кб. Да, совсем забыл - мой AI просто ломится на игрока и
пытается его добить...не знаю - хорошо это или плохо? Еще - сильный
удар рукой и удары ногами отбрасывают противника на определенное расстояние. Помнится в МК такое было сделано для вертушки и если
нанесено было определнное количество ударов - либо комбо...здесь
нужно подумать - просто не хочется делать новый МК - хочется
каких то своих принципов боя...

silin
01.02.2007, 00:08
>>мне кажется этот алгоритм лишен
логики
и у автора с логикой тоже не очень: нельзя же всерьез рассчитывать, что здесь кто-то проявит интерес к "модели Math.random()", есть же для этого игродельные форумы..

Noorman
01.02.2007, 20:07
silin если честно - я про модель "Math.random" и не спрашивал.
Вопрос - организация игровой логики AI для файтинга.
Меня интересуют как возможные варианты реализации
так и просто рекомендации, пожелания...

П.С.: почему то я думал что этот форум тоже поднимает вопросы
игростроя - и особенно на флэш. Я не прав?
Видел много вопросов про создание игр именно здесь...

Гробовщик
02.02.2007, 08:38
Не там ищещ по-моему, тебе надо на gamedev.net,dtf.ru и тому подобное