ЗМІСТ
ВСТУП…………………………………………………………………………….2
РОЗДІЛ 1. РОЛЬОВІ ІГРИ ЗІ ШТУЧНИМ ІНТЕЛЕКТОМ ТА ЗАСОБИ ЇХ ПРОГРАМНОЇ РЕАЛІЗАЦІЇ…………………………………………………….6
	1.1. Рольові ігри……………………………………………………………6
	1.2. Штучний інтелект та методи його реалізації………………………9
	1.3. Рушій Unity…………………………………………………………..12
	Висновки до розділу 1……………………………………………………13
РОЗДІЛ 2. РОЗРОБКА ТА ПРОГРАМНА РЕАЛІЗАЦІЯ ГРИ………………14
2.1. Концепт-план гри……………………………………………………14
	2.2. Розробка «каркасу» гри……………………………………………18
	2.3. Реалізація «адаптивного штучного інтелекту» (AAI)……………..28
2.4. Розробка бойової системи…………………………………………..41
	Висновки до розділу 2…………………………………………………….47
РОЗДІЛ 3. ТЕСТУВАННЯ ТА КЕРІВНИЦТВО КОРИСТУВАЧА………….48
3.1. Тестування адаптивного штучного інтелекту……………………48
	3.2. Керівництво користувача……………………………………………51
	Висновки до розділу 3…………………………………………………...58
ВИСНОВКИ…………………………………………………………………….59
СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ…………………………………60

ВСТУП
Актуальність. Сучасний стан ігрової індустрії демонструє прогрес, який у минулому не міг уявити ніхто – створюються цілі світи зі своєю історією, особливим стилем, особистостями, після чого переводиться у віртуальну реальність, якою зараз вже важко кого-небудь здивувати.
Розвиток ігрової індустрії призвів до того, що в ній з’явилось багато великих компаній, безліч невеличких та інді-розробників – це все дає неабиякий вибір продукту для гравця. У фінансовому плані також видно позитивну динаміку росту – з кожним роком ринок відеоігор оцінюється все більшими сумами. Якщо спочатку все керувалось лише початковою ціною гри, то зараз у розробників набагато більше можливостей заробити – випускаючи доповнення та додаючи мікротранзакції для «полегшення» процесу гри. Не дивлячись на те, що іноді останнього роду ігри потребують значних вкладень, статистика показує, що  розробка таких проектів може просто окупитись [1]. Всі ці значні цифри лише доводять те, що сфера ігор також має неабиякий розмах і вплив не тільки на споживчу, а й на економічну сферу. 
Проаналізуємо, які аспекти впливають на зацікавленість гравців в конкретній грі. По-перше, цікавий ігровий процес. Це має неабиякий вплив на вибір гри. Додатково це впливає на вибір ігрової платформи: комп’ютери або мобільні пристрої – процес має бути цікавим та одночасно доречним для конкретних ситуацій: захопливий і динамічний для комп’ютерів та зручний і простий для мобільних.
Другий показник – сюжет. Якщо гра здатна захопити гравця інтересним, живим сюжетом, причому,  ще й до деталей продуманому, то це неймовірно «поглинає», дає можливість стати частиною видуманого світу, впливати на його долю та відчути себе «у чужому тілі». Є такі ігри, які, не дивлячись на примітивну графіку та геймплей можуть надати гравцеві неймовірних емоцій, переживання за персонажів не слабкіше, аніж при перегляді культового фільму – адже тут і сам гравець може вплинути на те, що трапляється на екрані.
Третій показник – «відгук» гри. Тут вже все набагато цікавіше. Певно, гравець мало повірить в історію, де усі його супротивники – бездумні ляльки для биття, а доречні істоти із своїм мисленням, характером, які не «пруть на потяг із вилами» а обдумують стратегію, діють протилежно від самого гравця, змушуючи вже його змінювати стратегію, щоб перемагати, то таке «поглиблення» дає ще більший вплив на злиття із ігровим світом, тож має свої плюси. Звісно, технології розвитку штучного інтелекту на даний момент стрімко розвиваються. Зразком цього може бути розробка OpenAI. На даний момент ця технологія штучного інтелекту, що використовується у грі Dota 2 подолала професійних гравців у режими 1 на 1 і зараз запланованим заходом є перемога над командою з 5 професійних гравців. Останнім етапом буде перемога у бою 5 на 5 над професійною командою, що посідає перше місце у світі [2]. 
Кожен вибирає собі розвагу по душі – і багато людей обирає собі саме відеоігри. Саме це й спонукає молодих розробників йти цим шляхом – адже це не тільки місце, де можна добре заробити, а й місце, де можна відчути себе творцем, розробити власний світ із власними законами.
Все вищезазначене визначило мету роботи – розробити комп’ютерну RPG-гру за допомогою рушія Unity.
Для досягнення мети необхідно розв’язати такі завдання:
вивчити відповідну літературу з розробки ігор та застосування штучного інтелекту в іграх;
проаналізувати переваги та недоліки графічних рушіїв, що існують, які використовуються при розробці комп’ютерних ігор;
обрати інструментарій для розробки ігри;
розробити концепт-план проекту RPG-гри;
спроектувати необхідні для розробки гри алгоритми;
програмно реалізувати та протестувати RPG-гру із вбудованим штучним інтелектом  за допомогою рушія Unity.
Об’єктом є комп’ютерні RPG-ігри на базі ігрових рушіїв.
Предметом є комп’ютерні RPG-ігри із вбудованим штучним інтелектом на базі ігрових рушіїв.
Практична цінність роботи полягає в кінцевому продукті - грі «Університетські хроніки: КДПУ» жанру RPG із вбудованим штучним інтелектом та можливості використовувати розроблену RPG-гру як за прямим призначенням, так і в якості навчального матеріалу в курсі «Розробка комп’ютерних ігор».
Структура роботи. Пояснювальна записка складається з вступу, трьох розділів, висновків та списку використаних джерел з 26 найменувань. Робота містить 60 сторінок тексту, 26 рисунків. Загальний обсяг 63 сторінки.

РОЗДІЛ 1. 
РОЛЬОВІ ІГРИ ЗІ ШТУЧНИМ ІНТЕЛЕКТОМ ТА ЗАСОБИ ЇХ ПРОГРАМНОЇ РЕАЛІЗАЦІЇ
1.1. Рольові ігри
Історія виникнення цього жанру є досить цікавою. Першою рольовою грою насправді була настільна реалізація, випущена у 1974 році. Її розробці передувала гра Chainmail із середньовічним антуражем, а також класичними елементами фентезі – драконами, чаклунами тощо, розроблена Гері Гайгексом, що також стала прототипом гри його друга Гайгекса Дейва Арнесона Blackmoor. Далі у співпраці з Доном Кайе і Брайаном Блюмом Гайгекс та Арнесон і розробили легендарну D&D. Для видавництва гри було засновано товариство Tactical Studies Rules [3]. Відрізнялась така гра величезним набором правил, цікавістю самого процесу розвитку персонажу та подій, так званого «поглиблення» у процес гри та вникнення у історію цього світу.
Однією із перших відомих рольових ігор була pedit5, за зразком Dungeons & Dragons. Багато ідей було взято звідти – персонаж переміщувався підземеллям, боровся із супротивниками та збирав здобич. Того ж року було випущено іншу гру – Dungeon, яка була написана студентами-ентузіастами для PLATO і PDP-10. Для цих комп’ютерів потім було випущено ще багато ігор із схожою тематикою – подорожами небезпечними підземеллями. [4]
Гра Rogue започаткувала жанр roguelike (тобто, Rogue-подібні) з випадково генерованими підземеллями [5]. В 1983 вийшла Ultima III, яка втілила багато ідей, що стали стандартом для подальших CRPG: псевдотривимірну графіку, окремі екрани для боїв і подорожей. 1986 позначився виходом першої гри в серії Might and Magic ‒ The Secret of the Inner Sanctum, яка надавала своєрідне поєднання фентезійної тематики з науковою фантастикою, різні класи персонажів і їх розвиток, що включав старіння з набором рівнів [6].

Рис 1.1 Скріншот з комп’ютерної рольової гри Might and Magic ‒ The Secret of the Inner Sanctum 1986 року випуску

 З цього надалі й пішли великі розгалуження різного типу – починаючи від тактичних та стратегічних, що потребують відтворення дій у певну кількість ходів, закінчуючи вже більш складними, в яких дії є динамічними, та потребують не лише роздумів, а й реакції гравця. Однак, з часом створювалися й нові жанри. Рольові ігри перенеслися у онлайн формат, після чого безліч гравців перейшли у світи, де знаходились не лише, підконтрольні комп’ютеру персонажі, а й іншим гравцям. Концепції, причому, були абсолютно різні – починаючи від об’єднання у групи для подолання складних монстрів до, так званих, режимів PvP (гравець проти гравця). Ці та інші концепції знайшли своїх прихильників у багатьох країнах світу й об’єднала їх. Так і виник новий жанр – MMORPG (масова багатокористувацька онлайн рольова гра). Цей жанр також почав розвивати свою окрему гілку, набираючи фанатів по всьому світу. Сучасні багатокористувацькі рольові ігри стали справжнім феноменом мережі. У найпопулярніші з них грають мільйони людей. Багато таких ігор є платними. Місячна підписка на деякі коштує до кількох десятків доларів США. Враховуючи багатотисячну аудиторію, подібні ігри є значними та успішними комерційними проектами [7].
Далі, звісно, почали з’являтися ігри, що мають в собі лише невеликі складові РПГ, наприклад, стратегії, де є особливі юніти – герої, що рахуються за цілу бойову одиницю та розвиваються згідно канонів жанру РПГ. Одним з цікавих жанрів, що виник при цьому є JRPG (Японська рольова гра). Її засновником слугувала гра Final Fantasy. Особливістю такого жанру був захоплюючий лінійний сюжет та, так званий, розвиток групи із 4 персонажів. Звідціля й набрала популярність найкласичніша концепція складу групи – танк, лікар, боєць та чаклун. Звідси пішло багато схожих ігор із схожою концепцією. Особливим відтінком у таких іграх є графіка у стилі манги, але вона має неточну популярність у світі, окрім регіонів Азії.
Надалі з’являлися вже й «ліниві ігри», де від гравця потребується мінімум дій, наприклад, лише покупка обладнання чи прокачка характеристик. Деяка «лінивість» почала поширюватись й на багато сучасних РПГ – сила героя дуже часто залежить від однієї-двох характеристик, не надаючи гравцеві робити те, що необхідно в РПГ – розвивати свого героя по власному бажанню, хтозна, може хтось замість того, щоб за мага чаклувати закляття бажає просто знищувати ворогів за допомогою важкої кувалди, а закляття використовувати лише як невелику підтримку? Отже, ці фактори теж треба врахувати. Неабияку роль у таких іграх відіграє сюжет – ключова складова таких ігор, причому, має прямий або вторинний вплив. Тут вже залежить від того, на що розробник хоче звернути увагу – на оточуючий світ із своєю історією, безліччю різноманітних особистостей, краєвидами та таємницями, чи саме на динаміку боїв та, власне, розвиток персонажів. Наприклад, у ММОРПГ нечасто використовується сюжет у повній його формі з наслідками, а, скоріше, як основа для того, щоб прокачка не виглядала одноманітною та «сухою», хоча бувають і випадки, коли сюжет виконаний дуже якісно, що дозволяє гравцеві зануритись у світ повною мірою. 
Звідси й виникають питання того, на що повинен звернути увагу розробник:
-	сюжет гри та його вплив на гру;
-	багатогранність розвитку персонажа;
-	стилістика гри;
-	атмосфера гри;
-	різноманітність локацій та ігрових предметів.
-	взаємодія із світом гри та його «відгук»
Що з саме розуміється під терміном «відгук гри»?

