РАЗРАБОТКА ИГРЫ В ВИРТУАЛЬНОЙ РЕАЛЬНОСТИ НА ТЕМУ СЕЛЕКЦИИ ПЧЕЛ НА ОСНОВЕ СТОХАСТИЧЕСКИХ ПРОЦЕССОВ

  • Вид работы:
    Магистерская работа
  • Предмет:
    Информационные технологии
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
  • Опубликовано:
    2023-06-10
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

РАЗРАБОТКА ИГРЫ В ВИРТУАЛЬНОЙ РЕАЛЬНОСТИ НА ТЕМУ СЕЛЕКЦИИ ПЧЕЛ НА ОСНОВЕ СТОХАСТИЧЕСКИХ ПРОЦЕССОВ

 

 

 

 

 

 

 

 

РАЗРАБОТКА ИГРЫ В ВИРТУАЛЬНОЙ РЕАЛЬНОСТИ НА ТЕМУ СЕЛЕКЦИИ ПЧЕЛ НА ОСНОВЕ СТОХАСТИЧЕСКИХ ПРОЦЕССОВ

(магистерская диссертация)

 

 


 

 

 

 

АННОТАЦИЯ

 

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

Цель работы – разработка игры в виртуальной реальности про селекцию пчел с использованием игрового движка Unreal Engine.

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

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

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

СОДЕРЖАНИЕ

 

ОБОЗНАЧЕНИЯ И СОКРАЩЕНИЯ   5

ВВЕДЕНИЕ   6

1.   ОСОБЕНОСТИ РАЗРАБОТКИ ИГР ВИРТУАЛЬНОЙ  РЕАЛЬНСОТИ 7

1.1.  Основные понятия   7

1.2.  Объемы рынка виртуальной реальности   11

1.3.  Обзор существующих платформ для разработки игр виртуальной реальности 12

1.4.  Обоснование выбора целевой платформы и инструментов для разработки   13

1.5.  Выбор методологии разработки ПО и ведения документации 16

1.6.  Выводы 20

2.   ПРОЕКТИРОВАНИЕ ГЕНЕТИЧЕСКОЙ МОДЕЛИ 21

2.1.  Основные понятия   21

2.2.  Законы Менделя   22

2.3.  Описание модели пчелы 25

2.4.  Проектирование модели пчел 27

2.5.  Логика скрещивания 27

2.6.  Выводы 29

3.   ГЕЙМДИЗАЙН ИГРЫ И РАЗРАБОТКА ДИЗАЙН-ДОКУМЕНТА 30

3.1.  Основные понятия   30

3.2.  Основа игры – игровые столпы   32

3.3.  Оценка целевой аудитории игры   34

3.4.  Обзор похожих игр   35

3.5.  Цели игры 37

3.6.  Описание игрового цикла 39

3.7.  Описание взаимодействия игрока с миром   41

3.8.  Выводы 43

4.   ОПИСАНИЕ РАЗРАБОТАННОЙ ИГРЫ 44

4.1.  Описание интерфейса генов пчелы 44

4.2.  Улей для селекции   45

4.3.  Инвентарь игрока   54

4.4.  Строительство ульев на участке 55

4.5.  Интерфейс биистеария   57

4.6.  Планы для дальнейшего развития   58

4.7.  Выводы 63

ЗАКЛЮЧЕНИЕ   64

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ   65

Приложение А   66

 

 

ОБОЗНАЧЕНИЯ И СОКРАЩЕНИЯ

 

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

Актор – программная сущность заданной структуры и механизмов взаимодействия, которая используется в Unreal Engine.

Биистеарий (англ. Beеstiary) – справочник пчел. Слово является англицизмом слова Beеstiary, образованного игрой слов Bee и Bestiary.

ВКР – выпускная квалификационная работа.

Геймдизайн (англ. Game design) или игровой дизайн – процесс создания формы и содержания игрового процесса разрабатываемой игры.

Геймплей (англ. Gameplay) или игровой процесс – компонент игры, отвечающий за взаимодействие игры и игрока.

Дизайн-документ – это детальное описание разрабатываемой компьютерной игры.

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

Коммит (англ. Commit) – в системах управления версиями это операция, которая отправляет последние изменения исходного кода в репозиторий, делая эти изменения частью основной ревизии репозитория.

VR (англ. Virtual reality) или виртуальная реальность – созданный техническими средствами мир, передаваемый человеку через его ощущения: зрение, слух, осязание и другие.

 

 

 

 

ВВЕДЕНИЕ

 

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

Существенный рост и интерес к играм виртуальной реальности начался в 2010-х годах с появлением нового поколения VR-устройств, таких как Oculus Rift и HTC Vive. Эти устройства предложили более доступные и реалистичные варианты виртуального взаимодействия, что привлекло широкую аудиторию и разработчиков игр.

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

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

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

1. ОСОБЕННОСТИ РАЗРАБОТКИ ИГР ВИРТУАЛЬНОЙ
РЕАЛЬНОСТИ

 

1.1.   Основные понятия

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

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

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

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

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

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

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

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

В сфере виртуальной реальности выделяются несколько платформ:

PC VR относится к виртуальной реальности, которая работает на базе персонального компьютера. В эту категорию входят различные VR-платформы и гарнитуры, включая Valve Index, HTC Vive, HP Reverb G2 и гарнитуры Windows Mixed Reality. Платформы PC VR обеспечивают высокую точность изображения, расширенные возможности отслеживания и доступ к широкому спектру игр, приложений и опыта VR. Для оптимальной работы этих платформ часто требуется мощный компьютер с совместимыми техническими характеристиками.

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

Oculus (Meta[1]) Quest 2 – это отдельная платформа VR, разработанная компанией Oculus VR. Она предлагает беспроводной, универсальный VR опыт с отслеживанием при помощи камер в шлеме и вычислительными возможностями, устраняя необходимость в отдельном ПК или консоли. Также данный шлем можно подключить к ПК и получить полноценный опыт PC VR платформы.

PlayStation VR2 – шлем виртуальной реальности, разработанный компанией Sony Interactive Entertainment, PlayStation VR2 – это платформа VR, созданная специально для использования с игровыми консолью PlayStation 5. Это доступный вариант для любителей консольных игр.

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

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

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

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

Эти гарнитуры обычно имеют собственные магазины приложений или платформы контента, позволяющие пользователям загружать и использовать VR-игры, приложения и другие возможности погружения прямо на устройстве. Они часто оснащены функцией отслеживания "изнутри наружу", которая использует встроенные камеры или датчики для отслеживания движений и положения пользователя в виртуальной среде. Oculus Quest 2, PlayStation VR2, Pico Neo 3 – популярные примеры автономных VR-гарнитур.

Проводные гарнитуры виртуальной реальности, или гарнитуры на базе ПК, полагаются на внешние устройства, такие как мощный компьютер, для обеспечения необходимой вычислительной мощности и графических возможностей. Эти гарнитуры подключаются к компьютеру с помощью кабелей или по Wi-Fi и требуют компьютер для запуска VR-приложений и опыта. Гарнитуры VR на базе ПК, такие как Valve Index и HTC Vive, обеспечивают высокое качество изображения, улучшенное отслеживание и широкий выбор контента.

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

