Статья:

МЕТОД И ПРОГРАММНАЯ РЕАЛИЗАЦИЯ СИСТЕМЫ ДИНАМИЧЕСКОГО ИЗМЕНЕНИЯ СЛОЖНОСТИ ДЛЯ КОМПЬЮТЕРНОЙ ИГРЫ В ЖАНРЕ "SURVIVAL HORROR"

Конференция: CCCXLII Студенческая международная научно-практическая конференция «Молодежный научный форум»

Секция: Технические науки

Выходные данные
Хохлинов Д.И. МЕТОД И ПРОГРАММНАЯ РЕАЛИЗАЦИЯ СИСТЕМЫ ДИНАМИЧЕСКОГО ИЗМЕНЕНИЯ СЛОЖНОСТИ ДЛЯ КОМПЬЮТЕРНОЙ ИГРЫ В ЖАНРЕ "SURVIVAL HORROR" // Молодежный научный форум: электр. сб. ст. по мат. CCCXLII междунар. студ. науч.-практ. конф. № 16(342). URL: https://nauchforum.ru/archive/MNF_interdisciplinarity/16(342).pdf (дата обращения: 09.05.2026)
Лауреаты определены. Конференция завершена
Эта статья набрала 0 голосов
Мне нравится
Дипломы
лауреатов
Сертификаты
участников
Дипломы
лауреатов
Сертификаты
участников
на печатьскачать .pdfподелиться

МЕТОД И ПРОГРАММНАЯ РЕАЛИЗАЦИЯ СИСТЕМЫ ДИНАМИЧЕСКОГО ИЗМЕНЕНИЯ СЛОЖНОСТИ ДЛЯ КОМПЬЮТЕРНОЙ ИГРЫ В ЖАНРЕ "SURVIVAL HORROR"

Хохлинов Дмитрий Иванович
студент, МИРЭА – Российский технологический университет, РФ, г. Москва

 

Аннотация. В данной статье проведен анализ имеющихся проблем со сложностью компьютерной игры в жанре «Survival horror» и рассмотрены алгоритмы, разработанные в рамках проектирования и реализации системы динамического изменения сложности этой игры.

 

Ключевые слова: динамическая сложность, изменение параметров локации, изменение маршрутов NPC, ранг игрока, веса комнат, мера бдительности.

 

В современных играх в жанре survival horror важно поддерживать атмосферу, в которой игрок будет оставаться напряженным, но вовлеченным в игровой процесс. Также необходимо учитывать различия в способностях разных игроков, чтобы не сделать игру слишком скучной или наоборот, слишком сложной. Система динамической сложности позволяет адаптировать игру под конкретного игрока, его текущие навыки и стиль прохождения, что сделает игровой процесс более глубоким и реалистичным.

Анализ предметной области

Объектом исследования является компьютерная игра в жанре «Survival horror». В ней игрок берет на себя роль сотрудника некой компании, которая занимается сбором и продажей вещей, не принадлежавших ей изначально, на черном рынке. Естественно, деятельность этой компании не осталась незамеченной, и собственники всех возможных целей Компании позаботились о защите своих зданий, закупив роботов-охранников, электронные замки и систему сигнализации последней модели для защиты от сотрудников Компании.

Также на игрока давит и сама Компания, которая из-за финансовых трудностей со временем требует выполнять все более и более крупные заказы клиентов. В случае, если игрок не может выполнить очередной заказ, он проигрывает.

Игровой процесс обобщенно можно описать так:

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

2. Игрок запускает свой космический корабль и отправляется в одну из доступных локаций.

3. В этой локации игрок пытается собрать как можно больше вещей, используя выданное Компанией оборудование (фонарик, рюкзак, взломщик замков, «сканировщик» – прибор для поиска вещей и определения поля зрения роботов-охранников).

4. Игрок либо успешно покидает локацию с найденными вещами, либо попадается присутствующим на локации NPC – охранникам. В последнем случае все найденные вещи изымаются, и игрок покидает локацию ни с чем.

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

6. Игрок повторяет пункты 2-5, пока не выполнит заказ. Если он успешно его выполняет, Компания предлагает ему новый заказ с увеличенной требуемой суммой, тем самым возвращая игрока к пункту 1.

7. Если игроку не хватает вещей для выполнения заказа, и отведенное время на его выполнение закончилось, то игрок проигрывает.

В ходе анализа текущего состояния игры были выделены следующие потенциальные проблемы, которые могут негативно повлиять на пользовательский опыт:

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