1.2. Штучний інтелект та засоби його реалізації
«Штумчний інтелемкт (англ. Artificial intelligence, AI) — розділ комп'ютерної лінгвістики та інформатики, що опікується формалізацією проблем та завдань, які подібні до дій, які виконує людина» [8]. Фактичне використання штучного інтелекту у комп’ютерних іграх вже ніхто не спростовує, причому, в таких випадках він ділиться як на звичайний, що будується на основі нейронних мереж та математичних розрахунків для подальшого корегування ситуації, так і на «псевдоінтелект», коли весь основний процес «мислення» системи вже прописаний і підкорюється раніше зазначеним правилам, не відхилюючись від «курсу». Обидва види подібних реалізацій мають право на існування, адже для кожного типу можна віднайти певний жанр ігор, де це було б доречно. Як правило, чим більш динамічна гра, тим менше важливе використання складних систем, що будуть навчатись. Як, наприклад, інді-гра The Binding of Isaac має швидкий темп самої гри і високу випадковість при генерації рівнів, предметів, однак, супротивники діють за аналогічним алгоритмом постійно [9]. Здавалось би, через певний час можна вивчити те, як вони діють, але саме темп гри задає можливості навіть після високого розвитку власних навичок допускати механічни помилки. В стратегіях і рольових іграх вже можна додати більш складну систему навчання штучного інтелекту, адже було б цікаво, коли не лише ти дізнаєшся про комп’ютерних супротивників все більше і покращував би свої навички, а й навпаки. Звичайно, це не змінює того факту, що ШІ застосовується й в більш різноманітних ігрових цілях, як, наприклад, генерація рівнів у грі DOOM [10]. Це дозволяє значно утвердити те, що ШІ у іграх має неабияку роль як для задання ритму гри, так і для планування загальних стратегій. Це дозволяє грі не набридати гравцеві і постійно надавати нових і нових вражень. 
Що важливо в першу чергу враховувати при використанні штучного інтелекту в грі? Це те, що гравець очікує від нього отримати. Справжнього опору, а не манекени, яким можна спокійно «давати тумаків». Розробка ШІ – складний процес, адже треба врахувати багато складових. Перший – тактика, яку використовує ШІ для досягнення цілі. Загалом, можна зробити складний процес за допомогою програмних «підкруток» – зменшувати вірогідність влучити гравця, збільшити шанс критичного удару у супротивників. Але даний тип ШІ є «нечесним», тож, гравцеві з часом може здатись, що його обдурюють. Якщо ж опір від ШІ виникає внаслідок певних дій гравця, і він сам зрозуміє, що те, що робить супротивник спричинено лише його власними діями – це буде ефект «живої присутності», адже будь-хто, зазнавши ряду поразок зробить певні висновки за рахунок отриманого досвіду і почне робити так, щоб це не повторювалось. Таким чином може працювати і ШІ – початково запущений «	бовдур» із часом, аналізуючи дії, як свої, так і гравця зможе зробити певні висновки та виправити свою поведінку у напрям досягнення перемог. У більшості випадків налаштування таких дій є «поведінкові дерева». Наприклад, компанія Blizzard для одного з героїв гри Heroes of the Storm використовує таке дерево (Рис 1.2. [26]).
Також цікавим рішенням для ШІ, наприклад, володіє гра Dragon Age: Origins. Але тут рішення щодо ШІ стосується ігрових персонажів – можна виставити певні умови для використання здібностей, причому механізмів для виставлення цих умов вдосталь – як здоров’я союзника, так і загальний стан якогось із ворогів. Наприклад, використати сильну лікувальну здібність автоматично, якщо рівень здоров’я одного із союзних персонажів менший за 50% і рівень мани лікаря більший за 35%, або припарку, якщо рівень мани низький.

Рис 1.2. Поведінкове дерево героя Валла гри Heroes of the Storm

Таким чином, для потужного штучного інтелекту потрібна нейромережа, що постійно аналізуватиме дії гравця та визначатиме правильний напрямок ходу по схожим «деревам», або механізм для вказання певних дій в залежності від обставин, що склались. Для реалізації ШІ у грі «Університетські хроніки: КДПУ» використаємо більш просту форму – математичну. Загальний аналіз проводиться за допомогою розрахунків виконаних дій, таких, як кількість нанесених пошкоджень тощо. За рахунок цього можна реалізувати систему адаптивного штучного інтелекту, що буде постійно оновлювати дані, таким чином «адаптуючись» під умови, що виникають під час гри.

1.3. Ігровий рушій Unity

Рис 1.3. Інтерфейс рушія Unity

«Unity — багатоплатформовий інструмент для розробки дво- та тривимірних додатків та ігор, що працює на операційних системах Windows і OS X. Створені за допомогою Unity застосування працюють під системами Windows, OS X, Android, Apple iOS, Linux, а також на гральних консолях Wii, PlayStation 3 і XBox 360.» [11]
Unity є одним з найпоширеніших ігрових рушіїв у ігровій сфері. Його використовують як величезні компанії, як, наприклад, Blizzard [12], так і невеличкі інді-компанії. Основою роботи ігрових механік у Unity слугує мова програмування С#, що теж робить рушій доступним великому колу тих, хто хоче спробувати себе в ігровій індустрії. Другим важливою привілеєм є просте транспортування гри на інші платформи. Рушій розпізнає багато образних команд та конвертує їх на ту мову, яку розпізнає кінцевий пристрій. Це й дає можливість зручно створювати ігри, призначені на різноманітні пристрої.
До версії 5 на рушії було багато обмежень у безкоштовних версіях, що змушувало або купувати ліцензію, або працювати з купою обмежень. Це надавало неабиякі незручності. Не дивлячись на це, гру можна було спокійно випустити у продаж та мати з неї прибуток, єдиним обмеженням слугувала лише умова того, що гра приносить прибуток, більший за 100000$ на рік [13]. У п’ятій версії рушія багато з цих обмежень було прибрано, за вийнятком обмеження за доходом. Для таких випадків існує кілька версій ліцензій в залежності від потреб.
Сам рушій достатньо зручно реалізовано у якості об’єктно-орієнтованого ПЗ для створення ігор та мультсеріалів. Саме зручний інтерфейс та достатня кількість як офіційної документації, так і користувацьких посібників та відеоуроків щодня спонукає багато людей до створення власних ігрових всесвітів.
Вибором для написання даного проекту на рушії Unity стала саме значна кількість документації, адже для реалізації більш складних ідей може знадобитись більш зрозумілий інструментарій. Після визначення із рушієм можна приступати до створення концептів.

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

РОЗДІЛ 2
РОЗРОБКА ТА ПРОГРАМНА РЕАЛІЗАЦІЯ ГРИ
2.1. Концепт-план гри
1. Введення
	Ніщо не передбачало лиха… Життя йшло спокійною течією… Студенти навчались у КДПУ, викладачі із задоволенням надавали їм свої знання. Незабаром у всіх на слуху почали з’являтись новини про загадкові об’єкти, що іноді виднілись під блиском сонця на небі. Ніхто не приділяв тому значної уваги, аж поки вони не вийшли із «тіні». Космічні прибульці прибули на Землю, щоб заграбати собі всю цивілізацію та підкорити людство. Почали вони з вивчення загальної розумової діяльності. Студенти і персонал КДПУ стали першими. Після нападу вони, під керівництвом Великого Ректора вирішили дати опір, але все це було марним – прибульці заздалегідь знали про їх дії та діяли, буквально, на крок попереду. Так КДПУ пав першою жертвою у цій боротьбі за Землю. Студенти і персонал потрапили у полон, намагаючись вирватися і отримуючи все більше і більше поразок, адже с кожним днем прибульці все більше поглиблювались у вивчення людського розуму. Ситуація здавалась безвихідною, адже усі повстання гасились ще на стадії планування. Здавалось, виходу вже немає… Аж поки маршрутне таксі не привезло до воріт університету нового абітурієнта, свіжий розум у цю підконтрольну прибульцям фортецю…
2. Жанр и аудиторія
Жанр гри – РПГ, з механікою гри CWTF («Corridor walk + Tactical fights» – рух коридорами із тактичними боями)
	Гра призначена для широкої аудиторії, вік гравця – від 12 років. Гра має елементи боїв та жорстокості.
3. Основні особливості гри
Перше, на що потрібно звернути увагу на гру в жанрі РПГ є те, що вона не має прив’язки предметів (наприклад, обладунків чи допоміжних предметів), за виключенням легендарних артефактів, історія яких пов’язана із певною спеціальністю («Яблуко Ньютона» – фізик, «Підзорна труба Колумба» – географ, «Машина Тюрінга» – інформатик і т.д.). Відповідно, немає певного обмеження вибору предметів для гравця, в залежності від класу героя – можна комбінувати будь-які обладунки для створення власного стилю гри. 
Також, ключовою особливістю будуть «потаємні квести». Наприклад, в бібліотеках, старовинних складах, позабутих коридорах чи інших місцях можна знайти певні записи. Багато з них будуть просто поглиблювати гравця в історію ігрового світу, однак, деякі, так чи інакше, можуть вивести на потаємні локації, в яких можна знайти такі легендарні артефакти, зброю чи обладунки.
Геймплей заплановано на більш, ніж 10 годин при прямому проходженні основної сюжетної лінії, 5 годин для додатковою сюжетної лінії (боротьба «технарів» та «гуманітаріїв») та більш, ніж 20 годин на вторинні. Також плануються режим «підземелля», що знаходиться у закинутому сараї у дворі КДПУ. Із часом покинути склади із сміттям з поглибленням все нижче будуть змінюватись на старовинні склепи, закинути підземні цивілізації і т.д. із своїми ворогами, що весь час стають більш сильними, але пропонують більш високу винагороду.
Система розвитку понесла кардинальні зміни від класичної із досвідом і рівнями. Тепер у грі є 2 види досвіду – бойовий та життєвий. За перемогу над ворогами та проходження завдань буде даватись одразу два види. Перший вид можна витрачати на придбання навичок у дереві розвитку. Другий вид визначає наскільки складні навички можна придбати. Наприклад, навичка «бойові мистецтва» для біолога, що дає йому значну кількість очок сили та дає шанс контратаки ворога коштує 50000 очок досвіду, але для його вивчення потрібно мати не менше 250000 очок життєвого досвіду. Життєвий досвід ні на що не витрачається та показує, наскільки загально розвинений той чи інший персонаж.
Система покрокового бою також несе значні зміни. На заміну класичній концепції розподілення персонажів по порядку за параметрами швидкості чи ініціативи та лише 1 дії під час ходу система перероблена так, що параметр ініціативи напряму впливає на те, скільки разів один персонаж може виконувати дію за один хід. Наприклад, персонаж із показником ініціативи 50 зробить за 2 ходи 3 дії – на 0,67 першого ходу і на 0,33 та на кінці другого ходу, в той час як персонаж із ініціативою 100 буде робити 4 дії – на середині і кінці кожного ходу. Тож важливе як стратегічне розташування персонажів, так і правильний розподіл порядку ініціативи для того, щоб можна було проводити певні комбінації із здібностей двох або більше персонажів.