Основным преимуществом проводных гарнитур VR является их способность обеспечивать более интенсивную графику и погружение благодаря вычислительной мощности, предоставляемой подключенным ПК. Однако они менее портативны и требуют специального компьютера с поддержкой VR.

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

 

1.2. Объемы рынка виртуальной реальности

Важной оценкой состояния рынка является его объем. Рынок виртуальной реальности постоянно растет и на конец 2022 года оценивается в 28.41 миллиарда долларов с ожидаемым ростом в 13.8% ежегодно. [1]

Также не менее важно иметь некоторую оценку по объему платформ виртуальной реальности, рассмотренных выше. Наиболее крупным игроком является компания Meta, по последним данным можно говорить, что было продано 20 миллионов устройств линейки Quest, которые являются автономными шлемами, в феврале 2023. В нее входит оригинальный Quest, Quest 2 и Quest Pro. [2]

Другой крупной платформой является SteamVr. Исходя из оценок, количество активных пользователей Steam ежемесячно на 2022 год можно оценивать в 120 миллионов человек. [3] Также по известной статистике количество пользователей на апрель 2023 года с шлемами виртуальной реальности составляет 1.93% от количества пользователей. Из этих показателей можно оценить, что активных пользователей с шлемами виртуальной реальности порядка 2.316 миллиона. Также известно распределение шлемов у пользователей, проходивших опрос. Так лидером является шлем виртуальной реальности Oculus Quest 2 c 45.14% пользователей. Далее идет Valve Index с 17.02%, Oculus Rift S с 11.71%, HTC Vive c 6.21%, Oculus Rift c 5.26% и шлемы Windows Mixed Reality с 4.91%. [4]

Еще одной платформой являются шлемы от японской PlayStation. На момент конца 2019 года известно, что было продано более 5 миллионов шлемов оригинальной PS VR. [5] А также продано более 600 тысяч копий в первые 6 недель, вышедшего недавно 22 февраля 2023 года шлема виртуальной реальности PS VR2. [6]

 

1.3. Обзор существующих платформ для разработки игр виртуальной реальности

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

Unreal Engine, разработанный компанией Epic Games, является игровым движком, поддерживающим VR-разработку. Он обладает широкими возможностями для VR и предоставляет ряд функций, специально разработанных для создания захватывающих VR-переживаний. Система визуального программирования при помощи Blueprint и поддержка программирования на C++ делают Unreal Engine гибким и универсальным для VR-разработки.

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

Godot Engine – это игровой движок с открытым исходным кодом, который приобрел популярность в последние годы. Он поддерживает VR, позволяя разработчикам создавать VR-игры и опыт с помощью визуального или традиционных языков программирования, таких как C#, GDScript. Godot Engine известен своей простотой, легковесностью и активным сообществом.

Также существует вариант разработки собственного игрового движка.

 

1.4. Обоснование выбора целевой платформы и инструментов для разработки

Каждый вариант рассмотренных игровых движков имеет свои плюсы и минусы. Для Unreal Engine можно выделить следующие плюсы:

?   Отличные графические возможности и реалистичные визуальные эффекты.

?   Мощная система визуального программирования Blueprint и поддержка программирования на C++.

?   Широкие возможности и поддержка VR.

?   Активное сообщество и обширная документация.

?   Сильное присутствие в игровой индустрии.

Минусы можно выделить следующие:

?   Непростая кривая обучения, особенно для новичков.

?   Может быть ресурсоемкой и требует мощного ПК для разработки.

?   Большие размеры файлов и более длительное время сборки по сравнению с другими движками.

Для Unity можно выделить такие плюсы:

?   Простота в изучении и использовании, подходит для начинающих.

?   Большая поддержка сообщества и обширная документация.

?   Возможность кроссплатформенной разработки.

?   Надежная поддержка VR с помощью инструментария Unity XR.

?   Магазин активов с широким выбором готовых активов и плагинов.

?   Постоянные обновления и улучшения.

Минусы:

?   Производительность может быть проблемой для графически требовательных VR-проектов.

?   Бесплатная версия имеет ограничения, а для расширенных функций требуется платная лицензия.

?   Пользовательский интерфейс Unity может быть слишком сложным для некоторых пользователей.

Godot Engine имеет плюсы:

?   Легкий и простой в использовании.

?   Открытый исходный код и бесплатное использование.

?   Поддерживает разработку VR.