- максимально улучшенное снаряжение в данный момент позволяет игроку собирать вещи в количестве намного большем, чем требуется для выполнения заказов. Так, игрок может быстро прокачать снаряжение, создать некоторый запас вещей, пока требуемые суммы не слишком велики, и в дальнейшем использовать этот запас, если игроку для выполнения заказов не будет хватать вещей, выносимых им с локаций. Это существенно затягивает игру и повышает шанс того, что игрок просто ее забросит, посчитав скучной и неинтересной;

- игрок может выбрать для прохождения одну локацию по некоторой причине (например, высокая средняя стоимость генерируемых вещей) и долго не менять ее. При этом охранники этой локации на это никак не реагируют, что выглядит крайне нелогично.

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

Предметом исследования является система динамического изменения сложности в этой компьютерной игре, которую необходимо реализовать для решения вышеперечисленных проблем. При принятии решения о разработке данной системы была выдвинута гипотеза, что система динамического изменения сложности позволит удерживать игрока в состоянии «потока» [1], выдавая ему задания, соответствующие его текущему прогрессу, тем самым поддерживая его интерес к игре, а также сведет к минимуму вероятность возникновения описанных проблем.

Функциональные возможности системы будут включать:

- адаптацию сложности игры – в частности, требуемых сумм в заказах – к текущему уровню игрока;

- изменение характеристик NPC – скорости, дальности обзора, маршрутов, а также их количества – в зависимости от нескольких последних вылетов игрока.

Анализ существующих систем динамического изменения сложности

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

- преимущества, которые стоит привнести в свою систему;

- недостатки, которые необходимо избежать;

- особенности, которым стоит уделить особое внимание.

В процессе поиска были найдены некоторые аналогичные системы, отвечающие за динамическое изменение сложности в таких играх, как Resident Evil 4 [2], Alien: Isolation [3] и Minecraft [4]. Сравнительный анализ этих систем приведен в таблице 1.

Таблица 1.

Таблица сравнения некоторых систем динамического изменения сложности

Игра

Основная идея системы

Цели разработки

Недостатки

Resident Evil 4

Изменение характеристик врагов в зависимости от статистики игрока

Повышение реиграбельности и адаптация баланса под игрока

Система иногда работает некорректно, делая врагов предсказуемыми или слишком сложными

Alien: Isolation

Обучение ИИ врага на основе действий игрока

Создание атмосферы ужаса и непредсказуемости

Чрезмерная адаптация ИИ под игрока, приводящая к сильному повышению сложности

Minecraft

Улучшение экипировки врагов в зависимости от возраста мира и времени, проведенного в одной локации

Мотивация игрока к исследованию мира

Эффект системы легко нейтрализовать или использовать для добычи ресурсов

 

Таким образом, каждая рассмотренная система динамического изменения сложности преследует свои цели: в одних играх она позволяет адаптировать игру под игрока, в других – помогает разработчикам создать необходимую атмосферу или вызвать определенные действия игрока. Вследствие этого их нельзя сравнить по фиксированному набору критериев, но необходимо учитывать их преимущества и недостатки при проектировании и разработке собственной системы.

Определение ключевых понятий системы динамического изменения сложности

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

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

Мера бдительности – целое число от 0 до 5, отображающее активность охранников на локации. Мера бдительности повышается, если игрок посещает локацию. Если при этом игрок активировал сигнализацию или его поймали, то мера бдительности повышается быстрее обычного. Если игрок не посещает локацию, то мера бдительности для нее снижается.

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

Определение параметров, подлежащих изменению системой динамического изменения сложности

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

От ранга игрока будет зависеть прирост суммы заказов. В данный момент он является фиксированной величиной, что существенно затягивает игру на поздних стадиях из-за того, что игрок собирает больше вещей, чем требуется для выполнения задания, и оставляет излишки в качестве запасов.

От меры бдительности будут зависеть следующие характеристики охранников и локации:

- Время до появления охранников на локации;

- Вероятность адаптации маршрутов охранников под игрока;

- Вероятность появления дополнительных охранников;

- Количество попыток создать дополнительных охранников;

- Время до прибытия подкрепления;

- Скорость охранников;

- Дальность обзора охранников;

- Время на осмотр точки маршрута охранниками;

- Радиус гарантированного обнаружения охранниками;

- Обращают ли охранники внимание на:

- открытие или закрытие дверей игроком,

- лежащие на полу вещи,

- активность замков в комнатах и на дверях,