4. Опис гри
Гравець починає гру на підході до КДПУ, вийшовши із маршрутного таксі. Під час дороги він порівнює те, що йому розповідали про КДПУ із похмурою атмосферою, що він бачить. Він проходить до університету, де його зустрічає налякана швейцарка і благає, щоб він допоміг їм. Далі він йде до Великого Ректора, де може почути історію про те, як в першій битві студенти і персонал зазнали поразки (навчання основам гри), або ж одразу приступити до справи і зібрати свою групу повстання, щоб визволити університет від загарбників. В процесі гравцеві доведеться розвивати як свого основного героя (абітурієнта), так і найманих, кожен з яких відноситься до певної кафедри, а, також, до певної фракції – технар, гуманітарій або естет. Естети є нейтральною фракцією, а технарі і гуманітарії початково воюючі, тож комбінований склад групи може мати свої недоліки. У персонажів є 4 показники – здоров’я, енергія, ситість та бадьорість. Здоров’я і енергія відновлюються в залежності від показника відновлення на початку кожного раунду. Наприкінці бою повністю відновлюється енергія і частина втраченого здоров’я + додатково в залежності від показника відновлення здоров’я. На початку бою енергія знов повністю відновлюється (це дає можливість додатково використати деякі здібності поза боєм, наприклад, лікувальні). Ситість, відповідно, відновлюється за допомогою їжі. Також це є деяким бар’єром для того, щоб їжею не можна було відновлювати велику кількість здоров’я. Якщо показник ситості буде вище за максимум, персонаж буде відчувати перенасиченість, а його показники ініціативи та концентрації будуть знижені. Навпаки ж, коли показник буде низьким, відновлення здоров’я і енергії буде сповільнено, а при нульовому – буде оказуватись негативний вплив, такий, як періодичні втрати здоров’я під час бою. Бадьорість – показник, що визначає, наскільки персонаж втомився (винятком є цілеспрямований абітурієнт – він не має показника бадьорості, як такого). Коли бадьорість персонажа буде низькою, його ініціатива і концентрація будуть знижені, а при нульовому це зниження поширюється й на інші характеристики. До того ж, можуть виникати такі речі, як поширені промахи та пропуски ходів. Для заміни втомленого героя (або просто для заміни) необхідно завітати до їдальні, де завжди будуть сидіти декілька героїв інших спеціалізацій. Герой, якого замінили йде спати і з’явиться при наступній зміні героїв. Якщо його не забрати, він попадає у звичайну ротацію і через деякий час може з’явитись серед нових.
Весь час, поки гравець робить дії, гра веде розрахунки. Перші 10 боїв основані на псевдоштучному інтелекті, під час 11 бою (зустріч із босом-наглядачем) проти гравця почнеться використання отриманих даних. З цього часу гра весь час буде адаптуватись проти гравця. Необхідно буде знайти правильну стратегію, щоб перемогти супротивників, що також постійно змінюють свою стратегію. 
Персонажів можна буде всебічно розвивати як за допомогою навичок, так і різноманітних речей – броні, аксесуарів, альтернативної зброї. Ці речі можна випадковим чином отримати після перемоги у бою, придбати у торговців або у закупівника. Закупівник пропонує закриті контейнери, що мають в собі один випадковий предмет. Це може бути як порвана роба, так і легендарна зброя.
5. Порівняння та передпосили
Гра «Університетські хроніки: КДПУ» має, з одного боку, оригінальні елементи геймплею, з іншого, увібрала в себе елементи з таких ігор:
«Darkest Dungeon»  – система переміщення коридорами, основи системи бою 
 «World of WarCraft» - система характеристик та їх властивостей, система активних та пасивних навичок
«Counter Strike: Global Offensive» – система кейсів із випадковою здобиччю.
Дані елементи й допомагають створити цілісну рольову систему цієї гри із багатосторонньою можливістю розвитку персонажа та можливістю комп’ютерних супротивників адаптуватись під ситуацію.
6. Платформа
Гра планується на комп’ютерну платформу. Із часом можливий перехід на мобільні пристрої.
Системні вимоги	Мінімальні	Рекомендовані	
Процесор	Intel Celeron 1 GHz	Intel iCore 7 3.44 GHz	
ОЗП	512 Mb	16 Gb	
Відеокарта	64 Mb	NVidia GTX 970 3 Gb	
Звук	Звукова карта	
Керування	Клавіатура, миша	

2.2. Розробка гри
Перш, ніж приступати до розробки елементів штучного інтелекту, спочатку треба мати основу, на яку ці елементи можна прикріпити. Тож треба створити наступні елементи:
1) Головне меню
2) Місцевості
3) Персонажів, що рухаються
4) Інші налаштування, необхідні для зручної гри.
Починаємо, відповідно, з меню. Для класичного вигляду необхідні 3 речі:
1) Кнопки
2) Заставка
3) Музика
Власне, як налаштована система роботи із об’єктами та сценами у Unity – всі об'єкти прив'язані до сцени. Коли виконинується побудова об'єкту, всі сцени отримують ідентифікатори, починаючи від 0. Нульовою сценою є сцена входу у сам ігровий проект, тож, після запуску гри автоматично завантажується сцена, яка має ідентифікатор 0. За цими ідентифікаторами і можна отримати доступ до інших сцен. Зробимо початковий шлях від натискання кнопки «Нова гра» до самої гри. Для занурення гравця у світ гри вставимо невелике інтро, в якому буде розказана коротка історія, шо призвела до поточних подій. Власне, сам редактор сцен виглядає наступним чином (Рис 2.1).
Отже, виконується наступна побудова – нульовою сценою є саме меню, першою буде інтро, ще декілька зарезервуємо для додаткових функцій із меню, що будуть реалізовані пізніше. Прив’язуємо до кнопки нової гри перехід до інтро:

public void NewGameButton()
    {
        SceneManager.LoadScene(1);
    }

Даний перехід звертається до керівника SceneManager із функцією LoadScene для, відповідно, завантаження сцени із індентифікатором, вказаним у якості параметру. Сцена 1 є інтро, в якому після завершення або при натисканні кнопки «Пропустити» сцена переходить до самої гри. 

Рис 2.1. Менеджер побудови ієрархії сцен в Unity, а також вибору кінцевої ОС

У самій грі нам потрібен для початку один персонаж, у якого треба запрограмувати анімації, механіки руху, рамки, за які не можна виходити та прив’язку камери.
Для персонажа беруться наробки художника, котрі потім за допомогою графічних редакторів обробляються та використовуються у якості спрайтів.

Рис 2.2. Екран гри під час переходу між локаціями

Після завершення роботи із спрайтами треба запрограмувати рух персонажів. Для цього створимо окремий скрипт та назвемо його MoveController. В ньому і будемо прописувати загальні правила руху. Для початку нам треба визначити, до чого буде відноситися даний скрипт. Він буде прикріплений до гравця. Наступним кроком буде визначення об’єктів, із якими буде взаємодіяти скрипт. Визначимо це наступним чином:

private Animator anim;
public Camera cam;
private SpriteRenderer spriterenderer;

Рис 2.3. Початковий нарис персонажа

Рис 2.4. Зразок готового спрайту
Animator відповідає за анімації, Camera за камеру і SpriteRenderer за керівника спрайтами. Відповідно, назначимо скрипт до гравця і відповідна елементи до прив’язок.

Рис 2.5. Прив’язка додаткових об’єктів у інспекторі основного об’єкта

Щодо анімацій – нам необхідно декілька спрайтів обробити в «аніматорі» - інструменті, що керує анімаціями у грі. Додаємо туди всі спрайти, що нам потрібні, задаємо фраймрейт (кількість кадрів, що оброблюються за 1 секунду) та виставляємо їх у правильному порядку.

Рис 2.6. Спрайти, виставлені у аніматорі
Далі, для більш зручної обробки самого циклу анімацій необхідно створити «змішане дерево» (blend tree). В ньому, фактично, виставляються параметри для задіяння тієї чи іншої анімації. 

Рис 2.7. Змішане дерево.

Рис 2.8. Параметри змішаного дерева.
Виставивши параметри -0.2, -0.1, 0.2 фактично задано наступну систему: якщо рух по осі Х виконується із коефіцієнтом -0,2 або нижче, працює анімація руху. Також це виконується і на дистанції -0.2 – -0.1. На проміжку з -0.1 по 0.2 виконується анімація бездіяльності. І, починаючи з 0.2 і більше знов активується анімація руху. Коли, власне, трапляється сам період руху, це задається на осі Х із показником від -1 до 1. 
Залишилось додати рух персонажа. У коді сама подія руху задається наступною строкою:

if (Input.GetAxisRaw("Horizontal") > 0.5f || Input.GetAxisRaw("Horizontal") < -0.5f) Run();

І, відповідно, сама функція руху:

private void Run()
    {
        Vector3 direction = transform.right * Input.GetAxis("Horizontal");
        //transform.position = Vector3.MoveTowards(transform.position, transform.position = direction, speed * Time.deltaTime);
        transform.Translate(new Vector3(Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime, 0f, 0f));
            }

