GM2 9: Возвращаемся в процесс, тупим над ИИ
Ссылка на основную статью 2-го сезона полного провала разработки.
Хотела выкладывать по статейке каждую неделю, но не задалось. Я втянулась, ознакомилась с кодом, вспомнила алгоритмы, добавила комментарии, главное меню с настройкой числа игроков и начала внедрять ИИ.
Про ощущения
Ощущения хорошие. Неожиданно вышло как с дипломом. Вроде, лень начинать, но стоит открыть, как процесс идет сам собой. Начала с малых правок и втянулась в процесс. А вот писать тексты немного лениво стало.
Алгоритмы ИИ
Сначала думала встроить ИИ напрямую в код, контролирующий ход всего игрового процесса, но задумалась, что не стоит засорять алгоритмы. Вынесла ИИ в виде отдельного объекта, который берет данные из объекта-контроллера, работает с ними и воздействует на игровые сущности наравне с игроком, как сторонняя сущность.
Для начала наладила получение ИИ игровой информации и алгоритмы влияния на кубики с картами, это было несложно. Сложности начались позже.
Через простую проверку условий ИИ может распределять кубики по ячейкам, которые сразу же закроют проверки на навыки, но остаются висеть незакрытые проверки.
Чисто логически нужно запустить второй пробег, подключая теперь и карты предметов с бустами, однако может сложиться ситуация, когда карты под незакрытую проверку нет и нужно переместить уже размещенный ранее кубик на другую позицию.
Если реализовывать это через прямой перебор вариантов, то придется прописывать трехэтажную логику циклов и условий, что довольно трудоемко, напряжно и сложно для выискивания возможных ошибок.
Варианты решения
Первый вариант самый простой, забить на перекладывание кубиков. Игрок все равно не видит, какие у ИИ карты на руках, а значит, не заметит разницы между реальной неспособностью ИИ пройти все проверки и этой маленькой тупостью.
Второй вариант - поменять порядок распределения. Сначала раскидывать по проверкам карты предметов и потом уже добивать их сверху кубами.
Третий вариант - создать массивы помощники с упорядочиванием кубиков и карт предметов от самых малых значений и бонусов к самым большим. Работа с такими массивами устранит необходимость в дополнительных проверках и условиях.
Четвертый вариант - сменить подход. Вместо циклов с пробегами вариантов создать массив всех возможных расположений кубов и карт предметов с оценкой их успешности и выгоды для ИИ, чтобы по итогу выбрать один. По идее, это самый хороший вариант, но я пока его не сильно обдумывала, потому не знаю, какие там могут возникнуть подводные камни.
В общем, пока подумаю, возможно, остановлюсь на халявном первом, а потом уже попробую внедрить другие. Еще думаю написать обзорную статью с разбором принципов работы алгоритмов проекта. Может, будет кому интересно.