- сложность замков в комнатах и на дверях.

В данный момент перечисленные параметры являются постоянными, что не представляет особой сложности для опытного игрока. Для достижения требуемого эффекта необходимо подобрать значения для этих параметров таким образом, чтобы при высокой мере бдительности локация была намного более агрессивной по отношению к игроку, чем в обычном состоянии. Это будет мотивировать игроков менять локацию по мере повышения меры бдительности.

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

Определение алгоритмов изменения параметров в соответствии с текущей сложностью

Далее были составлены алгоритмы, реализующие изменение описанных выше параметров в соответствии с текущей сложностью игры.

Коррекция прироста суммы заказов

Для адаптации скорости роста суммы заказов система будет производить вычисления ранга игрока в зависимости от текущего уровня снаряжения и на основании полученного ранга изменять величину, на которую увеличится следующая сумма заказа. Вычисления этой суммы производятся по формулам (1) и (2):

                                                                                                (1)

                                                                                              (2)

где      – сумма заказа под номером ,

           – номер текущего заказа,

           – базовая сумма заказа,

           – множитель суммы заказа под номером ,

           – ранг игрока,

           – случайная величина, принадлежащая отрезку ,

           – базовый ранг игрока,

           – функция для вида снаряжения под номером  определяющая значение, добавляемое к рангу игрока, в зависимости от текущего уровня снаряжения ,

           – текущий уровень снаряжения под номером .

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

В игре имеется 5 видов снаряжения, которые игрок может использовать. Они имеют разную ценность для игрока, поэтому и их влияние на ранг должно быть соразмерно их ценности для игрока.

Управление мерой бдительности и характеристиками NPC на локациях

Для реализации изменения характеристик охранников на локациях в зависимости от меры бдительности игра будет сохранять ее для каждой локации в файле сохранения. Игрок может влиять на меру бдительности для конкретной локации следующими способами:

- если игрок, находясь на базе, выбрал эту локацию для прохождения и начал ее прохождение, то мера бдительности для этой локации повышается на 1;

- если игрок, находясь на базе, выбрал некоторую другую локацию для прохождения и начал ее прохождение, то мера бдительности для этой локации понижается на 1;

- если игрок, находясь на этой локации, вызвал срабатывание сигнализации, то мера бдительности для этой локации повышается на 1;

- если игрок, находясь на этой локации, был пойман охранниками, то мера бдительности для этой локации становится равен 5.

Таким образом, неаккуратные действия игрока на локации будут наказываться повышением сложности для этой локации, что будет мотивировать его играть более осторожно.

Далее были определены конкретные величины для описанных ранее параметров, зависящих от меры бдительности. Эти величины приведены в таблице 2.

Таблица 2.

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

Параметр \ Мера бдительности

0

1

2

3

4

5

Время до появления охранников, % от базового

100%

80%

60%

40%

20%

0%

Вероятность появления дополнительных охранников, %

0%

0%

0%

25%

50%

100%

Количество попыток создать дополнительных охранников

0

0

0

1

2

3

Время до прибытия подкрепления, % от базового

100%

85%

70%

55%

40%

25%

Скорость охранников, % от базовой

100%

110%

120%

130%

140%

150%

Дальность обзора охранников, % от базового

100%

140%

180%

220%

260%

300%

Время на осмотр точки маршрута охранниками, % от базового

100%

120%

140%

160%

180%

200%

Радиус гарантированного обнаружения охранниками, % от базового

100%

120%

140%

160%

180%

200%

Охранники обращают внимание на:

открытие или закрытие дверей игроком

нет

нет

да

да

да

да

лежащие на полу вещи

нет

нет

нет

да

да

да

активность замков в комнатах и на дверях

нет

нет

нет

нет

да

да

сложность замков в комнатах и на дверях

нет

нет

нет

нет

нет

да

 

Адаптация маршрутов NPC под активность игрока на локации

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

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

Отслеживаемые действия игрока и баллы активности, присваиваемые комнате за эти действия, приведены в таблице 3.

Таблица 3.

Соответствие действий игрока баллам активности, присваиваемым комнате

Действие

Баллы активности

Первое открытие двери в комнату

1

Первый вход в комнату

0,5

Последующие входы в комнату (при условии, что с момента последнего входа в комнату прошло более 60 секунд)

0,1

Попытка взлома замка на двери в комнату

1

Попытка взлома замка на сейфе в комнате

1

Срабатывание сигнализации замка

5