Задається напрямок руху із коефіцієнтом осі. Щодо самого об’єкту (гравця), то його показник transform, що відповідає за положення об’єкта на  змінюємо разом із зміною напрямку на строку вище. 
Оскільки для визначення напрямку руху використовується такий ідентифікатор, як Input.GetAxis, то ми отримуємо у результаті не команду «вліво-вправо» а саме напрям із показником від -1 (вліво) до 1 (вправо) по осі Х. В подальшому це можна буде зручно використати при переносі гри на інші платформи. Це було протестовано як за допомогою клавіш A, D, стрілок вліво-вправо а також на геймпаді із аналоговим стіком. В усіх випадках результат не змінювався, отже, рух запрограмований саме на зміну осі.
Однак, виявляється одна проблема: персонаж, рухаючись в обидві сторони завжди дивиться в одну. Для цього додамо наступний рядок у функцію Run:
spriterenderer.flipX = direction.x < 0f;
Він визначає обертання спрайтів по осі Х у протилежний бік. Цей індикатор є й в інспекторі рушія, але нам потрібно налаштувати його так, щоб ця процедура була невидимою у самій грі, тож, якщо напрям руху буде меншим за 0 (вліво), персонаж буде обертатись у протилежну сторону.
Далі необхідно прив’язати камеру до персонажа, щоб під час його руху камера також слідувала за ним. Власне, об’єкт камери вже прив’язаний до персонажу, але треба прив’язати і персонажа до камери. Для цього створимо керівника камерою CameraController. За аналогією задаємо об’єкт прив’зяки:

public GameObject followTarget;

Цей об’єкт задається після прив’язки скрипту до камери. В нього поміщуємо гравця. Сам скрипт працює завдяки наступному коду:

void Update () {
        targetPos = new Vector3(followTarget.transform.position.x+0.5f, followTarget.transform.position.y+1, transform.position.z);
        transform.position = Vector3.Lerp(transform.position, targetPos, moveSpeed * Time.deltaTime);
        transform.position = new Vector3(clampedX, transform.position.y, transform.position.z);
	}

Все те, що знаходиться у функції Update за замовчанням виконується кожного разу при зміні фрейму (кадру), отже, постійно камера оновлює свою позицію (transform) в залежності від об’єкту, за яким вона слідкує. Вона отримує його координати, далі, під час коду робляться поправки, щоб камера знаходилась не у центрі, а трохи вище (відповідно, на екрані викликаючи ефект того, що сам гравець знаходиться трохи нижче за центр екрану).
Далі виникає дві нові проблеми – персонаж може війти за межі локації, а камера слідує за ним до кінця, виходячи за межі екрану. Для вирішення даної ситуації використовується таке поняття як рамки (Bounds). Для подальшої роботи потрібні 2 види рамок: для персонажа і для камери.
Реалізація рамок персонажа робиться наступним чином:
float correction = 0.5f;
float clampedX = Mathf.Clamp(transform.position.x, (minBound.x + correction), (maxBound.x - correction));
        transform.position = new Vector3(clampedX, transform.position.y, transform.position.z);

Корекцію довелось задати для того, щоб персонаж цілком залишався на екрані. У випадку без використання корекції персонаж наполовину виходив за межі екрану. Функція Clamp фіксує положення персонажу між показниками minBound, maxBound. Отримуються вони з наступного:

minBound = boxBounds.bounds.min;
maxBound = boxBounds.bounds.max;

У значення мінімуму та максимуму записуються одночасно 3 координати: х, у, z, але для нашої системи необхіден лише х, тому це й уточнюється у функції.
Аналогічним образом це робиться й з камерою:

halfH = theCamera.orthographicSize;
halfW = halfH * Screen.width / Screen.height;
float clampedX = Mathf.Clamp(transform.position.x, minBound.x + halfW, maxBound.x - halfW);
transform.position = new Vector3(clampedX, transform.position.y, transform.position.z);

Різницею є те, що тут, на відміну від положення персонажа і обмежуючих його рамок треба також зафіксувати камеру у центрі, коли персонаж буде підходити до країв локації. Для цього ми й отримуємо половинні значення ширини і висоти екрану. Далі за аналогією при досягненні рамок камери її положення фіксується, як тільки гравець входить до зони слідування (більше, ніж половина екрану) камера знов «розблоковується».
Останньою річчю, яка необхідна для локацій є переходи поміж ними. Загалом, це реалізовується звичайними кнопками, але, для того, щоб кнопки з’являлись тоді, коли гравець підходить, треба для кожної кнопки задати координатні відносини того, коли їм потрібно з’являтись. Ця частина налаштовується напряму у менеджері сцени.

playerPosition = new Vector3(player.transform.position.x, player.transform.position.y, player.transform.position.z);
transform.position = playerPosition;
if (transform.position.x >= 1.45 && transform.position.x <= 2.8)
    btn.SetActive(true);
else
    btn.SetActive(false);

При займанні гравцем відносної позиції від 1.45 до 2.8 по осі Х кнопка стає активню, і, відповідно, видимою. При натисканні виконується звичайне переміщення між сценами:

SceneManager.LoadScene(6, LoadSceneMode.Single);

Загалом, це все, що потрібно було для базисного функціоналу «каркасу гри».

2.3. Реалізація «адаптивного штучного інтелекту» (AAI)
Власне, після налаштування бойової системи можна приступати до створення саме «адаптивного штучного інтелекту» (Adaptive Artificial Intelligence, далі - AAI). В першу чергу потрібно поставити задачі для нього. Для початку обмежимось двома:
1) Визначення пріоритетного типу пошкоджень, які гравець використовує найчастіше
2) Визначення стилю гри гравця.
Для виконання пункту 1 можна використати систему «динамічної броні». Дана система буде постійно аналізувати, від якого типу пошкоджень супротивники гравця пріоритет але отримують пошкодження. Буде статичний показник захисту від типів пошкоджень для кожного ворога конкретно плюс до цього буде додаватись «плавкий» показник, що буде розподілятись відповідно до співвідношення отримуваних типів пошкоджень.
Як саме це буде працювати з математичної точки зору? Є рядовий супротивник – прибулець звичайний. Є 5 типів пошкоджень у грі: фізичний, вогняний, електричний, хімічний, природний. Умовно наш прибулець має 20 од. фізичного опору (що еквівалентно зменшенню отримуваних фізичних пошкоджень на 20%) і не має інших. Його масив опорів має такий вигляд: [20, 0, 0, 0, 0].
Розглянемо 3 ситуації:
1) Гравець має групу бійців, що використовують лише здібності із фізичним типом пошкоджень.
2) Гравець має групу бійців, що використовують лише здібності із вогняним типом пошкоджень.
3) Гравець має групу бійців, що використовують комбіновані здібності із фізичним та вогняним типами пошкоджень.
Самі здібності із фізичним типом пошкоджень мають приблизно на 15% більшу ефективність за рахунок того, що знайти захист від нього у грі найпростіше (навіть початковий комплект речей, що мають при собі бійці дає від 3 до 15 одиниць фізичного захисту).
Розрахуємо умовну продуктивність під час бою: допустимо, є умовна здібність A, що наносить 100 одиниць пошкоджень. Створимо схожі здібності, але вже із типизаціями пошкоджень: AP – наносить 100+15% = 115 одиниць фізичних пошкоджень та AF – наносить 100 одиниць пошкоджень від вогню.
Візьмемо за розрахунок подальшої ефективность 11 боїв – 10 базово необхідно грі, щоб саме визначитись із початковими показниками (та для того, щоб прив’язати до сюжету те, що прибульці ще не мають ніякого уявлення про дії гравця), а саме, конкретно, 10 та 11 бої. До кінця 10 бою система завершить визначення пріорітетного типу пошкоджень та на 11 бій вже буде використовувати «динамічну броню».
Розрахуємо, що буде траплятись у наведених вище ситуаціях. Допустимо, весь час у боях проти гравця участь брали групи прибульців по 4 особи, кожен з яких мав запас здоров’я рівний 1000 одиниць. На кінець 10 бою система матиме такі записи щодо типів пошкоджень відповідно:
Ситуація 1: 40000 од. фізичних пошкоджень, 0 для всіх інших;
Ситуація 2: 40000 од. вогняних пошкоджень, 0 для всіх інших;
Для ситуації 3 візьмемо такий розклад, при якому гравець наносив порівну і фізичних і вогняних пошкоджень, отже, на виході матимемо 20000 од. фізичних пошкоджень і 20000 од. вогняних пошкоджень.
Масиви у системі відповідно матимуть такий вигляд:
1) [40000, 0, 0, 0, 0]
2) [0, 40000, 0, 0, 0]
3) [20000, 20000, 0, 0, 0]
Далі необхідно розрахувати коефіціенти нанесених пошкоджень. Робиться це за допомогою ділення кількості конкретних нанесених пошкоджень на суму їх всіх. Матимемо наступний результат:
1) [1, 0, 0, 0, 0]
2) [0, 1, 0, 0, 0]
3) [0.5, 0.5, 0, 0, 0]
Далі «вступає у бій» та сама «динамічна броня». Припустимо, що її показник дорівнює 40. Тепер ми беремо його, множимо на коефіцієнт нанесених пошкоджень та додаємо до масиву захистів нашого прибульця. Маємо наступне:
1) [60, 0, 0, 0, 0]
2) [20, 40, 0, 0, 0]
3) [40, 20, 0, 0, 0]

Рис 2.9. Графік зміни показників захисту при ситуації 1

Рис 2.10. Графік зміни показників захисту при ситуації 2

Рис 2.11. Графік зміни показників захисту при ситуації 3