?   Визуальные программирование и варианты языков программирования (C# и GDScript).

?   Активное сообщество и растущая экосистема.

Минусы:

?   Меньшая пользовательская база по сравнению с Unity и Unreal Engine.

?   Ограниченные ресурсы и документация по сравнению с другими движками.

?   Не так много функций, как в некоторых других движках.

?   Менее оптимизирован для графически требовательных VR-проектов.

Создание собственного движка для разработки VR может быть серьезным мероприятием со своим набором плюсов и минусов. Вот некоторые плюсы разработки собственного движка:

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

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

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

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

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

Минусы разработки собственного движка:

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

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

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

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

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

Исходя из навыков и наличия временных рамок наиболее релевантным был выбран движок Unreal Engine для разработки. С его системой визуального программирования Blueprint возможно создавать VR-взаимодействия без обширных знаний в области программирования, и всегда можно заглянуть в исходники движка на C++ в процессе разработки. Unreal Engine поддерживает кроссплатформенную разработку, позволяя целиться в начале на VR для ПК, а затем оптимизировать игру под Oculus Quest, так как процесс выхода игры на разных платформах также требует время для создания страницы игры в магазине и ее продвижение.

 

1.5. Выбор методологии разработки ПО и ведения документации

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

Далее будут рассмотрены несколько вариантов методов разработки программного обеспечения [7].

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

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

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

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

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

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

Гибкая методология разработки – данная модель в себя включает несколько различных течений. Например, Scrum – в основе данной модели лежат еженедельные спринты в течении которой происходит работа над продуктом. Перед каждым спринтом происходит планирование задач и оценивается список еще не решенных задач. Еще как разновидность течения можно рассмотреть Kanban. В данной модели проект делится на этапы, которые визуализируются на Kanban-доске. На данной доске имеются колонки: планируется, в разработке, тестирование, релиз и т.п. Также на доске имеются карточки с задачами. По мере выполнения задачи ее карточка постепенно перемещается по доске и проходит каждый процесс разработки.

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

В качестве Agile-доски и ведения документации использовался сервис Notion. В нем было выделено несколько колонок таких как:

?   Ideas – различная информация которая может не относится на прямую к задачам, но хранить в себе полезную информацию для разработки.

?   To Do – задачи, которые были определены в процессе разработки.

?   Doing – задачи, которые в процессе выполнения.

?   Done – выполненные задачи.

Пример ведения доски с задачами изображен на рис 1.

Рисунок 1 – Пример ведения задач в Notion

В Notion также удобно использовать в качестве ведения документации, для этого была создана отдельная страница, которая имела свои подразделы. Пример разделения на подразделы можно увидеть на рис. 2.

Риснуок 2 – Разделение документации на разделы.

Также в процессе разработки был использован Git-репозиторий в GitHub. Пример коммитов можно увидеть на рис. 3.

Рисунок 3 – Коммиты на GitHub в процессе разработки

Важно выделить основыне требования необходимые для реализации данного приложения. С их помощью возможна оптимизация времени разработки программного продукта [8]

 

1.6. Выводы

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

 

2.   ПРОЕКТИРОВАНИЕ ГЕНЕТИЧЕСКОЙ МОДЕЛИ

 

2.1. Основные понятия

В данном разделе будут использоваться следующие понятия в ходе изложения.

Ген – в классической генетике определяется как наследственный фактор, который несет информацию об определённом признаке или функции организма и который является структурной и функциональной единицей наследственности [9].

Хромосомой являются нуклеопротеидные структуры в ядре эукариотической клетки, в которых сосредоточена большая часть наследственной информации и которые предназначены для её хранения, реализации и передачи [10].

Диплоидный организм – это организм, имеющий пару хромосом.

Гомологичными хромосомами является пара хромосом с одинаковым набором генов, но сами хромосомы могут быть не идентичны друг другу.

Аллели - различные формы одного и того же гена, расположенные в одинаковых участках (локусах) гомологичных хромосом, определяют направление развития конкретного признака. В диплоидном организме, может быть два одинаковых аллеля одного гена, в этом случае организм называется гомозиготным, или два разных, что приводит к гетерозиготному организму [11].

Мутацией является стойкое изменение генома, которое может быть унаследовано потомками [9].

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

Такое взаимодействие генов может быть кумулятивным или некумулятивным. В случае кумулятивной (накопительной) полимерии степень проявления признака зависит от суммирования эффектов генов. Чем больше доминантных аллелей генов, тем сильнее проявляется данный признак. При расщеплении потомства F2 по фенотипу в таком случае можно ожидать соотношение 1:4:6:4:1, при условии, что взаимодействуют две пары неаллельных генов, а гибриды F1 являются дигетерозиготами.[12]

 

2.2. Законы Менделя

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

Законы Менделя – это принципы передачи наследственных признаков от родительских организмов к их потомкам, вытекающие из экспериментов Грегора Менделя. [13]

В ходе исследований Менделя были сформулированы три основных закона передачи наследственных признаков.

Первым законом Менделя является закон единообразия гибридов первого поколения. Формулировка звучит следующим образом: при скрещивании двух гомозиготных организмов, относящихся к разным чистым линиям и отличающихся друг от друга по одной паре альтернативных проявлений признака, всё первое поколение гибридов (F1) окажется единообразным и будет нести проявление признака одного из родителей. [13]

Вторым законом Менделя является закон расщепления. При скрещивании двух гетерозиготных потомков первого поколения между собой во втором поколении наблюдается расщепление в определённом числовом отношении: по фенотипу 3:1, по генотипу 1:2:1.

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

Для примера работы данных законов можно рассмотреть пример. Пусть объектом рассмотрения выступают породы котов. Причем имеется 2 породы, которые различаются по двум признакам. Первый признак – цвет шерсти он может быть каштановым или альбиносом. Второй признак длина хвоста она может быть короткая или длинная. Причем каштановый цвет и короткий хвост являются доминантными признаками. А альбинос и длинный хвост является рецессивными признаками.

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

Рисунок 4 – Пример возможных вариантов скрещивания для двух поколений

В данном случае после скрещивания родительских котов выполняется первый закон единообразия гибридов. Все коты первого поколения будут с шерстью каштанового цвета с коротким хвостом. Далее если скрещивать данных гибридов, то уже будет 16 возможных комбинаций родительских генов. Причем из-за присутствия доминантных и рецессивных генов распределение котов будет 9:3:3:1. Т.е. наиболее вероятно, что во втором поколении появится кот с шерстью каштанового цвета и коротким хвостом. В 3 случаях из 16 возможно, что кот будет альбиносом с коротким хвостом. В еще 3 случаях из 16 возможно, что у кот будет с каштановой шерстью и длинным хвостом. А также 1 случай из 16, что кот будет альбиносом с длинным хвостом.

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

 

2.3. Описание модели пчелы

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

От вида пчелы зависит какую продукцию она производит, а также ее расцветка. Примеры различных расцветок в зависимости от вида пчелы можно увидеть на рис. 5.

Рисунок 5 – Расцветка пчел лугового, лесного и речного видов

Виды пчел разделяются на тиры. Тир – группа видов, имеющая одну ценность продукции. Всего в игре насчитывается 5 тиров. Разделение видов по тирам и стоимости продукции в минуту представлено в табл. 1.

Таблица 1 – Распределение видов пчел по тирам (перенос таблицы)

Вид пчелы

Тир

Ценность продукции

Луговая

1

100

Лесная

Речная

Растительная

2

200

Грибная

Ягодная

Древесная

Картофельная

3

500

Пшеничная

Виноградная

Помидорная

Мучная

4

800

Дощетчатая

Бумажная

Хлебная

5

1200

Винная

Коробочная

Кетчупная

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

Признак скорости описывается 4 парами генов. Итоговое значение этого признака формируется по правилу полимерии, т.е. по количеству доминантных генов. Таким образом, доминантных генов может быть от 0 до 8. В зависимости от значения признака скорости устанавливается множитель, который влияет на количество продукции, которую производит пчела. Распределение коэффициента от значения признака можно увидеть в табл. 2.

Таблица 2 – Распределение коэффициента продуктивности

Признак

0

1

2

3

4

5

6

7

8

Коэфф.

0.0

0.5

1.0

1.5

2.0

2.5

3.0

3.5

4.0

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

 

2.4. Проектирование модели пчел

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

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

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

Для того чтобы фиксировать какие виды были исследованы был добавлен контейнер TMap с ключом в качестве вида пчелы и значением лжи или истины. Для базовых пчел Лугового, Лесного и Речного видов были добавлены соответствующие методы для быстрого создания объектов.

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

 

2.5. Логика скрещивания

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

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

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

В данной модели 3 признака описываются 10 парами генов, каждая пара независимо друг от друга проходит процесс скрещивания.

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

Исходный код скрещивания представлен в приложении Б. В качестве констант было задано, что мутация в генах происходит с шансом в 5%. А для генов, которые отвечают за признак вида в случае, если они одинаковые, то 10% и 40%, если они различны. Изменение тира при мутации распределяется следующим образом: 10% шанс, что тир изменится на +2 или -2, 20% шанс, что тир изменится на +1 или -1, и 40% шанс, что он не изменится.

 

2.6. Выводы

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

 

 

3.   ГЕЙМДИЗАЙН ИГРЫ И РАЗРАБОТКА ДИЗАЙН-ДОКУМЕНТА

 

3.1. Основные понятия

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

Геймдизайн необходим при разработке игр по нескольким причинам:

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

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

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

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

Дизайн-документ – это полный документ, в котором подробно описываются детали и спецификации дизайна игры. Он служит чертежом для команды разработчиков, обеспечивая централизованную ссылку на все аспекты дизайна игры. Как правило, документ включает в себя:

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

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

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

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

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

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

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

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

 

3.2. Основа игры – игровые столпы

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

Вот несколько ключевых моментов, которые необходимо понимать в отношении игровых столпов:

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

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

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

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

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

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

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

В процессе разработки игры были выделены следующие столпы:

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

2. Еще одну выведу и... (еще 5 минуточек...) – короткие итерации, которые можно хорошо масштабировать. За счет генетической системы возможно выводить новый вид пчел за мало число итераций. Каждый раз открывая новый вид пчел игрок продвигается по тирам видов и может продвигаться все выше и выше.

3. Медитативность и иммерсивность – игровой процесс не заточен на реакции игрока, ему не надо никуда спешить. За счет VR игрок может взаимодействовать с механизмами.

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

 

3.3. Оценка целевой аудитории игры

В плане целевой аудитории игры можно выделить следующие:

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

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

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

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

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

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

 

3.4. Обзор похожих игр

Для оценки аудитории также полезно рассмотреть игры в схожей тематике и жанре. Главным источником вдохновения для данной игры является модификация Forestry для Minecraft с дополнительными модификациями Gendustry и Extra Bees.

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

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

Extra Bees – это еще одна модификация, дополняющая механику пчеловодства в Forestry. Она добавляет дополнительные виды пчел, мутации и варианты сот, чтобы расширить разнообразие пчел, доступных для разведения. Модификация создает новые задачи и возможности для игроков, побуждая их глубже вникать в сложности пчеловодства.

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

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

Также если рассматривать игры с темой генетики и выведения, то стоит отметить Rival Stars Horse Racing. Rival Stars Horse Racing – это мобильная игра, разработанная новозеландской студией PikPok. Игра позволяет игрокам окунуться в мир скачек, где они могут разводить, тренировать и участвовать в скачках на собственных лошадях.

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

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

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

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

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

 

3.5. Цели игры

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

Цели в игровом дизайне служат нескольким целям.

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

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

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

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

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

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

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

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

 

3.6. Описание игрового цикла

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

Игровой цикл в геймдизайне обычно состоит из следующих элементов:

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

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

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

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

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

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

В игре про селекцию пчел можно разбить на следующие части:

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

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

3. Производит процесс скрещивания пчел.

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

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

 

3.7. Описание взаимодействия игрока с миром

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

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

Контроллеры позволяют пользователям захватывать, манипулировать и взаимодействовать с виртуальными объектами, используя естественные жесты и движения рук.

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

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

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

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

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

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

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

Перемещение с телепортацией является одним из наиболее комфортных для игроков, когда нет необходимости часто перемещаться в пространстве. А также является реализованным исходно в базовом примере в Unreal Engine.

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

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

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

 

3.8. Выводы

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

4.   ОПИСАНИЕ РАЗРАБОТАННОЙ ИГРЫ

 

4.1. Описание интерфейса генов пчелы

Одна из сложностей разработки игры в виртуальной реальности с большим объемом информации является размещение данной информации. Из-за того, что экраны в шлемах особенно первых ревизий времен HTC Vive имеют низкое разрешение на экранах, где пользователь еще может рассмотреть расстояние между пикселями называется эффект москитной сетки. Пример данного эффекта можно увидеть на рис. 6.

Рисунок 6 – Пример москитной сетки в шлемах виртуальной реальности

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

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

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

Рисунок – Отображение генов пчелы в игре

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

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

 

4.2. Модель для улья

Объект улья состоит из нескольких частей. Основная визуальная часть – это модель улья. В качестве игрового объекта было решено отойти от реалистичного варианта и сделать модель более визуально привлекательную и выделяющеюся стилистически. Первым шагом было изобразить это в виде концепта. Для создания различных вариантов концептов улья использовалась нейросеть Midjourney.

Midjourney – это программа и сервис генеративного искусственного интеллекта, созданная и размещенная в Сан-Франциско независимой исследовательской лабораторией Midjourney, Inc. Midjourney генерирует изображения на основе описаний на естественном языке, подобно DALL-E и Stable Diffusion от OpenAI. [14]

Первые результаты генерации в виде четверок изображений были получены в виде запроса со словесным описанием «hive lowpoly» и «langstroth hive lowpoly» соответственно, изображенных на рис. .

Рисунок – Пример генерации запросов

Из результатов генерации можно понять, что были сгенерированы ульи, которые можно считать вариантом естественной среды обитания, которые никак не подходят для цели размещения ульев на фермерском участке. Поэтому было произведено уточнение запроса к нейросети. Были получены новые результаты генерации для запросов «modular beehive with 3 hive frame that holds the honeycomb for apiary lowpoly» и «modular beehive with hive frames that holds the honeycomb for apiary lowpoly» изображенные на рис. .

Рисунок – Пример генераций запросов

Полученные генерации были близки к желаемым результатам, также для большей выборки были еще изменения запросов в виде следующих вариантов: «vertically modular beehive with frames lowpoly» и «vertically modular beehive with 3 frames for apiary lowpoly». Результаты генерации можно увидеть на рис. .

Рисунок – Пример генераций запросов

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

Blender – это универсальное и мощное программное обеспечение с открытым исходным кодом, используемое для 3D-моделирования, анимации и рендеринга. Он предоставляет полный набор инструментов и функций, которые позволяют художникам, дизайнерам и аниматорам создавать потрясающий визуальный контент. С помощью Blender пользователи могут создавать сложные 3D-модели, анимировать объекты и персонажей, моделировать динамические эффекты, рендерить реалистичные изображения, а также выполнять задачи видеомонтажа.

Возможности 3D-моделирования в Blender позволяют создавать сложные модели, используя такие техники, как полигональное моделирование, скульптурирование и процедурное моделирование. Художники имеют точный контроль над созданием и манипулированием геометрией, что позволяет им воплощать свои творческие идеи в жизнь.

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

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

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

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

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

В итоге, была получена модель улья изображенная на рис. .

Рисунок – Полученная модель улья

 

4.3. Разработка механик с ульем для селекции

Чтобы производить скрещивание пчел над ульем использовались два компонента StaticMeshComponent в виде сфер. В Unreal Engine столкновения и пересечения между объектами обрабатываются с помощью системы столкновений. Существует несколько способов проверки столкновений в Unreal Engine, в зависимости от конкретных потребностей и типов объектов.

Акторы с компонентами столкновения могут иметь функции событий, такие как OnComponentBeginOverlap и OnComponentEndOverlap, которые срабатывают, когда происходит столкновение с другим объектом. В этих функциях событий можно реализовать пользовательскую логику для выполнения действий или запуска событий на основе столкновения.

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

Также Unreal Engine предоставляет функции запросов, которые позволяют выполнять различные проверки, связанные со столкновениями. Например, вы можете использовать такие функции, как LineTraceSingleByChannel или SphereTraceSingleByChannel, чтобы проверить, есть ли блокирующие объекты вдоль линии или внутри сферы, соответственно. [15]

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

Рисунок – Реализации при событии начала пересечения

Рисунок – Реализация при событии конца пересечения

Для левой сферы реализована логика аналогична правой.

Также для процесса скрещивания были добавлен эффект всплывающих сердец при помощи системы частиц под названием Niagara в Unreal Engine.

Niagara – это универсальная и система визуальных эффектов (VFX), интегрированная в Unreal Engine. Она предоставляет художникам и разработчикам рабочий процесс, основанный на визуальном программировании, для создания динамичных и визуально ошеломляющих эффектов частиц в режиме реального времени. Используя графический интерфейс, пользователи могут создавать и контролировать сложные системы частиц, симуляции и интерактивные визуальные эффекты.

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

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

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

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

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

Рисунок – Настройки эффектов частиц

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

Рисунок N – важная информация о семье пчел

В интерфейсе улья игрок может наблюдать прогресс появления следующей пчелы, которая рождается каждые 10 секунд в пределах плодовитости королевы. Улей может содержать до 6 пчел. Причем в первой ячейке всегда находится королева семейства, ее извлечь без уничтожения семьи невозможно, ее ячейка имеет более яркий желтый цвет на фоне. Других пчел при выборе можно забрать. В правой части интерфейса можно увидеть какой набор генов у выбранной пчелы. Ячейка выбранной пчелы обрамляется рамкой. Сверху можно увидеть какую сумму в минуту производит данная семья пчел.

 

4.4. Инвентарь игрока

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

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

Рисунок – Обработка события при нажатии на кнопку захвата

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

Рисунок – Интерфейс инвентаря игрока в редакторе

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

 

4.5. Строительство ульев на участке

Для расположения ульев используется гексагональная сетка. Для строительства был сделан отдельный режим, в который игрок переходит при нажатии кнопки на контроллере. При переходе в этот режим происходит трассировка луча в пространстве из правого контроллера на определенное расстояние. Для строительства по сетке необходимо было делать перевод координат из мирового пространства, которое получается на выходе из трассировки луча, в пространство сетки. Для представления гексагональной сетки использовались осевые координаты [16]. Далее полученные координаты в пространстве сетки переводились обратно в координаты мирового пространства. Данные функции для работы с гексагональным пространством были вынесены в отдельную библиотеку Blueprint. Необходимые функции изображены на рис.

Рисунок – Функция для получения координат центра ячейки

Рисунок – Функция получения координат ячейки из мировых

Рисунок – Функция получения мировых координат из ячейки

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

Рисунок – Пример отображения строительства в игре

При переходе в режим строительства создается объект улья, с материалами показывающими проекцию объекта. Объект имеет чуть меньший масштаб чем сам объект улья, который устанавливается, чтобы уменьшить эффект Z-конфликтов. 

 

4.6. Интерфейс биистеария

Для того, чтобы игрок мог отлеживать прогресс по открытию пчел был разработан интерфейс, который игрок может всегда вызвать по нажатию кнопки. Данный интерфейс содержит информацию о том какое количество денег игрок уже накопил для цели спасти пчел. Далее отображаются открытые игроком виды. Всего в игре насчитывается 18 видов пчел. Открытие нового вида регистрируется при добавлении пчелы нового вида в инвентарь. Виды пчел делятся на тиры. Изначально игроку известно о 3 базовых видах пчел. Остальные виды игрок может открыть в процессе секционирования пчел. Всего игра насчитывает 5 тиров пчел, в каждом из которых может содержаться от 3 до 4 видов пчел.

Рисунок – Интерфейс биистеария в игре

 

4.7. Планы для дальнейшего развития

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

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

Можно выделить следующие аспекты игры, которые требуют доработки:

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

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

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

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

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

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

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

Рисунок – Пример центрифуги для меда.

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

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

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

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

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

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

 

4.8. Выводы

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

 

ЗАКЛЮЧЕНИЕ

 

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

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

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

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

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

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

 

1.   https://www.grandviewresearch.com/industry-analysis/virtual-reality-vr-market#:~:text=How%20big%20is%20the%20virtual,USD%2035.00%20billion%20in%202023.

2.   https://www.theverge.com/2023/2/28/23619730/meta-vr-oculus-ar-glasses-smartwatch-plans

3.   https://earthweb.com/how-many-people-use-steam/#:~:text=Each%20month%2C%20there%20are%20around,at%2026.09%20million%20concurrent%20users.

4.   https://store.steampowered.com/hwsurvey/Steam-Hardware-Software-Survey-Welcome-to-Steam

5.   https://sonyinteractive.com/en/press-releases/playstationnetwork-monthly-active-users--reaches-103-million/

6.   https://www.uploadvr.com/psvr-2-600k-units-sold/

7.   Booch, Grady (1991). Object Oriented Design: With Applications. Benjamin Cummings. p. 209. ISBN 9780805300918.

8.   Водяхо А.И., Выговский Л.С., Дубенецкий В.А., Цехановский В. В. Архитектурные решения информационных систем: учебник для СПО — 2-е изд. стер. — Санкт-Петербург: Лань, 2021. — 356 с. —  ISBN 978-5-8114-7554-4

9.   Инге-Вечтомов С. Г. . Генетика с основами селекции: учебник для студентов высших учебных заведений. — СПб.: Изд-во Н-Л, 2010. — 720 с. — ISBN 978-5-94869-105-3.

10. Тарантул В. З. . Толковый биотехнологический словарь. — М.: Языки славянских культур, 2009. — 936 с. — 400 экз. — ISBN 978-5-9551-0342-6.

11. А. М. Прохоров. Большая Советская Энциклопедия. — 3. — М.: Советская Энциклопедия, 1970. — Т. 1. — С. 445. — 608 с.

12. Большая российская энциклопедия. Том 26. Москва, 2014, стр. 663

13. В.И. Иванов, Н.В. Барышникова, Дж. С. Билева. Генетика / Под ред. В.И. Иванова. — М.: Академкнига, 2007. — 638 с. — 2000 экз. — ISBN 978-5-94628-288-8.

14. https://www.economist.com/interactive/briefing/2022/06/11/huge-foundation-models-are-turbo-charging-ai-progress

15. UNREAL ENGINE VR COOKBOOK: DEVELOPING VIRTUAL REALITY WITH UE4

16. https://www.redblobgames.com/grids/hexagons/#basics

 

Приложение А

 

Исходный код файлов BeeGenetic.h и BeeGenetic.cpp

#pragma once

 

#include "CoreMinimal.h"

#include "Components/SceneComponent.h"

#include "BeeGenetic.generated.h"

 

UENUM(BlueprintType)

enum Species

{

Meadow UMETA(DisplayName = "Meadow"),

Forest UMETA(DisplayName = "Forest"),

River UMETA(DisplayName = "River"),

Plant UMETA(DisplayName = "Plant"),

Mushroom UMETA(DisplayName = "Mushroom"),

Berry UMETA(DisplayName = "Berry"),

Woody UMETA(DisplayName = "Woody"),

Potato UMETA(DisplayName = "Potato"),

Wheat UMETA(DisplayName = "Wheat"),

Grape UMETA(DisplayName = "Grape"),

Tomato UMETA(DisplayName = "Tomato"),

Flour UMETA(DisplayName = "Flour"),

Plank UMETA(DisplayName = "Plank"),

Paper UMETA(DisplayName = "Paper"),

Bread UMETA(DisplayName = "Bread"),

Wine UMETA(DisplayName = "Wine"),

Boxed UMETA(DisplayName = "Boxed"),

Ketchup UMETA(DisplayName = "Ketchup")

};

 

UENUM(BlueprintType)

enum class EyeColor : uint8

{

Black UMETA(DisplayName = "Black"),

Red UMETA(DisplayName = "Red"),

Green UMETA(DisplayName = "Green"),

Blue UMETA(DisplayName = "Blue"),

Size UMETA(DisplayName = "Size")

};

 

UENUM(BlueprintType)

enum class EffectType : uint8

{

None UMETA(DisplayName = "Black"),

Speed UMETA(DisplayName = "Black"),

Mutation UMETA(DisplayName = "Black"),

Stability UMETA(DisplayName = "Black"),

Fertility UMETA(DisplayName = "Black"),

Infertility UMETA(DisplayName = "Black"),

Size UMETA(DisplayName = "Size")

};

 

static TMultiMap<int32, TEnumAsByte<Species>> Tiers{

{1, Species::Meadow},

{1, Species::Forest},

{1, Species::River},

{2, Species::Plant},

{2, Species::Mushroom},

{2, Species::Berry},

{2, Species::Woody},

{3, Species::Potato},

{3, Species::Wheat},

{3, Species::Grape},

{3, Species::Tomato},

{4, Species::Flour},

{4, Species::Plank},

{4, Species::Paper},

{5, Species::Bread},

{5, Species::Wine},

{5, Species::Boxed},

{5, Species::Ketchup},

};

 

static TMap<int32, int32> CombCostByTier{

 {1, 100},

 {2, 200},

 {3, 500},

 {4, 800},

 {5, 1200},

};

 

static TMap<int32, float> SpeedCoeff{

{0, 0.0f},

{1, 0.5f},

{2, 1.0f},

{3, 1.5f},

{4, 2.0f},

{5, 2.5f},

{6, 3.0f},

{7, 3.5f},

{8, 4.0f},

};

 

static TMap<TEnumAsByte<Species>, bool> DiscoveredSpecies{

{Species::Meadow, false},

{Species::Forest, false},

{Species::River, false},

{Species::Plant, false},

{Species::Mushroom, false},

{Species::Berry, false},

{Species::Woody, false},

{Species::Potato, false},

{Species::Wheat, false},

{Species::Grape, false},

{Species::Tomato, false},

{Species::Flour, false},

{Species::Plank, false},

{Species::Paper, false},

{Species::Bread, false},

{Species::Wine, false},

{Species::Boxed, false},

{Species::Ketchup, false},

};

 

USTRUCT(BlueprintType)

struct FBeeColors

{

GENERATED_BODY()

 

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BeeColor")

FColor Main;

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BeeColor")

FColor MainDark;

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BeeColor")

FColor Sec;

 

FBeeColors() {}

FBeeColors(FString MainStr, FString MainDarkStr, FString SecStr)

{

  Main = FColor::FromHex(MainStr);

  MainDark = FColor::FromHex(MainDarkStr);

  Sec = FColor::FromHex(SecStr);

}

};

 

static TMap<TEnumAsByte<Species>, FBeeColors> SpeciesColors{

{Species::Meadow, FBeeColors("CD3B0000", "46180000", "08080800")},

{Species::Forest, FBeeColors("CD3B0000", "46180000", "04557500")},

{Species::River, FBeeColors("001DE700", "000E69FF", "08080800")},

{Species::Plant, FBeeColors("CD3B0000", "46180000", "08080800") },

{Species::Mushroom, FBeeColors("CD3B0000", "46180000", "08080800") },

{Species::Woody, FBeeColors("CD3B0000", "46180000", "08080800") },

{Species::Potato, FBeeColors("CD3B0000", "46180000", "08080800") },

{Species::Wheat, FBeeColors("CD3B0000", "46180000", "08080800") },

{Species::Grape, FBeeColors("CD3B0000", "46180000", "08080800") },

{Species::Tomato, FBeeColors("CD3B0000", "46180000", "08080800") },

{Species::Flour, FBeeColors("CD3B0000", "46180000", "08080800") },

{Species::Plank, FBeeColors("CD3B0000", "46180000", "08080800") },

{Species::Paper, FBeeColors("CD3B0000", "46180000", "08080800") },

{Species::Bread, FBeeColors("CD3B0000", "46180000", "08080800") },

{Species::Wine, FBeeColors("CD3B0000", "46180000", "08080800") },

{Species::Boxed, FBeeColors("CD3B0000", "46180000", "08080800") },

{Species::Ketchup, FBeeColors("CD3B0000", "46180000", "08080800") },

};

 

UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )

