Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flasher.ru > Флейм

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Закрытая тема
Старый 13.03.2013, 18:47
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 1  
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
По умолчанию Учим АИ колдовать

Будет тема во флейме, нет у нас отдельного раздела по алгоритмам, или по программированию компьютерных игр.

Представьте себе такую игру. Стоят друг напротив друга персонаж игрока и его оппонент, накапливают полоски маны, кидаются заклинаниями. Что-то типа японских рпг, final fantasy, что-то такое. Puzzle quest или galactix тоже в какой-то степени подходит под описание.

Вопрос в программировании АИ на использование этих самых заклинаний.

В первом подходе я решил сделать так. Каждое заклинание в наличии - это экземпляр класса заклинания. У него есть функция calculateEffectiveness, которая получает ссылку на всю сцену боя и возвращает некое число - насколько эффективно использовать заклинание в данных условиях. Некий приоритет, вес. По таймеру проходимся по всем заклинанием, сохраняем их вес в массив, сортируем на убываение, оставляем только заклинание с максимальным весом, если их несколько с одинаковым весом, то выбираем одно из них случайным образом.

На первый взгляд выглядит круто. Можно на ходу менять наборы умений монстров, что очень полезно, потому что баланс занимает много времени. Не надо писать логику для каждого монстра в отдельности. Но я предвижу так же проблемы в будующем.

1) АИ будет спамить дешевые заклинания, не давая себе накапить маны на дорогие. Ведь если на заклинание не хватает маны, то оно возвращает оценку эффективности 0.
Можно решить эту проблему тем, что приоритет эффективности не будет зависеть от того сколько маны в данный момент, а если ее не хватает, то АИ просто будет переходить в режим накопления маны для этого заклинания, но при этом если в какой-то момент окажется, что эфффективность другого заклинания перевесила текущее(скажем надо срочно подлечиться) и на него хватает маны, то будет использовано только оно.

2) Некоторые заклинания - часть комбы. Т.е. сначала нужно наложить усиление урона, а потом только стрельнуть.
Ну, в принципе, решаемо. Скажем, если усиление урона еще не наложено, то на его использование будет больший приоритет, чем на сам "выстрел" и наоборот. Но, если, скажем, выстрел убьет оппонента и без усиления, то его приоритет можно увеличить, чтобы он перевесил усиление урона.

3) Дорогое заклинание требует много зеленой маны и чуть-чуть красной. Зеленая на нуле, зато красной полная полоска. Есть мелкое заклинание, которое требует только немного красной маны, но АИ в режиме накопления маны на дорогое заклинание.
Опять же решаемо. Если полоска маны заполнена, пусть мелкое заклинание приобретет дополнительный вес. АИ сбросится и использует его.

4) Заклинания, которые наносят урон, в зависимости от того, насколько заполнена полоска маны. У них обычно некое минимальное требование, типа минимум 15 маны, но при 40 маны они наносят значительно больше урона.
Вот это чуть более тяжелый случай. Можно перевести АИ в какой-то особенный режим наколения, который накапливает маны не на использования, а пока не достигнет какого-то порога.

В целом похоже, что такая система справиться с любой ситуацией, но я боюсь, что все это лишний геморой, и простой набор if'ов для каждого конкретного монстра справился бы лучше.
А еще беспокоит то, что множество действий будет произведено несколько раз. Каждый вызов calculateEffectiveness каждого заклинания независимо друг от друга будет проверять одно и тоже: сколько жизней у оппонентов, хватает ли маны, какие эффекты наложены и все такое. С другой стороны заклинаний-то ну шесть штук на АИ максимум, и проверка будет, ну максимум раз в пол секунды, чаще нет смысла.

Ну вот какие-то сумбурные разглагольствования, я прошу прощения, мне, наверное, просто нужно было привести мысли в порядок =))))
__________________
мой пустой блог