І вже у 11 бої гравцеві доведеться боротися із прибульцем, що «підготувався» до бою, орієнтуючись на «гіркий досвід» минулих супротивників гравця. Тепер можна розрахувати, яким чином це впливає на ефективність бою у тому чи іншому випадку.
Ситуація 1: До «зміни правил» гравцеві для перемоги над 4 прибульцями із 1000 од. здоров’я у кожного необхідно було нанести 4000/0.8=5000 од. фізичних пошкоджень. Враховуємо для усіх ситуація те, що 1 удар наносить 115 од. пошкоджень і тим, що показник броні вже було враховано вище, потрібно було не менше, ніж 5000/115=44 атаки. Врахуємо, що за 1 раунд кожен з бійців робить 1 дію. При цьому ефективність бою буде дорівнювати 100/(44/4)=9.09 (100 ділимо на загальну кількість атак, поділену на кількість атак за раунд -> 100/(AC/APR)).
Після «зміни правил» гравцеві для перемоги над тими ж прибульцями необхідно нанести 4000/0.4=10000 од. фізичних пошкоджень. Для цього необхідно нанести не менше, ніж 10000/115=87 атак. Ефективність бою буде дорівнювати 100/(87/4)=4.6.
Фактично, у цій ситуації ефективність знизилась у 1.98 разів.
Ситуація 2: Відповідно, у бою перед «зміною» необхідно було нанести 4000/1=4000 од. вогняних пошкоджень. 1 удар наносить 100 од. пошкоджень, отже, для перемоги необхідно 4000/100=40 атак. Ефективність бою дорівнює 100/(40/4)=10.
Після використання «динамічної броні» необхідно нанести 4000/0.6=6667 од. вогняних пошкоджень. Для цього потрібно не менше, ніж 6667/100=67 атак. Ефективність бою дорівнює 100/(67/4)=5.97. У цій ситуації ефективність бою зменшилась у 1,67 разів, адже тут було використано більш продуктивний тип пошкоджень проти конкретної цілі – прибулець ВЖЕ мав показник фізичного захисту, але не мав вогняного, тож початково ця стратегія була більш ефективною (показники ефективності 10 против 9.09), тож і втрата ефективності далі була меншою.
А що ж ситуацією 3? Розглянемо чистий випадок:
Для початку гравцеві необхідно було нанести 2000 од. фізичних і 2000 од. вогняних пошкоджень. Відповідно, для такого результату необхідно 2000/0.8=2500 од. фізичних і 2000/1=2000 од. вогняних пошкоджень у чистому вигляді. У атаках це 2500/115=22 і 2000/100=20 відповідно, тобто, у сумі 42 атаки. Ефективність бою дорівнює 9.52.
Після адаптації прибульців необхідно нанести 2000/0.6=3334 од. фізичних пошкоджень і 2000/0.8=2500 од. вогняних пошкоджень. Для цього необхідно 3334/115=29 плюс 2500/100=25 атак, сумарно 54 атаки. Ефективність бою при цьому буде дорівнювати 100/(54/4)=7.41.
І, власне, що ми маємо? Ефективність впала лише у 1.28.
Висновок з цього виходить сам по собі – використання комбінованих типів пошкоджень виявилось неймовірно ефективним. Окрім того, шо сама ефективність у порівнянні з іншими двома ситуаціями впала значно менше, та й вийшло так, що загалом ефективність вийшла найбільшою.
Але, візьмемо у розрахунок продовження ситуацій. У першому та другому випадках для підвищення ефективності необхідна лише заміна бійців у групи, взявши інших, що мають здібності із іншими типами пошкоджень. Із ситуації 3 можна зробити продовження. Наприклад, 12 бій. На даних момент масив пошкоджень буде наступним:
[22000, 22000, 0, 0, 0]
Коефіціенти залишаються незмінними. Але в цьому випадку гравець змінить стиль бою на такий, в якому він буде переважно користуватись вогняними пошкодженнями. Припустимо, що тепер 75% всих пошкоджень будуть вогняними. В такому випадку треба нанести 1000/0.6=1667 од. фізичних пошкоджень і 3000/0.8=3750 од. вогняних пошкоджень. Сумарна кількість атак, необхідна для перемоги – 1667/115=15 плюс 3750=38, всього 53. Коефіцієнт ефективності буде дорівнювати 7.55. Це на 1.9% збільшує ефективність у порівнянні із минулим боєм. Після цього масив має пошкоджень має наступний вигляд:
[23000, 25000, 0, 0, 0]
Коефіцієнти наступні:
[0.48, 0.52, 0, 0, 0]
Змінюється, відповідно, і масив опорів:
[39, 20, 0, 0, 0]
Якщо бути більш точним, то перші два показники дорівнюють 39.2% та 20.8%, але з-за правил показники завжди округлюються у меншу сторону, тому і маємо таку таблицю. Фактично, за 12 бій вдалось зменшити показник фізичного захисту на 1 од. (1% відповідно). На даних етапах з даними числами це може і не надати різниці, але на пізніх стадіях гри це може зіграти важливу роль.
Додамо наступний бій до статистики, маємо:
[24000, 28000, 0, 0, 0]
Коефіцієнти:
[0.46, 0.53, 0, 0, 0]
Додамо ще два бої за таких правил, маємо наступне:
[26000, 34000, 0, 0, 0] і [0.43, 0.56, 0, 0, 0]
Фактично, вступивши у 16 бій гравець матиме супротивника із наступним масивом опорів: [37, 22, 0, 0, 0]. У порівнянні із 11 боєм показник фізичного захисту знизився на 3%, а показник захисту від вогню збільшився на 2%, причому динаміка йде у сторону зростання захисту від вогню і зменшення фізичного захисту. Відповідно, наступить момент, коли цей показник фізичного захисту може стати меншим. Візьмемо інші перевірки: 16 бій за трьох умов:
1) Гравець продовжує стратегію «25/75»;
2) Гравець повертається до «50/50»;
3) Гравець починає стратегію «75/25»;
За умовою 1 гравцеві потрібно нанести 1588 од. фізичних пошкоджень і 3847 од. пошкоджень від вогню. Сумарна кількість атак, потрібна для цього дорівню 1588/115=14 плюс 3847/100=38, тобто 52. Ефективність бою 100/(52/4)=7.69. Фактично, з-за використання вразливостей самого супротивника і його базовій слабкості до вогняних пошкоджень ефективність за 5 боїв зросла на 3.8%.

Рис 2.12 Загальний графік зміни ефективності бою гравця у різних ситуаціях із використанням різних стратегій

Фактично, за рис 2.12 можна побачити, що, хоча й використання вогняного типу пошкоджень являлось найбільш ефективним спочатку, адже прибульці не мали захисту від нього, після процесу адаптації ця техніка вийшла на друге місце.
Третя ситуація показує підвищення ефективності бою навіть після використання адаптації, однак, весь час графіки зміни захистів показують, що захист від вогню зростає, а захист від фізичних пошкоджень падає. Через деякий час виникне така ситуація, коли адаптація буде найбільш оптимальною – при однаковій кількості пошкоджень, що спричиняються, це буде однаковий захист із таблицею [30, 30, 0, 0, 0]. Фактично, це і є остаточним виконанням задачі – оптимальний підбір характеристик супротивників в залежності від ситуації, що складається.
Друга частина механізму АШІ полягає у визначенні динаміки пошкоджень, що спричиняються за певні проміжки часу. Далі, за отриманими даними визначається стиль гри гравця. Наприклад, група, повністю складена із бійців гуманітарію, що мають пасивну здібність «Наполегливість», яка, у свою чергу, дає +3% до ефективності здібностей у кінці кожного ходу буде збільшувати свою ефективність у затяжних боях, а отже, рішенням може бути більш агресивна стратегія у їх сторону, щоб уникнути посиленої «розкачки» у ефективності. Або ж, наприклад, якщо гравець намагається за перші ходи швидко ліквідувати противників, причому, ця тенденція постійно повторюється, напевне, розумним рішенням було б грати «від захисту»  – пережити перші ходи агресії гравця, після чого, коли він витратить більшу частину своїх ресурсів, почати відповідну агресію.
Реалізацію механізму можна прорахувати наступним чином – розраховувати кількість нанесених пошкоджень за кожний раунд і ділити на певний коефіцієнт, в залежності від кількості виконаних дій. Ділення необхідне чисто з розрахунку самої механіки гри – персонажі із показником ініціативи 0 будуть робити 1+0%=1 дію кожен хід, а, оскільки ці показники з самого початку більші за 0, виходить, що завжди під час першого ходу буде виконуватися певна кількість дій, що більша за одну, а під час інших ходів, до певного моменту, цей показник буде рівним 1. Виходить, що за звичайним показником кількості нанесених пошкоджень буде виходити картина того, що під час першого ходу гравець був занадто «агресивний» чисто з-за того, що він виконав у 2 рази більше дій, тож, додатково потрібно буде враховувати коефіцієнт середньої кількості дій за один хід, після чого виконувати зведення інших показників до середнього значення – лише на основі цього можна отримати більш точні показники діяльності гравця. Для базової версії розрахунків можна обмежитись лише вищевказаними показниками, а з часом можна і посилити ефективність за рахунок додавання нових елементів розрахунку, таких, як критичні удари, використання комбінацій тощо.
Розглянемо декілька ситуацій і можливі ходи для задання реакцій у АШІ. Перша – агресивний стиль гри. В ньому гравець намагається нанести максимальну кількість пошкоджень за короткі проміжки часу для швидкого завершення – для виконання такої умови він використовує більш ефективні здібності, що витрачають значну частину енергії, а отже, в подальшому має менше ресурсів для утримання тієї ж ефективності. Допустимо, дана здібність використовує 35 од. енергії, 5 енергії відновлюється на початку кожного ходу, отже, гравцю вистачить енергії на використання здібності 3 рази – 2 рази під час першого ходу та третій – на другому. Стандартне використання здібності наносить 100 од. пошкоджень, посиленої – 175. Допустимо, супротивником буде один прибулець із 4000 од. здоров’я. Таблиця буде виглядати наступним чином:
[1500 750 400 400 400 400 150 0 0 0
 8       4     4     4     4     4     2     0 0 0]
Розраховуємо середню кількість дій за хід: 8+4*5+2=30/7=4.29. Отже, для виконання дій щодо аналізу ефективності потрібно звести всі результати до «спільного дільника». Маємо наступне:
[804,3 804,3 429 429 429 429 321,75 0 0 0]

Рис 2.13. Графік показника ефективності при агресивній грі

Як можна спостерігати, ефективність падає із часом, адже всі ресурси були витрачені за перші два ходи. За дану ситуацію взято «вакуумний» варіант персонажів із однаковою кількістю пошкоджень від здібності, показником ініціативи в 1 од. та супротивників, що не використовують механізм «динамічної броні». Додатково можна отримати наступний масив даних:
[1 1.875 1 1 1 1.33 0 0 0 0]
Він показує, наскільки поточний хід ефективніший за наступний. Далі за допомогою механізму визначаємо, які динаміки траплялися частіше – зростаючі чи спадні. Масив показує, що двічі динаміка була спадна (попередній хід був більш ефективний за поточний – показник ефективності більше 1) і жодного разу не була зростаючою (враховуються показники менші за 1, за виключенням 0), отже, можна зробити висновок, що гравець використовував свою ефективність на максимум, після чого двічі втрачав ефективність (додатково можна враховувати розрахунок щодо останнього ходу, але це може бути додано пізніше, у наступних версіях АШІ). Візьмемо таку саму таблицю, але з використанням бійців гуманітарію – що з цього вийде:

[1500 772 424 436 448 420 0 0 0 0
8        4     4     4     4     4     0     0 0 0]
Видно, що в даній ситуації гравець впорався на один хід раніше. Умови залишились тими ж – показник ініціативи 1 од. та 100 од. пошкоджень від усіх здібностей. Змінівся лише показник, що підвищував ефективність на 3% кожного ходу. Що ж змінилось в інших табличних даних?

Рис 2.14. Показники ефективності при використанні бійців гуманітарію.
Що маємо із показниками ефективності поточного ходу:
[0.97 1.82 0.97 0.97 1.02 0 0 0 0 0]
Тут ситуація потребує більш складного аналізу. Ми бачимо тричі спадаючу динаміку та двічі зростаючу. Однак, знов таки, передостанній хід динаміка зростаюча лише з рахунок того, що в останньому ході не враховано надлишкові пошкодження, тож, виключивши його із списку маємо 3 зростаючих динаміки проти 1 спадаючої. Отже, переважно, гравець збільшує ефективність власного бою, тож, має менший потенціал на ранніх стадіях. Це і можна використати у контрмеханізмах – намагатись перемогти гравця за перші декілька ходів.
За такою аналогією можна створити механізми і для інших типів гри: від захисту, помірного, контролю тощо.
Яким чином буде працювати даний механізм? Накладенням коефіцієнтів на вірогідність використання здібностей. Працюватиме це наступним чином – супротивник має свою таблицю здібностей разом із вірогідностями використання. Наприклад, прибулець звичайний має таку таблицю:
[1   2   3   4
 25 25 25 25]