class BEEKEEPERVR_API UBeeGenetic : public USceneComponent

{

GENERATED_BODY()

 

public:

// Sets default values for this component's properties

UBeeGenetic();

 

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BeeModel")

TEnumAsByte<Species> Main = Species::Meadow;

 

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BeeModel")

TEnumAsByte<Species> Sec = Species::Meadow;

 

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BeeModel")

int32 Speed;

 

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BeeModel")

int32 Fertility;

 

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BeeModel")

EyeColor EyeMain = EyeColor::Black;

 

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BeeModel")

EyeColor EyeSec = EyeColor::Black;

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BeeModel")

EffectType EffectMain = EffectType::None;

 

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BeeModel")

EffectType EffectSec = EffectType::None;

 

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BeeModel")

int32 Radius;

 

protected:

// Called when the game starts

virtual void BeginPlay() override;

 

void Init(TEnumAsByte<Species> main, TEnumAsByte<Species> sec, int32 speed, int32 fertility);

 

public:

// Called every frame

virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;

 

UFUNCTION(BlueprintCallable, Category = "Bees")

int32 GetSpeedValue();

UFUNCTION(BlueprintCallable, Category = "Bees")

int32 GetFertiliryValue();

UFUNCTION(BlueprintCallable, Category = "Bees")

int32 GetRadiusValue();

static UBeeGenetic* Construct(TEnumAsByte<Species> main, TEnumAsByte<Species> sec, int32 speed, int32 fertility);

UFUNCTION(BlueprintCallable, Category = "Bees")

FString GetInfoBee();

 

UFUNCTION(BlueprintCallable, Category = "Bees")

FString GetInfoSpecies();

UFUNCTION(BlueprintCallable, Category = "Bees")

FString GetInfoSpeed();

UFUNCTION(BlueprintCallable, Category = "Bees")

FString GetInfoFertility();

 

UFUNCTION(BlueprintCallable, Category = "Bees")

bool GetGenSpeedValue(int32 index);

UFUNCTION(BlueprintCallable, Category = "Bees")

bool GetGenFertilityValue(int32 index);

 

UFUNCTION(BlueprintCallable, Category = "Bees")

int32 GetProductivitySpeed();

 

UFUNCTION(BlueprintCallable, Category = "Bees")

static UBeeGenetic* CreateMeadowBee();

 

UFUNCTION(BlueprintCallable, Category = "Bees")

static UBeeGenetic* CreateForestBee();

 

UFUNCTION(BlueprintCallable, Category = "Bees")

static UBeeGenetic* CreateRiverBee();

 

UFUNCTION(BlueprintCallable, Category = "Bees")

static bool IsDiscoveredSpecies(TEnumAsByte<Species> species);

 

UFUNCTION(BlueprintCallable, Category = "Bees")

static FString GetSpeciesString(TEnumAsByte<Species> species);

 

UFUNCTION(BlueprintCallable, Category = "Bees")

static void DiscoverSpecies(UBeeGenetic *bee);

 

UFUNCTION(BlueprintCallable, Category = "Bees")

static int32 DiscoveredCount();

 

UFUNCTION(BlueprintCallable, Category = "Bees")

static FBeeColors getBeeColors(TEnumAsByte<Species> species);

};