Старый 13.03.2013, 18:56
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 2  
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Я всегда ценил в играх интересный AI, пока по простоте игры и сложности AI для меня лидирует оригинальный Packman.

Написать нейронную самообучающуюся сеть для всех противников, которые с ходом игры, будут учиться противостоять игроку всё лучше и эффективнее
__________________
Дети не должны знать о своих родителях

Старый 13.03.2013, 19:28
NikolyA вне форума Посмотреть профиль Отправить личное сообщение для NikolyA Найти все сообщения от NikolyA
  № 3  
NikolyA
 
Аватар для NikolyA

Регистрация: Dec 2006
Сообщений: 1,764
но и при написании данной сети все равно все моменты учесть просто невозможно
__________________
а за окном атлантический океан!

Старый 13.03.2013, 19:43
AlexLucas вне форума Посмотреть профиль Отправить личное сообщение для AlexLucas Найти все сообщения от AlexLucas
  № 4  
AlexLucas
 
Аватар для AlexLucas

Регистрация: Feb 2011
Сообщений: 431
Всё зависит от конкретного набора заклинаний и ресурсов (жизнь, мана).
У каждого заклинания может быть не только урон, но и, скажем, дальность/радиус (если по площади) действия.
В зависимости от этого будет меняться баланс, а значит придётся менять механику.

Можно ограничить частоту использования некоторых заклинаний (cooldown), чтобы вконец не запутаться в приоритетах и выделением маны под заклинания. Скажем если СуперПуперУдар восстановился, то АИ ждёт ману только на него. А так пуляет заклинаниями с более низким приоритетом, среди которых тоже может быть подобная иерархия.
Или убрать с некоторых заклинаний требования на ману, и просто повесить на них время восстановления.

Конкретику в студию А то так можно долго филосовствовать.


Последний раз редактировалось AlexLucas; 13.03.2013 в 19:55.
Старый 13.03.2013, 19:59
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 5  
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Сколько раз ни писал АИ для игр, все время убеждался, если можно пойти по легкому пути, нужно идти по нему. Чем сложнее алгоритм делаешь, тем больше вероятность багов. Поэтому делаю сложные алгоритмы только в крайних случаях, когда без этого уже точно не обойтись.
Выбор заклинаний - не тот случай.

Цитата:
но я боюсь, что все это лишний геморой, и простой набор if'ов для каждого конкретного монстра справился бы лучше.
Еще когда читал первый пост, тоже пришел к такому же выводу )

Старый 13.03.2013, 20:34
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 6  
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
Цитата:
Конкретику в студию
Конкретику? Ну это клон Puzzle Quest. В какой-то мере - это элементарная mach3 игра, на экране поле цветных шариков-кирпичиков, соседние можно менять местами, комбинации из 3 и больше одного цвета убираются с экрана. С другой стороны, игрок соревнуется с компьютером. "Убранные" шарики или пополняют полоски маны убравшему, или уменьшают полоски жизни оппоненту. Ману четырех разных цветов можно тратить на заклинания которые выполняют какие-то манипуляции с игровым полем, параметрами персонажей или меняют правила игры на время. Со временем игрок открывает новые комбинации заклинаний и меняются АИ-оппоненты так же с новыми наборами заклинаний.
Компьютер обучен составлять комбинации из шариков, с этим никаких проблем. Осталось только научить использовать заклинания. Собственно в этом и основной смак игры - придумывать комбинации эффективных заклинаний в противовес заклинаниям компьютерного оппонента.