Перший рядок відповідає за ідентифікатор здібності із бази даних, друга за шанс використання. Кожного разу, коли настає хід цього прибульця, викидається випадкове число від 1 до 100 і вибирається здібність для використання:
1. Звичайна атака – діапазон від 1 до 25, вважається атакуючою здібністю.
2. Сильний удар – діапазон від 26 до 50, наносить посилені пошкодження, витрачає енергію. Якщо енергії недостатньо – виконується повторне визначення випадкового числа. Вважається атакуючою здібністю.
3. Захист – діапазон від 51 до 75, зменшує отримувані пошкодження. Вважається захисною здібністю.
4. Парирування – діапазон від 76 до 100. Збільшує вірогідність контратаки, витрачає енергію. Якщо енергії недостатньо – виконується повторне визначення випадкового числа. Вважається захисною здібністю.
Такою картина залишається до зміни правил за допомогою адаптації. Розглянемо зміни, пов’язані із агресивним стилем гри – нам необхідно змінити вірогідності здібностей у сторону захисних. Для цього використаємо коефіцієнти 0.4 для атакуючих здібностей і 1.6 для захисних. Отримаємо наступну таблицю:
[1   2   3   4
 10 10 40 40]
Із базовою версією ці правила діятимуть протягом перших трьох ходів, після чого коефіцієнти повертаються до звичайних значень. Із ними здібності матимуть такі показники:
1. Звичайна атака – діапазон від 1 до 10
2. Сильна атака – діапазон від 11 до 20
3. Захист – діапазон від 21 до 60
4. Парирування – діапазон від 61 до 100
Відповідно, із такими параметрами прибулець буде частіше використовувати захисні здібності, щоб протистояти агресії гравця на початкових стадіях бою. Аналогічні механізми розроблюються для різних стилів бою і отримуємо ворога, що адаптується в залежності від поведінки.
До речі, ці дані також можна використовувати й у психологічних дослідженнях, адже завдяки ним можна визначити тип мислення гравця: агресивна гра – бажання швидше завершити роботу, помірна – спланованість, від захисту – обачливість тощо. Це дає багате підґрунтя для вдосконалення самого механізму, адже на виході в результаті можна отримати багато цікавої статистики та інформації для досліджень.

2.4. Розробка бойової системи
Коли реалізовано каркас гри та основи роботи його АШІ можна приступати до реалізації її бойової системи. За основу буде взята система і деякі елементі інтерфейсу з гри Darkest Dungeon (Рис 2.15). [14]
По-перше, необхідна реалізація моменту «входу в бій». Для цього модифікуємо функцію руху наступним чином:

Vector3 direction = transform.right * Input.GetAxis("Horizontal");
//transform.position = Vector3.MoveTowards(transform.position, transform.position = direction, speed * Time.deltaTime);
transform.Translate(new Vector3(Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime, 0f, 0f));
        spriterenderer.flipX = direction.x < 0f;
        float clampedX = Mathf.Clamp(transform.position.x, (minBound.x + correction), (maxBound.x - correction));
transform.position = new Vector3(clampedX, transform.position.y, transform.position.z);
        nofights++;
        if (nofights >= 4000)
        {
            fightexist = true;
        }

Рис 2.15. Інтерфейс гри Darkest Dungeon

При русі це надає можливості змінній nofights нарощувати значення. Як тільки це значення буде рівним або більше за 4000 – активується змінна fightexist. Сама вона вносить наступні зміни до коду:

if (fightexist) { /*anim.SetFloat("MoveX", 0);*/ }
        else
        {
            if (Input.GetAxisRaw("Horizontal") > 0.5f || Input.GetAxisRaw("Horizontal") < -0.5f) Run();
            if (!fightexist) { /*anim.SetFloat("MoveX", 0);*/ 
                anim.SetFloat("MoveX", Input.GetAxis("Horizontal"));
            }
            else
                anim.SetFloat("MoveX", 0);
        } 

Фактично, коли змінна fightexist активна, усі дії щодо рухів деактивуються – це фіксує гравця у самому бої. Залишилось інше додавання – якщо залишити значення активації на 4000 (приблизно 1.5 ігрових екрани), то битви можуть виникати занадто часто, тож додатково до коду додається генератор випадкових чисел, що із вірогідністю 1:8000 активує битву при нарощуванні змінної nofights. Таким чином битви траплятимуться у середньому 1 раз на 3 ігрових екрани (приблизно 1-2 рази на коридор). На деяких локаціях може бути використаний модифікатор частоти, як, наприклад, на 4 поверсі головного корпусу (лігвище головного прибульця) частота боїв буде максимальною, в той час, як на 2 поверсі (територія працівників університету, торговців, організаторів повстань) це значення буде дуже низьким, а в їдальні взагалі буде відсутньою. Для цього буде додана додаткова змінна neutralplace булевого типу, що активується при вході у деякі локації і унеможливлює бої.
Щодо самого бою – спочатку камера фіксується трохи далі від гравця – у центр екрану. Далі у вільні «контейнери» для супротивників завантажуються від 2 до 4 супротивників, якщо бій є випадковим та фіксована кількість, якщо бій є сценарним (бій із боссом, «Свячений похід», «Чотири студентскі вершники» тощо).

Рис 2.16. Розташування гравців та монстра (версія із обрізаною правою стороною)

Наступним елементом є додання інтерфейсу – показників здоров’я, енергії, додання інтерфейсу відображення цифрових значень пошкоджень тощо. Почнемо із додавання шкали здоров’я бійців та монстрів. Додається елемент типу bar прив’язується до показника здоров’я. Ступінь наповненості визначається формулою:

float percenthp = hp/maxhp;

Цей показник і передається до шкали і постійно оновлюється під час бою після дій для кожного із бійців та супротивників (Рис 2.17)
Щодо наступного показника – аналогічно, додається шкала та прив’язується до аналогічного показника, пов’язаного із енергією.
Наступним питанням постає зручність елементів керування. Можна було б взяти схожу схему користувацького інтерфейсу Darkest Dungeon, коли весь інтерфейс постійно відображено під час рейду, але у цій грі є багато моментів, коли це буде, якщо не недоречно, то непотрібно. Тож змінимо такого роду елемент на класичний із використанням невидимих кнопок, що постійно присутні на екрані. Коли настає черга певного бійця робити дію, кнопки, що пов’язані із ним активуються – це кнопка звичайної атаки, прийомів, здібностей та пропуску ходу. При натисканні кнопки звичайної атаки бійці ближнього бою автоматично атакують першу ціль ворожої групи, а бійці дальнього – обирають. При натисканні кнопки прийому або здібностей відкривається додаткове меню з 5 навичок. Фактично, таке дерево постійно знаходиться на екрані, але є неактивним допоки не дійде черга дії певного бійця у бою.

Рис 2.17. Бій із елементами інтерфейсу (нанесені пошкодження, шкали здоров’я)

Дане дерево завантажується під час завантаження локації, що трохи збільшує загальний час завантаження локації, але зменшує «просідання» продуктивності гри під час бою.
Кожен з бійців або супротивників отримує право на хід, коли його показник активності досягає 10000. Коли ніхто не має можливості ходити усі (і бійці, і супротивники) отримують 100 очок активності плюс 1 за кожне очко ініціативи. Якщо одночасно двоє цілей отримують 10000 очок активності або більше, першим ходить той, у кого цей показник більший. Якщо ці показники рівні, розподіл йде наступним чином:
1) Боєць гравця на позиції 1
2) Супротивник на позиції 1
3) Боєць гравця на позиції 2
4) Супротивник на позиції 2
…
X-1) Боєць гравця на останній позиції
Х) Супротивник на останній позиції
Один хід вимірюється показником у 100 проміжків (тих, під час яких виконуються дії або набираються очки активності). Коли показник проміжків досягає 100, він обнуляється і наступає наступний хід – бійці і супротивники отримують очки здоров’я та енергії в залежності від показників відновлення здоров’я та енергії та цикл запускається знов.
Коли бійці отримують перемогу над супротивником, вони отримують досвід, що надається за нього та ділять його між собою. Таким чином групи з двох бійців буде розвиватись швидше, однак, у бою буде менш ефективна. З іншої сторони таким чином можна швидко «прокачати» нових бійців, найнятих у їдальні. Після остаточної перемоги над групою монстрів гравцям видається здобич – вона залежить від типу подоланих супротивників, може мати гроші, інопланетні субстанції або, із деякою вірогідністю, предмети спорядження. Ці предмети розподілені на категорії та занесені до бази даних, тож немає можливості отримати найпотужніші предмети з гри із простих супротивників. Це також використовується і в сараї-підземеллі при розподілі здобичі після перемоги над супротивниками та босами. 
Після завершення битви змінна fightexist становиться на значення false і гра знов повертається до режиму подорожей і значення nofights обнуляється.
Також передумовлені спеціальні бої, що виникають за сценарієм або у спеціальних зонах – вони активуються при певних умовах. Ці умови можуть бути як сценарні, так і заскриптовані. Наприклад, після завершення сюжетної лінії у Коридорі фізиків у лабораторії можна знайти предмет «Загадкова ікона». В залежності від дій гравця її можна або взяти з собою, або залишити там. Якщо її залишити, через деякий час вона зникне, а якщо взяти, то на групу гравця почне полювання Хрестовий похід. Це означає, що з деякою вірогідністю звичайна битва буде замінена на битву із прибульцями-хрестоносцями (із вірогідністю 5%), і це буде траплятись допоки група гравця не одержить над ними перемогу. І таких заскриптованих боїв дуже багато.
Далі процес розробки полягає лише у програмуванні додаткових персонажів та доповнення бази даних новими супротивниками і предметами.

ВИСНОВОК ДО РОЗДІЛУ 2.
Було реалізовано гру в 3 етапи – формування каркасу-скелету гри, розробка штучного інтелекту із адаптивним механізмом після чого було розроблено бойову систему та об’єднано із попередніми напрацюваннями. Результатом реалізації вийшла гра, яка має адаптивний штучний інтелект, що аналізує дії гравця та змінює поведінку супротивників та ігрові механіки для більш вдалого опору гравцю.

РОЗДІЛ 3. ТЕСТУВАННЯ ТА КЕРІВНИЦТВО КОРИСТУВАЧА