#include "BeeGenetic.h"

 

const float COMB_AMOUNT_PER_MINUTE = 0.5f;

 

// Sets default values for this component's properties

UBeeGenetic::UBeeGenetic()

{

// Set this component to be initialized when the game starts, and to be ticked every frame.  You can turn these features

// off to improve performance if you don't need them.

PrimaryComponentTick.bCanEverTick = false;

 

// ...

}

 

 

// Called when the game starts

void UBeeGenetic::BeginPlay()

{

Super::BeginPlay();

 

// ...

}

 

void UBeeGenetic::Init(TEnumAsByte<Species> main, TEnumAsByte<Species> sec, int32 speed, int32 fertility)

{

Main = main;

Sec = sec;

Speed = speed;

Fertility = fertility;

}

 

// Called every frame

void UBeeGenetic::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)

{

Super::TickComponent(DeltaTime, TickType, ThisTickFunction);

 

// ...

}

 

int32 UBeeGenetic::GetSpeedValue()

{

int32 count = 0;

int32 mask = 1;

for (int i = 0; i < 8; ++i)

{

  if (mask & Speed)

  ++count;

  mask <<= 1;

}

return count;

}

 

int32 UBeeGenetic::GetFertiliryValue()

{

int32 count = 0;

int32 maskMain = 1;

int32 maskSec = 2;

for (int i = 0; i < 5; ++i)

{

  if (maskMain & Fertility || maskSec & Fertility)

  ++count;

  maskMain <<= 2;

  maskSec <<= 2;

}

return count;

}

 