Цитата:
Сколько раз ни писал АИ для игр, все время убеждался, если можно пойти по легкому пути, нужно идти по нему. Чем сложнее алгоритм делаешь, тем больше вероятность багов. Поэтому делаю сложные алгоритмы только в крайних случаях, когда без этого уже точно не обойтись.
Выбор заклинаний - не тот случай.
Да тут понимаешь ли. На текущий момент порядка 20 придумано монстров у каждого свой набор заклинаний. А будет еще больше. И вот ты "научил" какого-нибудь монстра комбинировать три его заклинания. Написал пачку if-ов. А через час приходит гейм-дизайнер или тестер и говорит: нифига не работает, он меня все время убивает и вообще у "волка" такой же набор практически, это скучно. Говорит, давай вот "заморозку" ему уберем, "ядовитые когти" будет наносить урона пропорционально оставшимся жизням игрока, а вместо "заморозки" пусть будет как "паутина" у паука, только назовем "леденящий вой". Дурдом =) И поехали переписывать и перекомпилировать. Ну что мне делать? Внедрить lua и сказать: "пишите АИ сами"? Ну дык это моя работа. Хотя Lua - это мысль. По крайней мере перекомпилировать не надо будет.

А вот хотелось что-то универсальное, чтобы в xml-ке список заклинаний для текущего монстра подредактировал, в свойствах заклинания урон с 20 на 15 поменял, а АИ сам подстроился, без переписывания логики.
__________________
мой пустой блог

Старый 13.03.2013, 22:23
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 7  
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Лучший способ решить проблему - рассказать о ней :о). Кстати занимаюсь точно тем же сейчас во фриласне - боты пока тупые, просто ищут максимальную по камням комбинашку, правда иногда тупят, но это где то баг в алгоритме. Усложнять буду через месяц. Читая записи геймдиза уже сжимаются некоторые части тела.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 14.03.2013, 01:45
Sync вне форума Посмотреть профиль Отправить личное сообщение для Sync Найти все сообщения от Sync
  № 8  
Sync
 
Аватар для Sync

Регистрация: Feb 2013
Сообщений: 176
я бы строил "наборы" заклинаний, чтобы набор приводил к гибели противника. Ввел бы время (до возможности использования комбинации) как дополнительный коэф. к урону.
собрав, например, 5-10 рандомных комбинаций приводящих к победе уже можно будет сравнивать их "вес", показывающий примерное эффективность\время набора.
плюс к этому можно повесить простенький генетический алгоритм на разумное число итераций.
в результате получим не однотипные решения бота (он сможет и подождать до набора манны, и провести серию) и плюс к этому возможность влиять на его поведение (например, чтобы он не грохнул игрока слишком быстро). Ну и можно варьировать частоту пересчета (каждый ли ход будут обновляться наборы, сколько итераций для хода можно использовать в генетическом алгоритме и т.д.) и, опять же, отмазка от гейм-дизов "это не я, это всё природа" ))

Старый 14.03.2013, 10:39
dark256 вне форума Посмотреть профиль Отправить личное сообщение для dark256 Посетить домашнюю страницу dark256 Найти все сообщения от dark256
  № 9  
dark256
 
Аватар для dark256

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
Результатом всех этих поисков, является, как правило, макро-язык управления АИ , который торжественно вручается гейм-дизу в совокупности с пожеланиями теплых ног, дальнего пути и низколетящих насекомых.

2 iflamberg:
изобрази графически все блоки данных для обработки. Компактно. С минимумом текста.
входные данные, что есть, что влияет, действие.
Чтобы развлечься, можно мою тулзу поюзать и наскриншотить.
https://vk.com/app1988560_43915359?ref=1


ТИпа: https://pp.vk.me/c924/u43915359/1238...z_03ccc7a0.jpg
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

Старый 14.03.2013, 12:40
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 10  
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
Сообщение от iflamberg Посмотреть сообщение
Будет тема во флейме, нет у нас отдельного раздела по алгоритмам, или по программированию компьютерных игр.
Не будет, ибо, цитирую описание раздела Флейм:
Цитата:
Флейм
Раздел для болтовни и выпуска пара.
Алгоритмы и программирование обсуждаются в разделах AS 1/2, AS 3 и тп.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Создать новую тему Закрытая тема Часовой пояс GMT +4, время: 12:36.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 12:36.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.