Первое открытие дверцы сейфа в комнате

0,5

Взаимодействие со столом в комнате

0,5

Подбор предмета в комнате

0,05

 

Таким образом, алгоритм изменения весов комнат выглядит следующим образом:

- Если у комнаты под номером  количество очков активности  больше нуля, то эти очки активности прибавляются к весу комнаты (формула 3):

                                                       (3)

где      – новый вес для комнаты под номером ,

           – текущий вес комнаты под номером ,

           – очки активности игрока в комнате под номером ;

- Если у комнаты под номером  количество очков активности  равно нулю, то из текущего веса комнаты вычитается величина . Если результат получился меньше нуля, то новый вес комнаты считается равным нулю (формула 4):

                                        (4)

где      – новый вес для комнаты под номером ,

           – текущий вес комнаты под номером ,

           – величина, на которую уменьшается вес комнаты при отсутствии активности игрока.

В рассматриваемой игре локации состоят из двух типов комнат: статических (которые предустановлены на этой локации) и динамических (появляющихся в результате работы генератора уровней). После окончания генерации уровня к комнатам применяются их веса  затем комнаты сортируются в порядке убывания весов. При появлении охранников на локации они выбирают для своего маршрута несколько комнат с наибольшим весом, таким образом охватывая часто посещаемые игроком комнаты. После этого выбранные комнаты удаляются из списка доступных для выбора комнат, что обеспечит покрытие несколькими NPC той части локации, в которой игрок появлялся чаще всего.

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

Для определения неизвестного веса комнаты последовательно выполняются следующие шаги:

1. Проводится обход сгенерированной карты в ширину, начиная с комнаты, для которой рассчитывается вес (исходной комнаты), до комнат, веса которых уже известны. Этим комнатам присваиваются номера  где  – число найденных комнат с уже известными весами.

2. Обозначим как  вес комнаты под номером  – расстояние в комнатах от исходной комнаты до комнаты под номером .

3. Для каждой найденной комнаты рассчитывается коэффициент  определяющий влияние веса найденной комнаты на вес исходной комнаты (формула 5):

                                                      (5)

где      – наименьшее из расстояний .

4. Далее рассчитывается итоговый вес для исходной комнаты (формула 6):

                                               (6)

где      – итоговый вес для исходной комнаты,

           – коэффициент затухания, равный величине, на которую уменьшается вес комнаты при .

Рассмотренный алгоритм вычисления веса для комнаты, вес которой отсутствует в сохранении, позволяет примерно восстановить ее вес, основываясь на весах расположенных поблизости комнат, записи о которых есть в сохранении игры. Он позволяет не отбрасывать комнаты с неизвестными весами в алгоритме изменения маршрутов охранников на локации, повышая покрытие локации этим алгоритмом.

Разработка и интеграция системы динамического изменения сложности. 

После проектирования и описания работы системы динамического изменения сложности была проведена ее разработка и интеграция в игру. Исходный код реализованной системы можно найти на GitHub-репозитории игры [5]. Затем для проведения тестирования системы была произведена сборка проекта в исполняемый файл, который можно найти на сайте игры [6].

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

 

Список литературы:
1. Теория потока: как создать игру, которую полюбят все / Хабр [Электронный ресурс]. – URL: https://habr.com/ru/companies/plarium/articles/244831/ (дата обращения: 02.04.2026)
2. General Overview of Difficulty Adjustment (DA) System in RE4 Remake : r/residentevil4  [Электронный ресурс]. –  URL: https://www.reddit.com/r/residentevil4/comments/12myv5i/general_overview_of_difficulty_adjustment_da/ (дата обращения: 14.03.2026)
3. Alien Isolation Ai Explained - Oreate AI Blog [Электронный ресурс]. –  URL: https://www.oreateai.com/blog/alien-isolation-ai-explained/8d716c7018af4188fcf65cb82debd8e5 (дата обращения: 14.03.2026)
4. Сложность – Minecraft Wiki [Электронный ресурс]. –  URL: https://minecraft.fandom.com/ru/wiki/Сложность#Локальная_сложность (дата обращения: 14.03.2026)
5. dmitryh2004/unity-unnamed-2 [Электронный ресурс]. – URL: https://github.com/dmitryh2004/unity-unnamed-2 (дата обращения: 16.04.2026)
6. Unnamed 2 – The common channel [Электронный ресурс]. – URL: https://dmitryh2004.github.io/the-common-channel-projects/unnamed2.html (дата обращения: 16.04.2026)