int32 UBeeGenetic::GetRadiusValue()

{

int32 count = 0;

int32 maskMain = 1;

int32 maskSec = 2;

for (int i = 0; i < 3; ++i)

{

  if (maskMain & Radius || maskSec & Radius)

  ++count;

  maskMain <<= 2;

  maskSec <<= 2;

}

return count;

}

 

UBeeGenetic *UBeeGenetic::Construct(TEnumAsByte<Species> main, TEnumAsByte<Species> sec, int32 speed, int32 fertility)

{

UBeeGenetic *bee = NewObject<UBeeGenetic>();

bee->Init(main, sec, speed, fertility);

return bee;

}

 

//TODO: move this to helper functions

const int32 SPEED_GENS_COUNT = 8;

const int32 FERTILITRY_GENS_COUNT = 10;

static bool get_bit(int32 num, int32 pos)

{

return (num >> pos) & 1U;

}

 

static FString get_gens_str(int32 gen, int32 gens_count)

{

FString out;

for (int i = 0; i < gens_count; ++i)

{

  out += get_bit(gen, i) ? "1" : "0";

  if (i % 2 == 1)

  out += " ";

}

return out;

}

 

FString UBeeGenetic::GetInfoBee()

{

FString out = GetInfoSpecies();

out += ": " + GetInfoSpeed() + "; " + GetInfoFertility();

return out;

}

 