3.1. Тестування адаптивного штучного інтелекту
Після завершення написання гри та проведення тестування його основних ігрових процесів потрібно перевірити, як працює адаптивний штучний інтелект. Для цього запустимо декілька тестових боїв, в яких назначене використання АШІ. Запускаємо в режимі налагодження, де ми можемо прислідкувати за змінами у змінних. Перед першим боєм дивимось у файл dynar.txt, що відповідає за роботу АШІ. Для чистоти експерименту очистимо його від даних та обнулюємо:

Рис 3.1. Базові показники системи АШІ.

Подивимось тепер на параметри захистів супротивника:

Рис 3.2. Показники захистів супротивника

Як зараз видно, вивантажено базові показники захистів самого супротивника, адже другий рядок файлу вказує на те, що всі бонуси від динамічної броні нульові. Завершуємо перший бій, після чого знову дивимось на показники у файлі:

Рис 3.3. Показники у файлі після проведення бою

Тут ми бачимо, що гра записувала всі нанесенні пошкодження і розподіляла їх по типам. Якщо урахувати стандартний порядок вказання типів пошкоджень, то у цьому файлі описано те, що загалом було нанесено:
1862 од. фізичних пошкоджень;
334 од. вогняних пошкоджень;
0 од. електричних пошкоджень;
0 од. пошкоджень від отрути;
804 од. пошкоджень від хімії.
Загалом супротивник мав 3000 од. здоров’я. Просумуючи всі окремо нанесені типи пошкоджень видно, що гра прорахувала їх правильно, адже сума в них дорівнює 3000.
Далі, перед записом другого рядка гра сама сумує всі типи пошкоджень, що вона записала разом із тими, що вона вичитує з файлу (попередні дані). Оскільки попередні дані були нульовими, то й дані для аналізу складаються лише з тих, що були отримані за тестовий бій. Просумувавши це і отримавши таблицю даних по нанесеним гравцем пошкодженням [1862, 334, 0, 0, 804] гра починає розраховувати розподіл динамічної броні. Робиться це діленням показників окремих пошкоджень на загальну суму. Прорахувавши на калькуляторі отримуємо:
1862/3000=0.6206(7);
334/3000=0.1113(3);
0/3000=0;
0/3000=0;
804/3000=0.268.
Далі гра множить кожен з цих показників на 40 (показник динамічної броні):
0.6206(7)*40=24.8266(6)=24;
0.1111(3)*40=4.4533(3)=4;
0*40=0;
0*40=0;
0.268*40=10.72=10.
Гра завжди робить округлення у нижчу сторону, тож ми отримали дані розподілу динамічної броні: [24, 4, 0, 0, 10]. Порівнявши їх із тими, що знаходяться у файлі, бачимо, що розрахунки проведені правильно. Запустимо тестовий бій із цими показниками та подивимось на показники захистів супротивника знову:

Рис 3.4. Показники захистів після використання системи динамічної броні.

Судячи з цього можна зробити висновок, що система динамічної броні працює правильно.
Одночасно із цим було проведено запис ефективності бою у файл combateffectivency.txt:

Рис 3.5. Показники ефективності бою під час окремих ходів
Проробивши швидкий розрахунок отримуємо наступні дані:
[99.5, 108, 98.25, 101.5, 103.75, 100, 79, 0, 0]
За результатом видно помірний стиль гри, адже тричі показник підвищувався і стільки ж від понижувався. Це означає, що гравець не робить занадто агресивних дій, тож режим «Захисту» не активується, та й не нарощує ефективність, тож, режим «Агресії» також задіяно не буде. Перевіримо поточні показники (другий бій) коефіцієнтів атаки і захисту:

Рис 3.6. Множники частоти використання атакуючих та захисних здібностей.

Як видно, показники дорівнюють одиницям, отже, система вирішила поки що не змінювати стратегію бою супротивників. Судячи із ситуації за першим боєм і задумом роботи цього елементу ШІ – це правильне рішення.
Загалом, АШІ працює правильно, робить правильні розрахунки та виконує правильні дії, згідно із запланованим варіантом.

3.2. Керівництво користувача
	Ніщо не передбачало лиха… Життя йшло спокійною течією… Студенти навчались у КДПУ, викладачі із задоволенням надавали їм свої знання. Незабаром у всіх на слуху почали з’являтись новини про загадкові об’єкти, що іноді виднілись під блиском сонця на небі. Ніхто не приділяв тому значної уваги, аж поки вони не вийшли із «тіні». Космічні прибульці прибули на Землю, щоб заграбати собі всю цивілізацію та підкорити людство. Почали вони з вивчення загальної розумової діяльності. Студенти і персонал КДПУ стали першими. Після нападу вони, під керівництвом Великого Ректора вирішили дати опір, але все це було марним – прибульці заздалегідь знали про їх дії та діяли, буквально, на крок попереду. Так КДПУ пав першою жертвою у цій боротьбі за Землю. Студенти і персонал потрапили у полон, намагаючись вирватися і отримуючи все більше і більше поразок, адже с кожним днем прибульці все більше поглиблювались у вивчення людського розуму. Ситуація здавалась безвихідною, адже усі повстання гасились ще на стадії планування. Здавалось, виходу вже немає… Аж поки маршрутне таксі не привезло до воріт університету нового абітурієнта, свіжий розум у цю підконтрольну прибульцям фортецю…
	Вам доведеться під керівництвом саме цього абітурієнта зібрати групу хоробрих повстанців та перемогти прибульців, що захопили університет.
	Щодо основ гри – у персонажів, окрім абітурієнта є приналежність до певної фракції.
	«Технарі» –  члени цієї фракції схильні до точних наук. Їх здібності в більшості призначені для ефективної точкової дії. Базуються у головному корпусі, який вважають своєю територією. Вороже відносяться до «Гуманітаріїв».
	Фракційна здібність: [Абсолютна точність] – вірогідність нанести критичний удар збільшена додатково на 10% від свого значення.
	«Гуманітарії» – члени цієї фракції більш за все цінять знання, що можна отримати з книг, літератури та народної мудрості. Їх база знаходиться у гуманітарному корпусі. Знаходяться у ворожих відносинах із «Технарями».
	Фракційна здібність: [Концентрація на роботі] – в кінці кожного ходу ефективність здібностей та прийомів збільшується на 3%.
	«Естети» – члени цієї фракції схильні до естетичних наук, та тих, що пов’язані із єдністю із природою. Представників цієї фракції можна знайти у всіх корпусах, однак, в основному вони базуються у корпусі художніх мистецтв та музичних мистецтв.
	Фракційна здібність: [Ефект веселки] – використовуючи здібність можна отримати один із семи додаткових ефектів.
	Далі треба визначитись із характеристиками, що присутні у грі для персоналізації стилю гри.
	Основні характеристики:
	Сила – основна характеристика для бійців, що використовують прийоми. Також впливає на звичайні атаки.
	1 од. сили дає:
	+1 од. сили атаки;
	+1% ефективності всіх прийомів.
	Інтелект – основна характеристика для бійців, що спеціалізуються на використанні здібностей.
	1 од. інтелекту дає:
	+1 од. сили здібностей;
	+1% ефективності всіх здібностей.
	Витривалість – характеристика, що впливає на те, наскільки стійкий персонаж у бою, та як багато ударів може витримати.
	1 од. витривалості дає:
	+8 од. максимуму здоров’я;
	+0.1 од. максимуму здоров’я за кожен вивчений талант.
	Ініціатива – впливає на рішучість персонажа та його бажання діяти у бою.
	1 од. ініціативи дає:
	+1% до кількості дій за хід.
	Концентрація – впливає на те, як майстерно персонаж може займатись своєю справою та зосереджуватись на бої.
	1 од. концентрації дає:
	+1% швидкість підготовки здібностей та прийомів;
	+1% швидкість перезарядки здібностей та прийомів;
Вторинні характеристики:
Сила атаки – впливає на ефективність прийомів, являється їх модифікатором. Також ця характеристика впливає на силу звичайних атак та атак альтернативною зброєю, а також на кількість пошкоджень, що наносяться при парируванні. Базовий показник дорівнює силі.
Сила здібностей – впливає на ефективність здібностей, являється їх модифікатором. Базовий показник дорівнює інтелекту.
Шанс критичного удару – дає можливість нанести подвійні пошкодження або вилікувати персонажа у подвійному розмірі. Базовий показник дорівнює 5%.
Ухилення – шанс ухилитись від прийому чи атаки, нейтралізуючи отримувані пошкодження та негативні ефекти.
Супротив – шанс протистояти здібності, нейтралізуючи отримувані пошкодження та негативні ефекти.
Парирування – шанс при отримуванні пошкоджень провести контратаку в супротивника із нанесенням йому пошкоджень у розмірі звичайної атаки.
Захисні характеристики:
Броня (фізичний захист) – зменшує отримуванні пошкодження від звичайних атак та прийомів. Значення цієї характеристики може бути у діапазоні від 0 до 99. Кожна одиниця броні зменшує отримувані пошкодження від атак та прийомів на 1%.
Стихійний захист (вогонь, мороз, електрика, отрута, хімія) – зменшує отримувані пошкодження від відповідної стихії. Кожна одиниця зменшує отримувані пошкодження на 1%. Значення характеристики може бути будь-яким, причому, якщо показник менший за 0, дана стихія буде завдавати додаткової шкоди, а якщо більше за 100 – зцілювати.
Стійкість – додатково зменшує отримувані пошкодження незалежно від їх типу. Спрацьовує після зменшення пошкоджень основним показником захисту. Кожна одиниця зменшує отримувані пошкодження додатково на 1%.
Відновлення здоров’я – кількість здоров’я, шо відновлюється у персонажа на початку кожного ходу. Також, в кінці бою відновлюється 20% від втраченого за бій здоров’я та додатково об’єм, рівний 10-тикратному показнику відновлення здоров’я.
Відновлення енергії – кількість енергії, що відновлюється у персонажа на початку кожного ходу. Енергія повністю відновлюється на початку та кінці бою. Базовий показник відновлення енергії – 5 од.
Характеристики потреб:
Ситість – вказує, наскільки персонаж ситий. Низький показник, як і високий негативно впливає на інші характеристики, тож варто дивитись, щоб персонажі не голодували, але й не перегодовувати їх. Відновлюється їжею, яку можна придбати у буфетах або іноді знайти у якості здобичі.
Бадьорість – вказує загальну енергічність персонажа. Якщо показник бадьорості високий, персонаж буде отримувати більше досвіду у боях. Навпаки, за низьким показником бадьорості слідує зниження ініціативи та концентрації. Абітурієнт не має даної характеристики! Для відновлення бадьорості бійця треба на деякий час залишити у їдальні.
Персонажі та їх характеристики:
Загалом на вибір доступно 28 бійців різних спеціальностей і класів. Персонажі чоловічої і жіночої статі мають різні набори здібностей, але персонажі однієї спеціальності володіють однаковою пасивною здібністю. Ось декілька зразків героїв, яких ви можете взяти собі у групу:
	Художник (основна роль: боєць ближнього бою)