FString UBeeGenetic::GetInfoSpecies()

{

FString out;

FString mainName = UEnum::GetValueAsString(Main);

FString secName = UEnum::GetValueAsString(Sec);

if (mainName.Equals(secName))

  out = mainName;

else

  out = mainName + "-" + secName;

out += " bee";

return out;

}

 

FString UBeeGenetic::GetInfoSpeed()

{

return FString::Printf(TEXT("Speed %d %s"), GetSpeedValue(), *get_gens_str(Speed, SPEED_GENS_COUNT));

}

 

FString UBeeGenetic::GetInfoFertility()

{

return FString::Printf(TEXT("Fertility %d %s"), GetFertiliryValue(), *get_gens_str(Fertility, FERTILITRY_GENS_COUNT));

}

 

 

bool UBeeGenetic::GetGenSpeedValue(int32 index)

{

return get_bit(Speed, index) == 1;

}

 

bool UBeeGenetic::GetGenFertilityValue(int32 index)

{

return get_bit(Fertility, index) == 1;

}

 

int32 UBeeGenetic::GetProductivitySpeed()

{

int32 out = 0;

float speedCoeff = *SpeedCoeff.Find(GetSpeedValue());

out += *CombCostByTier.Find(*Tiers.FindKey(Main)) * speedCoeff;

if (Main != Sec)

{

  out += *CombCostByTier.Find(*Tiers.FindKey(Sec)) * speedCoeff;

  out *= 0.5f;

}

return out * COMB_AMOUNT_PER_MINUTE;

}

 

UBeeGenetic *UBeeGenetic::CreateMeadowBee()

{

return Construct(Species::Meadow, Species::Meadow, 15, 15);

}

 

UBeeGenetic *UBeeGenetic::CreateForestBee()

{

return Construct(Species::Forest, Species::Forest, 51, 51);

}

 

UBeeGenetic *UBeeGenetic::CreateRiverBee()

{

return Construct(Species::River, Species::River, 60, 60);

}

 

bool UBeeGenetic::IsDiscoveredSpecies(TEnumAsByte<Species> species)

{

return DiscoveredSpecies[species];

}

 

FString UBeeGenetic::GetSpeciesString(TEnumAsByte<Species> species)

{

return StaticEnum<Species>()->GetValueAsString(species);

}

 

void UBeeGenetic::DiscoverSpecies(UBeeGenetic *bee)

{

if (bee)

{

  DiscoveredSpecies[bee->Main] = true;

  DiscoveredSpecies[bee->Sec] = true;

}

}

 

int32 UBeeGenetic::DiscoveredCount()

{

int32 count = 0;

for (const auto [key, value] : DiscoveredSpecies)

{

  if (value)

  {

  ++count;

  }

}

return count;

}

 

FBeeColors UBeeGenetic::getBeeColors(TEnumAsByte<Species> species)

{

return SpeciesColors[species];

}

Приложение Б

 

Исходный код файлов InheritMutationLibrary.h и InheritMutationLibrary.cpp

#pragma once

 

#include "CoreMinimal.h"

#include "Kismet/BlueprintFunctionLibrary.h"

#include "BeeGenetic.h"

#include "InheritMutationLibrary.generated.h"

 

/**

 *

 */

UCLASS()

class BEEKEEPERVR_API UInheritMutationLibrary : public UBlueprintFunctionLibrary

{

GENERATED_BODY()

UFUNCTION(BlueprintCallable, Category = "Bees")

static UBeeGenetic *Inherit(const UBeeGenetic *p1, const UBeeGenetic *p2);

 

UFUNCTION(BlueprintCallable, Category = "Bees")

static UBeeGenetic *CopyBeeProps(const UBeeGenetic *from);

};

 

#include "InheritMutationLibrary.h"

#include "Math/UnrealMathUtility.h"

#include "Containers/Map.h"

 

const float MUTATION_GEN_CHANCE = 0.05f;

const float MUTATION_SPECIES_CHANCE = 0.4f;

const float MUTATION_SPECIES_CHANCE_PARENTS_EQUAL = 0.1f;

 

const float MUTATION_TIER_DOWN_TWO_CHANCE = 0.1f;

const float MUTATION_TIER_DOWN_ONE_CHANCE = 0.3f;

const float MUTATION_TIER_NO_CHANGE_CHANCE = 0.7f;

const float MUTATION_TIER_UP_ONE_CHANCE = 0.9f;

const float MUTATION_TIER_UP_TWO_CHANCE = 1.0f;

 

const int32 SPEED_GENS_COUNT = 8;

const int32 FERTILITRY_GENS_COUNT = 10;

 

static bool random(float less)

{

  return FMath::FRandRange(0.f, 1.f) < less;

}

 

//https://stackoverflow.com/questions/47981/how-do-i-set-clear-and-toggle-a-single-bit

static void set_bit(int32 &num, int32 pos)

{

  num |= 1UL << pos;

}

 

static void clear_bit(int32 &num, int32 pos)

{

  num &= ~(1UL << pos);

}

 

static void flip_bit(int32 &num, int32 pos)

{

  num ^= 1UL << pos;

}

 

static bool get_bit(int32 num, int32 pos)

{

  return (num >> pos) & 1U;

}

 

static int32 find_tier(TEnumAsByte<Species> s)

{

  return *Tiers.FindKey(s);

}

 

static void mutate(TEnumAsByte<Species> &s, float mutation_chance)

{

  if (random(mutation_chance))

  {

  int32 tier = find_tier(s);

  float chance = FMath::FRandRange(0.f, 1.f);

  if (chance < MUTATION_TIER_DOWN_TWO_CHANCE)

  tier -= 2;

  else if (chance < MUTATION_TIER_DOWN_ONE_CHANCE)

  --tier;

  else if (chance > MUTATION_TIER_NO_CHANGE_CHANCE &&

chance < MUTATION_TIER_UP_ONE_CHANCE)

  ++tier;

  else

  tier += 2;

 

  if (tier < 1)

  tier = 1;

 

  if (tier > 5)

  tier = 5;

  TArray<TEnumAsByte<Species>> species;

  Tiers.MultiFind(tier, species);

  if (species.Num())

  {

  s = species[FMath::RandRange(0, species.Num() - 1)];

  }

  else

  {

  UE_LOG(LogTemp, Warning, TEXT("Can't found species for tier %d"), tier);

  }

 

  }

}

 

static void mutate(TEnumAsByte<Species> &p1, TEnumAsByte<Species> &p2)

{

  if (random(0.5f))

  Swap(p1, p2);

  float mutChacne = 0.0f;

  if (p1 == p2)

  mutChacne = MUTATION_SPECIES_CHANCE_PARENTS_EQUAL;

  else

  mutChacne = MUTATION_SPECIES_CHANCE;

  mutate(p1, mutChacne);

  mutate(p2, mutChacne);

}

 

static void mutate(int32 &g, int32 gen_count)

{

  const int32 genPairs = gen_count / 2;

  for (int i = 0; i < gen_count; ++i)

  {

  if (random(MUTATION_GEN_CHANCE))

  {

  flip_bit(g, i);

  }

  }

  for (int i = 0; i < genPairs; ++i)

  {

  if (get_bit(g, i * 2) < get_bit(g, i * 2 + 1))

  {

  set_bit(g, i * 2);

  clear_bit(g, i * 2 + 1);

  }

  }

}

 

static int32 inherit(int32 p1, int32 p2, int32 gen_count)

{

  const int32 genPairs = gen_count / 2;

  int32 out = 0;

  for (int i = 0; i < genPairs; ++i)

  {

  bool g1 = random(0.5f) ? get_bit(p1, i * 2) : get_bit(p1, i * 2 + 1);

  bool g2 = random(0.5f) ? get_bit(p2, i * 2) : get_bit(p2, i * 2 + 1);

  if (g1 && g2)

  {

  set_bit(out, i * 2);

  set_bit(out, i * 2 + 1);

  }

  else if (g1 || g2)

  set_bit(out, i * 2);

  }

  mutate(out, gen_count);

  return out;

}

 

UBeeGenetic *UInheritMutationLibrary::Inherit(const UBeeGenetic *p1, const UBeeGenetic *p2)

{

  TEnumAsByte<Species> speciesP1 = random(0.5f) ? p1->Main : p1->Sec;

  TEnumAsByte<Species> speciesP2 = random(0.5f) ? p2->Main : p2->Sec;

  mutate(speciesP1, speciesP2);

  //UE_LOG(LogTemp, Log, TEXT("Start inherit speed gen"));

  int32 speed = inherit(p1->Speed, p2->Speed, SPEED_GENS_COUNT);

  //UE_LOG(LogTemp, Log, TEXT("Start inherit fertility gen"));

  int32 fertility = inherit(p1->Fertility, p2->Fertility, FERTILITRY_GENS_COUNT);

  return UBeeGenetic::Construct(speciesP1, speciesP2, speed, fertility);

}

 

UBeeGenetic *UInheritMutationLibrary::CopyBeeProps(const UBeeGenetic *from)

{

  if (from)

  return UBeeGenetic::Construct(from->Main, from->Sec, from->Speed, from->Fertility);

  else

  return UBeeGenetic::Construct(Species::Meadow, Species::Meadow, 0, 0);

}

 


[1] Деятельность организации «Meta» признана экстремистской и запрещена на территории Российской Федерации

Похожие работы на - РАЗРАБОТКА ИГРЫ В ВИРТУАЛЬНОЙ РЕАЛЬНОСТИ НА ТЕМУ СЕЛЕКЦИИ ПЧЕЛ НА ОСНОВЕ СТОХАСТИЧЕСКИХ ПРОЦЕССОВ

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!