Фракція: «Естети»
Базові характеристики:
Сила: 12
	Інтелект: 7
	Витривалість: 12
	Ініціатива: 10
	Концентрація: 9
Зразок здібностей:
[Акварельний взмах] Енергія: 25
Посилений удар ближнього бою
[Фарба в очі] Енергія: 50
Осліплює супротивника
[Олійна фарба] Енергія: 35
Сповільнює супротивника
«Вийшовши на шлях бою із величезним пензлем художники посіють хаос серед ворогів, обляпаних липкими фарбами та доб’ють їх потужними ударами.»
Пасивна здібність: [Резерв фарб] Використовуючи здібність, художник має можливість повернути 10 од. витраченої на неї енергії.
Художниця (основна роль: боєць дальнього бою)
Фракція: «Естети»
Базові характеристики:
Сила: 11
	Інтелект: 8
	Витривалість: 10
	Ініціатива: 13
	Концентрація: 8
Зразок здібностей:
[Затуплені олівці] Режим бою
Змінює боєприпаси на товсті тупі олівці. При цьому всі атаки, прийоми та здібності наносять більше пошкоджень, але інтервал між діями збільшується.
[Бронебійні пера] Режим бою
Змінює боєприпаси на гострі бронебійні пера. При цьому всі атаки, прийоми та здібності наносять менше пошкоджень, але ігнорують половину захисту супротивника.
[Класичні пензлі] Режим бою
Змінює боєприпаси на класичні пензлі, що не мають ніяких модифікаторів.
«Із саморобним луком та багатою кількістю «розхідних матеріалів» у якості олівців, пер та пензлів вона нашпигує ворогів ними вдосталь.»
Пасивна здібність: [Резерв фарб] Використовуючи здібність, художниця має можливість повернути 10 од. витраченої на неї енергії.
Зоолог (основна роль: боєць ближнього бою)
Фракція: «Естети»
Базові характеристики:
Сила: 12
	Інтелект: 8
	Витривалість: 9
	Ініціатива: 14
	Концентрація: 7
Зразок здібностей:
[Звірина атака] Енергія: 30
Стрімка атака ближнього бою, що наносить велику кількість пошкоджень та зменшує час до наступної дії.
[Болючий укус] Енергія: 50
Кусає супротивника, наносячи великі пошкодження.
[Розрив] Енергія: 45
Спричиняє у супротивника кровотечу.
«Досконало вивчивши анатомію та поведінку звірів, зоолог власноруч розриває їх на шматки стрімкими та потужними атаками.»
Пасивна здібність: [Мисливський азарт] Наносячи останній удар супротивнику зоолог відновлює 5% свого максимального запасу здоров’я та 50 од. енергії.
Таким чином можна обрати собі унікальний стиль гри, що буде тобі до вподоби, але…за тобою слідкують! Пам’ятай, що кожна дія запам’ятовується, і ніщо не забувається… Тож будь несподіваним для супротивника, будь кращий, ніж минулого разу і тоді перемога буде за тобою!
Спорядження
У бою тобі може знадобитись деяке спорядження. Кожен персонаж має початковий набір предметів, але для більшої ефективності варто пошукати більш якісні речі. Кожен персонаж може носити 9 предметів: шолом\маску, броню, рукавиці, черевики, амулет, кільце, аксесуар, артефакт та альтернативну зброю. Всі ці речі можна знайти у якості випадкової здобичі після перемоги над супротивником, придбати у торговців або ж придбати кейс у закупівника. Кейс матиме один випадковий предмет, якість якого залежить від типу та вартості кейсу. Також є ще одне цікаве місце, де можна відшукати багато скарбів та корисних речей…
Сарай-підземелля
Локація, що знаходиться позаду головного корпусу. Кажуть, колись Великий Ректор складав туди непотріб, поки під його вагою не тріснула підлога. Звідти постійно доносились страшні звуки, але так і не знаходилось сміливця, що спуститься туди перевірити.
Сарай-підземелля виконано у стилі поверхів, що йдуть донизу. На кожному поверсі є 10 дверей. За кожною випадковим чином генерується порожня кімната, бій, або кімната із корисною здобиччю. Чим нижче група гравця спускатиметься, тим більше скарбів можна віднайти та дужчими будуть ставати супротивники.
Увага! Супротивники у сараї-підземеллі відносяться до «елітних» - їх характеристики значно вище за аналоги їх побратимів з поверхні, однак, здобич також на порядок краще.
Сподіваюсь, дана інструкція разом із ігровими підказками допоможе тобі визволити КДПУ від прибульців-загарбників! Удачі та кмітливості тобі у майбутніх діяннях та подвигах!

Висновки до розділу 3
Проведено тестування гри, та, окремо його адаптивного штучного інтелекту. Порівняно фактичні розрахунки гри із плановими розрахунками. Згідно цього зроблено висновок, що АШІ працює правильно і налагоджено. Написано керівництво користувача із описом основних ігрових аспектів, характеристик персонажів, ключових локацій та механік гри. Наведено приклади ігрових персонажів із їх здібностями, описані їх ключові особливості.

ВИСНОВКИ

В процесі виконання даної роботи було реалізовано адаптивний штучний інтелект у RPG-грі, розробленій на рушії Unity. Для досягнення поставленої мети було виконано наступні дії:
	- проаналізовано поточний ринок ігрової індустрії, сучасні тенденції ігрових новинок та закріплені класичні ігрові концепти;
	- проаналізовано історію розвитку жанру RPG-ігор, класичних концептів та особливостей жанру;
	- проаналізовано сучасні можливості штучного інтелекту в іграх, переглянуто приклади та історії впровадження сучасних зразків штучного інтелекту у крупні ігрові проекти, проаналізовано їх прогрес розвитку;
	- створено RPG-гру на ігровому рушії Unity з вбудованим штучним інтелектом у двох частинах, прив’язаних до двох елементів ігрового процесу; 
	- проведено тестування гри та адаптивного штучного інтелекту, порівняно програмні фактичні показники із плановими;
	- розроблено керівництво користувача.

СПИСОК ВИКОРИСТАННОЇ ЛІТЕРАТУРИ
1. Відеогра [Електроний ресурс] Режим доступу: https://uk.wikipedia.org/wiki/Відеогра
2. OpenAI Five [Електроний ресурс] Режим доступу: https://openai.com/five/
3. Dungeons & Dragons  [Електроний ресурс] Режим доступу: https://uk.wikipedia.org/wiki/Dungeons_&_Dragons
4. Рольова відеогра [Електроний ресурс] Режим доступу: https://uk.wikipedia.org/wiki/Рольова_відеогра
5. Roguelike [Електроний ресурс] Режим доступу:  https://uk.wikipedia.org/wiki/Roguelike
6. Might and Magic Book One: The Secret of the Inner Sanctum [Електроний ресурс] Режим доступу:  https://ru.wikipedia.org/wiki/Might_and_Magic_Book_One:_The_Secret_of_the_Inner_Sanctum
 7. Багатокористувацька онлайнова рольова гра [Електроний ресурс] Режим доступу:  https://uk.wikipedia.org/wiki/Багатокористувацька_онлайнова_рольова_гра
8. Штучний інтелект [Електроний ресурс] Режим доступу:   https://uk.wikipedia.org/wiki/Штучний_інтелект
9. Binding of Isaac [Електроний ресурс] Режим доступу: https://ru.wikipedia.org/wiki/The_Binding_of_Isaac
10. Video game maps made by AI: More DOOM! [Електроний ресурс] Режим доступу: https://www.slashgear.com/video-game-maps-made-by-ai-more-doom-08529997/
11.  Unity (рушій гри) [Електроний ресурс] Режим доступу: https://uk.wikipedia.org/wiki/Unity_(рушій_гри)
12. Even Hearthstone runs on Unity — and that’s why it’s already on iPad [Електроний ресурс] Режим доступу: https://venturebeat.com/2014/04/24/even-hearthstone-runs-on-unity-and-thats-why-its-already-on-ipad/
13. Unity Software License Agreement 4.x [Електроний ресурс] Режим доступу: https://unity3d.com/ru/company/legal/eula
14. Darkest Dungeon | A Red Hook Studios Game [Електроний ресурс] Режим доступу: https://www.darkestdungeon.com/
15. Шилдт Г. Самоучитель C++: Пер .с англ. — 3-е изд. — СПб.: БХВ-Петербург, 2003. — 688 с. ISBN 5-7791-0086-1
16. Каррано Ф.М., Причард Дж.Дж. К26 Абстракция данных и решение  задач на C++. Стены и зеркала, 3-е издание: Пер .с англ. — М.: Издательский дом "Вильяме", 2003 . — 848 с.: ил. — Парал .тит. англ. ISBN 5-8459-0389-0 (рус.)
17. Арсак Ж. Прокраммирование игр и головоломок: Переклад з франц. – М.: Наука. Гл. ред. физ.-мат. лит., 2012. – 224 с. – ISBN 978-5-458-26949-0
18. Unity 5 Tutorial: How to create a Maze/ Adventure Game C# [Електроний ресурс] Режим доступу: https://www.youtube.com/watch?v=3khBcfXH__c
19. ИНСТИТУТ: Разработка игра на Unity [Електроний ресурс] Режим доступу: https://www.youtube.com/watch?v=Emyj_2_Q3B0&list=PLDrmKwRSNx7IcfBfcGOjQkApAb7eyP34k
20. Philip C. Jackson, Jr. Introduction to artificial intelligence. – Q335.J27, 1985 – 512 с.  – ISBN 0-486-24864-X
21. Алекс Дж. Шампандар. Искусственный интеллект в компьютерных играх: как обучить виртуальные персонажи реагировать на внешние воздействия. – 2 кв.; Вильямс., 2007 – 768 стр., с ил.– ISBN 978-5-8459-1170-4
22. Гудфеллоу Я., Бенджио И., Курвилль А. Глубокое обучение, 2017 – 652 с.:ил. – ISBN 978-5-97060-554-7
23. Хорхе Паласиос. Unity 5.x. Программирование искусственного интеллекта в играх: Пер. с англ. – ДКМ Пресс, 2016 – 272 с. – ISBN 978-5-97060-436-6
24. 	Ian Millington, John Funge. Artificial Intelligence for Games. – 2nd ed. p. cm., 2009 – 896 с. – ISBN 978-0-12-374731-0
25.  Scott Rogers. Level Up! The Guide to Great Video Game Design. – Wiley; 2 edition, 2014 – 552 c. – ISBN-10: 1118877160, ISBN-13: 978-1118877166
26. За кулисами: как создается ИИ [Електроний ресурс] Режим доступу: https://news.blizzard.com/ru-ru/heroes-of-the-storm/21033994/za-kulisami-kak-sozdaetsya-ii