You are on page 1of 50

Зміст

Вступ 3
1. Загальна частина 5
1.1 Постановка задачі 5
1.2 Дослідження і аналіз об’єкту програмування 5
1.3 Опис засобів програмної реалізації 14
1.4 Вимоги до апаратного та програмного забезпечення 18
2. Практична частина 19
2.1 Створення та налагодження програми 19
2.2 Опис програми та її алгоритмів 20
2.3 Інструкція програміста 30
2.4 Інструкція оператора 30
3 Організаційно-економічна частина 33
3.1 Оцінка вартості програмного продукту 33
3.2 Розрахунок собівартості програмного продукту 42
3.3 Розрахунок ціни програмного продукту 43
3.4 Зведена таблиця показників 44
4 Охорона праці та навколишнього середовища 45
4.1 Загальні питання охорони праці та навколишнього середовища 45
4.2 Управління охороною праці 46
4.3 Організація безпечних умов праці 48

ВСП КФКТЕ. 000121. 008 ПЗ


Зм. Лист № документ. Підпис Дата
Разроб. Кажан С.К. Літера Лист Листів
Провір. Штелік Є. В. 3D гра жанру пригоди 2 56
«2 parts of me»
Н. Контр. Пояснювальна записка Гр.П-701-41
Затвер.
Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
3
Вступ
Комп’ютерні ігри - це неймовірно сильний гравець на ринку розваг. В комп’ютерних іграх кожен може стати
неймовірним героєм та врятувати ціле місто, стати найкращим гонщиком цього міста та виграти автомобілі всіх суперників або ж
в мить переміститись за декілька мільйонів світлових років де без будь-яких зусиль створити свій неймовірний сад з різних видів
дерев та кущів на іншій планеті.
Появі відеоігор передували розвиток програмованих комп'ютерів та технологій формування зображення на екранах
електронних пристроїв. Різноманітні електронні та механічні ігрові пристрої існували ще в першій половині XX століття, але не
мали досить значного поширення. Попередниками відеоігор є пристрій «Cathode ray tube Amusement Device» (укр. Розважальний
пристрій з електронно-променевою трубкою), патент на яку Томас Ґолдсміт Молодший (англ. Thomas T. Goldsmith Jr) та Істл рей
Менн (англ. Estle Ray Mann) отримали 14 грудня 1948 року, і шахова комп'ютерна програма, розроблена у 1947 Аланом
Тьюрінгом. Початково ігрові програми, як шахи чи хрестики-нулики, розроблялися в рамках військової програми США у
прагненні створити комп'ютер, здатний передбачати дії противника.
Перша успішна спроба створити розважальний пристрій, який використовує для зворотного зв'язку із гравцем відео,
належить Вільяму Гіґінботаму. У 1958 він розробив Tennis For Two, однак не розглядав гру як щось важливе і зрештою розібрав
обладнання для інших, наукових, проектів.
Особливо розвивається пригодницький жанр ігор з продуманим сюжетом, де гравець імітує проживає життя
персонажа зі своєю історією та проходить пригоди зі своїми віртуальними друзями тощо. Кожного року з’являються сотні нових
версій ігор з подібними сюжетами.
Із аналогів таких ігор можна привести комп’ютерну гру «Scarf», яка створена на основі ігрового рушію “Unity 3D”.
Також існує дуже відома аналогічна гра - Death Stranding належить до жанру екшн з відкритим світом і включає в
себе мультиплеєрні функції. Гравець виступає в ролі чоловіка на ім'я Сем, який працює на організацію BRIDGES, котра
налаштовує комунікації між регіонами Об'єднаних міст Америки майбутнього. Команда Сема займається розширенням «хіральної
мережі» (англ. Chiral Network) в умовах таємничої катастрофи, що спіткала США.
В межах дипломного проекту потрібно реалізувати гру «2 parts of me».
Гра «2 parts of me» – це гра на ПК, для того, аби дати гравцю пережити ту історію яку я, як автор, хочу донести та
дати пережити. Мета гри «2 parts of me» - це дати можливість гравцю пройти гру тим способом, яким він захоче та побачити чим
закінчиться його пригоди.
Засоби реалізації: Ігровий рушій «Unity». Unity — багатоплатформовий інструмент для розробки відеоігор і
застосунків, і рушій, на якому вони працюють. Створені за допомогою Unity програми працюють на настільних комп'ютерних
системах, мобільних пристроях та гральних консолях у дво- та тривимірній графіці, та на пристроях віртуальної чи доповненої
реальності. Застосунки, створені за допомогою Unity, підтримують DirectX та OpenGL.
Також я вирішив більш детально вивчити мову С# та поглибити свої знання в цій сфері. Ця мова дуже практична для
створення подібного продукту, який я розробляю у цій дипломній роботі згідно темі диплому. Синтаксис C# близький до С++ і
Java. Мова має строгу статичну типізацію, підтримує поліморфізм, перевантаження операторів, вказівники на функції-члени
класів, атрибути, події, властивості, винятки, коментарі у форматі XML. Перейнявши багато від своїх попередників — мов С++,
Object Pascal, Модула і Smalltalk — С#, спираючись на практику їхнього використання, виключає деякі моделі, що
зарекомендували себе як проблематичні при розробці програмних систем, наприклад, мова С#, на відміну від C++, не передбачає
множинне успадкування класів.

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
4
1 Загальна частина
1.1 Постановка задачі
Треба дослідити та проаналізувати різні існуючи жанри ігор та обрати той жанр, в якому я буду створювати свій
програмний продукт. Розробити план конструювання програмного забезпечення та впевнитися у фінансовій вигідності розробки.
Потрібно також дослідити ігровий рушій та вивчити основні його особливості для ефективної роботи з ним.
Розібратися чим особливе програмування на мові сі-шарп в цьому рушії.
Гра «2 parts of me» повинна являти собою программу для персональних комп’ютерів і використовувати власну
систему класів, яка керується спеціалізованими бібліотеками та об’єктами рушія «Unity».
Необхідно реалізувати такий набір функціональних можливостей:
1. Взаємодія із різними інтерактивними предметами.
2. Можливість переміщення гравця за допомогою клавіш WASD.
3. Обертання камери навколо ігрового персонажа.
Усі ресурси потрібні для роботи програми не залежать від зовнішнього зв’язку, таким чином можна запускати гру у
будь якому місці незалежно від зовнішніх факторів.
Цільовою аудиторією є - гравці на ПК без вікових обмежень.
1.2 Дослідження і аналіз об’єкту програмування
Відеогра — це електронна гра, в ігровому процесі якої гравець використовує інтерфейс користувача, щоб отримати
зворотну інформацію з відеопристрою.
Дослідження відеоігор (англ. Game studies) у різних аспектах виникло в 1980-ті роки, на хвилі їх популярності.
Відтоді утворилися три напрями вивчення.
Перший, соціальний, розглядає відеоігри як модель поведінки суспільства і людини. Досліджуючи поведінку в
стандартних і незвичайних ігрових ситуаціях, він може прогнозувати дії людей в інших сферах життя. Другий, гуманітарний,
займається відеіограми як складовою сучасної культури. Він вивчає їх зв'язок з різними формами культури й мислення, вплив на
масову свідомість та інші види мистецтва. Третій вивчає ігри з точки зору їх розробників. Цей напрям займається проблемами
створення успішних відеоігор, вирішення пов'язаних з ними проблем.
Часом окремо виділяються дослідження історії відеоігор і проблеми зображення насильства в них. Окрім того деякі
дослідники займаються проблемою віртуальної економіки, економічними аспектами відеоігрової індустрії[39].
Електронні пристрої, які використовуються для того щоб грати, називаються ігровими платформами. Наприклад, до
таких платформ належать персональний комп'ютер та гральна консоль. Пристрій введення, який використовується для керування
грою, називається ігровим контролером. Це може бути, наприклад, джойстик, клавіатура та мишка, геймпад або сенсорний екран.
У 2000-ні роки відеоігри ставали все реалістичнішими в плані графіки, розвинулися он-лайн ігри та мережеві
режими, що дозволили багатьом гравцям взаємодіяти в реальному часі. Наприкінці десятиліття відбулася інтеграція з ігровими
сервісами та соціальними мережами. Ігри на фізичних носіях стали відходити у минуле, поступаючись цифровій дистрибуції. Це
обумовило поширення інді-ігор, ігор від незалежних розробників чи навіть окремих людей. Гравці стали активними учасниками
створення й модифікації відеоігор шляхом моддингу, конструювання інтерактивних творів у спеціальних редакторах. Типовим
стало випускати завантажувані доповнення до ігор, у тому числі платні, впроваджувати мікротранзакції, покликані за реальні
гроші полегшувати гру. У 2010-і стрімко підвищилися стандарти якості графіки, зокрема після виходу восьмого покоління
ігрових систем, що позначив поширення 4K-дисплеїв. Значно зросла кількість ігор і пристроїв з підтримкою віртуальної
реальності. Сильно розвинулася індустрія ігор для мобільних пристроїв, зокрема смартфонів. Стримінг геймплею став вагомою
частиною культури відеоігор.
У 2011 році відеоігри були офіційно визнані видом мистецтва урядом США та Національним фондом мистецтв
США. Однак, загальноосвітнє визнання їх мистецтвом лишається дискутивним питанням.

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
5
Появі відеоігор передували розвиток програмованих комп'ютерів та технологій формування зображення на екранах
електронних пристроїв. Різноманітні електронні та механічні ігрові пристрої існували ще в першій половині XX століття, але не
мали досить значного поширення.
Попередниками відеоігор є пристрій «Cathode ray tube Amusement Device», патент на яку Томас Ґолдсміт
Молодший та Істл рей Менн отримали 14 грудня 1948 року, і шахова комп'ютерна програма, розроблена у 1947 Аланом
Тьюрінгом. Початково ігрові програми, як шахи чи хрестики-нулики, розроблялися в рамках військової програми США у
прагненні створити комп'ютер, здатний передбачати дії противника.
Розробка відеогри має низку послідовних етапів, загалом їх є три: розробка програмного (джерельного) коду,
розробка контенту (малюнки, моделі, музика) та розробка ігрових механік. Їм передує проектування (пре-продакшну) —
генерування геймдизайнером ідей щодо майбутньої гри, вибір жанру, тематики, особливостей ігрового процесу, розробка
сценарію та образів персонажів з оточенням. Менеджер координує дії різних людей, залучених до розробки, складає план їхньої
роботи, встановлює терміни її виконання, планує витрати. Готова гра в свою чергу має пройти низку етапів, в ході яких потрапляє
до гравців і підтримує інтерес до себе. Індустрія відеоігор охоплює багато людей з різними професіями та ролями: програмістів,
які відповідають за технічні можливості гри, художників, моделювальників та аніматорів, які створюють графічний контент,
композиторів та звукорежисерів, які створюють звукове оформлення та музичний супровід, який нерідко видається окремим
накладом. За успішне завершення роботи над проектом відповідають продюсери. Відеоігри, які розробляються незалежними
розробниками чи аматорами називаються інді-іграми. Такі ігри нерідко створюються за допомогою спеціальних програм, які
можуть не вимагати окремо розробки коду або графіки, наприклад, як RPG Maker.
Ігрова механіка визначає насиченість ігрового процесу, правила, за якими грається відеогра. Основою механіки є
ігрові об'єкти, такі як персонажі, об'єкти, зя кими вони можуть маніпулювати, декорації. Частиною ігровової механіки є
управління, якими чином гравець керує персонажем та ігровим світом. Наприклад, як задається напрям руху, як активізується
взаємодія з віртуальними предметами. Крім того на етапі розробки механіки створюється користувацький інтерфейс, який
інформує гравця і дозволяє взаємодіяти зі світом гри. За реалістичну взаємодію об'єктів відповідає фізичний рушій. До прикладу,
він реалізує закони інерції, гравітацію, поведінку рідин, властивості предметів. Штучний інтелект (ШІ) відповідає за поведінку
персонажів, як вони реагуватимуть на дії гравця.
Після виходу гри в ній можуть виявитися досі невідомі помилки програмного забезпечення, не виявлені
тестувальниками під час розробки. Це може статися тому, що збій виникає лише за незвичних обставин у грі, вважається
незначним, або тому, що розробка гри була занадто пришвидшеною для того, щоб задовольнити термін публікації. Такі помилки
(жарг. баґи або «глюки») можуть варіюватися від незначних графічних хиб до серйозних, які можуть ускладнювати чи взагалі
робити неможливим грання. Переважно видавці випускають оновлення (патчі) для виправлення помилок. Іноді помилки можуть
виявлятися корисним для гравців, дозволяючи обходити встановлені правила.
Гравців може не влаштувати певний аспект гри, до прикладу, складність. Розробники в такому разі також
випускають патчі, які додають певні вдосконалення. Розробка і випуск патчів не приносять прибутків самі по собі, але можуть
збільшити продажі гри, оскільки вона позбавляється недоліків.
Для підтримання інтересу до гри до неї випускаються доповнення, що крім виправлення помилок додають нові
можливості чи доповнюють і розвивають сюжет. Доповнення бувають як платні, так і безкоштовні. Ті доповнення, що
розповсюджуються через Інтернет, називаються DLC (Downloadable content). Переважно DLC є платними і не змінюють гру
суттєво, але надають нові можливості, оформлення персонажа.
Питання впливу відеоігор на фізичне і психічне здоров'я людини постало від 1980-х років і розглядається
переважно в контексті відеоігрової залежності. Вперше про шкоду відеоігор масово заговорили після виступу міністра охорони
здоров'я США Еверетта Купа 9 листопада 1982 року, де він вказав на залежність дітей від них. За роки досліджень встановлено,
що надмірне захоплення відеоіграми може переростати і відеоігрову залежність, яка має як фізіологічні, так і емоційні симптоми.
А саме: втому, мігрені через напругу очей, кистьовий тунельний синдром, викликаний надмірним використанням геймпадів або
комп'ютерної мишки, недогляд за особистою гігієною, неспокій і дратівливість поза грою, заклопотаність думками про минулі і

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
6
майбутні сеанси гри, обман близьких щодо часу, проведеного за іграми, самоізоляція з метою більше часу присвячувати
відеоіграм. Разом з тим, захоплення виникає не через властивості самих відеоігор, а проявляється в тих осіб, що вже страждають
від депресії, низької самооцінки, мають слабкі соціальні навички і/або багато неструктурованого часу.
На противагу таким твердженням, відомо і про обширний позитивний вплив відеоігор. Так, використання
контролерів, які передбачають активну рухову діяльність, розвиває рухові навички, підвищує мотивацію до занять фізичними
вправами і поліпшує соціалізацію[44]. Надані відеоіграми моделі діяльності тренують у дітей вміння шукати вирішення проблем,
приймати оптимальні рішення, полегшують спілкування з однолітками, розвивають навички командної роботи, знімають
стрес[45][46]. Як у дітей, так і підлітків та дорослих, відеоігри покращують навички впізнавання об'єктів та орієнтування в
просторі, робочу пам'ять та увагу[47].
Відеоігри, так само як і музичні чи літературні твори, можна категоризувати у жанри. Щодо відеоігор жанри
виділяються на основі спільних характеристик ігрового процесу або його цілей. Часто у одній відеогрі поєднуються декілька
жанрів (наприклад, більшість сучасних рольових ігор мають елементи екшн). Єдино визначеної класифікації жанрів відеоігор не
існує, проте в більшості класифікацій виділяються основні:
Пригодницькі — де дія відбувається в рамках визначеної історії та передбачає детальне дослідження ігрового світу.
Пригодницькі ігри менш покладаються на візуальні образи і більшою мірою на переживання сюжету. Нерідко передбачають
вирішення головоломок.
Екшн — ігри, де гравцеві слід в більшості покладатися на швидкість реакції. Дія гри, як правило, зосереджена на
різного роду боях. Гравець повинен встигнути виконати потрібні дії за певний час. Небойові завдання можуть полягати в
уникненні пасток, проходженні місць за встановлений час і т. д.
Гоночні — цей жанр охоплює всі ігри, в яких участь у перегонах різного роду є основою ігрового процесу. Зазвичай
гоночні ігри використовують автомобілі та інші транспортні засоби.
Рольові — рольові відеоігри походять від настільних рольових ігор, звідки взяли ігрову механіку. Гравець «грає
роль», певного персонажа, який з часом і в міру виконання поставлених завдань розвивається.
Стратегічні — в широкому сенсі стратегічним відеоіграми є ті, де запорукою перемоги є розв'язання проблем шляхом
попереднього обдумування та планування. У більш вузькому, стратегічні ігри відтворюють збройні конфлікти, де гравець керує
арміями чи країнами, що вимагає стратегічного мислення.
Симулятори — різною мірою реалістично відтворюють якийсь з аспектів реального життя. Наприклад, існують
симулятори побачень чи управління літаком.
Навчальні — служать для навчання гравця в якійсь області. Зазвичай призначені для дітей, проте існують і навчальні
ігри для дорослих.
Спортивні — ігри, які відтворюють реальні (футбол, хокей) чи вигадані (квідич) види спорту.
Також відеоігри розрізняються за тематикою: фентезійні, детективні, жахи і т. д. За перспективою: від першої особи,
від третьої особи, ізометричні, з видом збоку/згори.
Моя гра відноситься до жанру пригодницькі ігри. У ній гравець може пережити історію із кінцем, який буде обраний
в залежності від виборів гравця.
Із аналогів можна привести Scarf — інді-відеогра розроблена студією HandyGames. Сенс гри полягає у вирішенні
різноманітних головоломок та особливих можливостей персонажа проходити по продуманому сюжету.
Scarf — це пригодницька гра, яка поєднує головоломки та 3D-платформи, що пропонує алегоричну подорож
красивими світами. Досліджуйте та знайдіть правду за своєю історією за допомогою вашого партнера, шарфа у формі дракона.
Відкрийте нові здібності та відкрийте для себе справжню долю.
На початку гри ми бачимо передісторію у вигляді відео роліку, який допомагає нам зануритися у сюжет та зрозуміти
хто ми, хто наш ворог та яка наша мета у проходженні сюжету, які предмети головні, на що треба буде звернути свою увагу.
Scarf — це захоплююча однокористувацька пригода-головоломка, яка поєднує ліричність із 3D-платформою, щоб
запропонувати алегоричну подорож красивими світами. Чи відкриєте ви їхні таємниці? І якою ціною?

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
7
Після передісторії, персонаж з'являється у нейтральній зоні та потім переходить до умовно різних кімнат, де саме вже
вирішує головоломки (див рисунок 1.1). Надаються різні підказки що до керування, та міні тренувальні полігони, де можна
натренувати новий навик.

Рисунок 1.1– Одна з кімнат Scarf

Рисунок 1.2– Перетворення шарфи Scarf

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

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
8
Пориньте в метафоричну історію, яка роздумує про те, що означає бути героєм. Маючи ваш єдиний союзник шарф,
ваша місія полягає в тому, щоб схопити бунтівні душі, які створили свої власні світи. Досліджуйте красиві 3D-ландшафти, кожен
зі своєю унікальною механікою. Подорожуйте різними областями та освоюйте нові здібності, які дозволять вам долати цікаві
випробування. Стрибайте, ковзайте або гойдайтесь, відкриваючи секрети цих нових світів. Відкрийте для себе багату міфологію
та відновіть власну версію фактів, досліджуючи світи, створені душами.
Насолоджуйтесь аудіовізуальним розділом, який перенесе вас у фантастичний вимір, наповнений світлом і
кольором… але й тінями. Scarf — це повільна гра, яка дозволяє насолоджуватися красою кожного моменту.
Досліджуйте світ і вирішуйте цікаві головоломки, щоб відкрити правду і рухатися вперед у пригоді. Збирайте
унікальні предмети колекціонування, щоб відкрити альтернативну кінцівку.
Зв’яжіться зі своїм шарфом у формі дракона, який, використовуючи різні здібності, такі як планер (дивитись рисунок
1.2), подвійний стрибок і ліана, допоможе вам розкрити міфологію світу.
Також схожа гра з ще більшим сюжетом та дуже великою історією це Death Stranding – відеогра, розроблена студією
KOJIMA PRODUCTIONS для Microsoft Windows, Playstation. Death Stranding є науково-фантастичною пригодницькою грою.
Гравцю в ролі кур’єра пропонується дізнаватися про свою передісторію та що сталося у світі в якому він живе, виконуючі різні
дуже небезпечні перенесення вантажу, як, наприклад, на рисунку 1.3.

Рисунок 1.3 – Ігровий світ Death Stranding

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
9
Рисунок 1.4 – ВВ Death Stranding

Гра відкривається монологом про вибухи, що створили світ таким, яким ми його знаємо. Перший породив всесвіт,
другий — Землю, третій — життя у звичній нам формі. Наступний вибух стер межу між світом живих і світом мертвих. Після
таємничої катастрофи США розділені на окремі міста, зв'язок між ними майже відсутній, а багато надбань минулого втрачено.
Над територіями час від часу йдуть «часопади» — дощі, вода яких пришвидшує хід подій. Пустки населять привиди, а вцілілі
люди змушені підкорятись новим законами природи. Так, мерців слід якомога швидше спалювати, адже вони виділяють
субстанцію «хіраль», яка невдовзі вибухає. Накопичуючись в тілах живих, «хіраль» спонукає до депресії та самогубств.
Чоловік Сем Портер працює кур'єром, виконує доставки посилок між містами. Він завжди виконує доручення
самотужки та тримається осторонь людей через гаптофобію — боязнь доторків. Тікаючи від «часопаду», він втрачає мотоцикл і
вантаж, а сам ховається в печері. Там він зустрічає жінку Фреґіл, яка таємниче зникає. Розшукавши загублений вантаж, Сем
прибуває до Центрального Вузла. Там він отримує нове завдання з доставки трупа самогубця в крематорій, який вже почав
виділяти «хіраль». Дорогою на вантажівку нападають привиди на чолі з таємничим чоловіком у масці черепа, вбивають колег
Сема, а потім і його самого. Проте Сем, після низки сумбурних видінь, отямлюється в іншому місті. Чоловік на прізвисько
Дедмен пояснює, що Сем повернувся зі світу мертвих і тепер винятково цінний для організації BRIDGES, котра налаштовує
комунікації між регіонами Об'єднаних міст Америки. Внаслідок вибуху «хіралі» Центральний Вузол знищено, вцілів лише Сем.
Віднині він не може сам померти, а буде воскресати, до того ж володіє здатністю DOOMS, що дозволяє відчувати привидів.
Дедмен доручає йому доставити морфій для президента Америки, хворої на рак. Президент Бріджет, як з'ясовується — мати
Сема. Вона плекає надію, що США вдасться відновити, тому перед смертю дає сину завдання розшукати його сестру Амелію.
Кілька років тому Амелія вирушила з тим же завданням на захід, але зникла. Сем не вірить, що це можливо, та неохоче береться
за виконання завдання.
Спершу йому доручають доставити тіло матері в крематорій разом з «несправним» BB (дивитись рисунок 1.4).
Крематорій оточують привиди, проте BB проявляє таємничий зв'язок із Семом, завдяки чому той знаходить вихід і називає
дитину Лу. Сем настоює на тому, щоб лишити BB з ним. Дедмен і глава BRIDGES Дайхардмен розповідають, що експедиція
Амелії встановила термінали «хіральної мережі» від східного до західного берега. Термінали дозволили б передавати інформацію
та предмети, ігноруючи відстань, і тим самим посприяли б відродженню держави. Проте мережа не була активована, а Амелію,
наступницю президента, захопили в полон сепаратисти з організації «Homo Demens». Дізнавшись про це, Сем вирішує визволити
сестру, дорогою активовуючи термінали пристроями Q-pid.
Основними параметрами головного героя є рівень здоров'я, швидкість руху, вантажопідйомність і витривалість. На
швидкість впливає вага вантажу та стан взуття, котре слід іноді міняти. Витривалість витрачається на біг і бої, для її відновлення

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
10
необхідно пити та їсти. Між віддаленими точками він здатен прокладати розкладні драбини, закидати троси, а потім і прокладати
мости й дороги. Місцями дається змога користуватись транспортом на кшталт мотоциклів і автомобілів, а також летючими
платформами. Згодом прості доставки можна доручати роботам.
Одним з елементів гри є «часопад» (англ. Timefall) — дощ з іншого світу, що порушує звичний хід часу: під його
краплями рослини можуть виростати і засихати за лічені миті, а людське тіло — старіти на очах. Під час таких дощів виникають
цінні «хіральні кристали».
За словами Коджіми, в разі смерті героя гри Сема дія гри не повертається до точки збереження, як у багатьох інших
іграх; замість цього ігровий персонаж потрапляє в своєрідне «чистилище» — хіральний світ (англ. Chiral world), перекинутий
догори дриґом і занурений під воду; гравець може обстежити цей простір з видом від першої особи, збираючи різні предмети.
Коли ігровий персонаж повертається з потойбіччя, на тому місці лишається кратер.
У регіонах, під'єднаних до «хіральної мережі», гравець може лишати предмети та зводити споруди, які будуть
доступні іншим гравцям. Він і сам може підбирати залишені кимось припаси та користуватись чужими камерами схову,
укриттями, мостами, зарядними станціями. Скориставшись допомогою іншої особи, гравець дає їй «вподобання» та отримує його,
коли сам допоміг комусь. При цьому «часопади» поступово псують залишені на просторах речі й споруди.
В грі «2 parts of me» я хотів передати стиль та головоломки із ігри Scarf але щоб сюжет був більш глибокий та
можливо сумніший так як в ігрі Death Stranding.
1.3 Опис засобів програмної реалізації

Для створення даного модуля я вирішив використовувати ігровий рушій Unity, в якому для написання скриптів
потрібна мова програмування С#, якою оперував в середовищі програмування Microsoft Visual Studio від компанії Microsoft.
Мова програмування С# - об’єктно орієнтована мова програмування створена в 1998-2001 роках групою інженерів
компанії Microsoft під керуванням Андерса Хейлсберга та Скотта Вильтаумота як мова для розробки додатків для платформи
Microsoft .NET Framework.
Підтримує такі парадигми програмування:
1. Процедурне програмування
2. Об’єктно орієнтоване програмування
3. Узагальнене програмування
C# є дуже близьким родичем мови програмування Java. Мова Java була створена компанією Sun Microsystems, коли
глобальний розвиток інтернету поставив завдання розподілених обчислень. Взявши за основу популярну мову C++, Java
виключила з неї потенційно небезпечні речі (на зразок вказівників без контролю виходу за межі). Для розподілених обчислень
була створена концепція віртуальної машини та машинно-незалежного байт-коду, свого роду посередника між вихідним текстом
програм і апаратними інструкціями комп'ютера чи іншого інтелектуального пристрою.
Мова програмування С# відноситься до одного з самих популярних сімейств мов програмування з С-подібним
синтаксисом, з них його синтаксис найближче схожий на С++ та Java. Має статичну типізацію, підтримує делегати, події,
змінних, властивостей, узагальнене програмування, ітератори, анонімні функці, технологію LINQ, винятки, та коментарі у
форматі XML.
Станом на сьогодні C# визначено флагманською мовою корпорації Microsoft, бо вона найповніше використовує нові
можливості .NET. Решта мов програмування, хоч і підтримуються, але визнані такими, що мають спадкові прогалини щодо
використання .NET. Рядок в C# є посилальним типом.
Статична типізація – це означаю що у програмі змінні, повертаємі значення функції, вказівники підв’язуються під
певний конкретний тип та в майбутньому не може бути змінений та під нього виділяється пам’ять лише раз. Тож при створенні
змінної потрібно вказати тип даних. У C# є виняток у виді ключового слова var, що є не більше ніж синтаксичний цукор, тобто
тип даних підбереться автоматично, але все-рівно буде закріплений один тип даних, а от що не синтаксичний цукор так це object
та dynamic. Вони можуть в собі зберігати усі типи даних по різним причинам. Від object успадковуються усі типи даних у мові С#

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
11
і по правилу наслідування він може зберігати в собі будь-який із них але для використання потрібно явно привести змінну до
типу, а dynamic нетипізований тому може бути різними типами даних і використовуватися без приведення типів.
Делегат - клас, в якому зберігається функція. В визначення делегата входить прототип функцій, які можуть бути
представлені цим делегатом. При оголошенні змінної типу делегата вказується функція, тип якої сумісний з типом делегата. Після
цього делегат можна використовувати для виклику зазначеної функції. Зазвичай делегати використовуються для реалізації
зворотних викликів. Зворотний виклик, виклик функції A функції B, переданої в якості параметра функції A. Зворотні виклики
часто застосовуються для передачі функції інформації про вироблених її діях.
Події – мається на увазі подійно орієнтоване програмування що являється однією з парадигм програмування в котрій
виконання програми визначається подіями – діями користувача. Події в .NET використовуються дуже часто в технологіях для
розробки графічного інтерфейсу (ASP .NET, Windows Forms, WPF, Silverlight) та в інших класах, в яких потрібно повідомляти
користувачів при виникненні певної події.
Змінна – це адреса до області пам’яті комп’ютера виділеної під певний об’єм інформації адресу якої можна
використовувати для доступу до цих самих даних.
Всі змінні в С# повинні бути оголошені до їх застосування. Це потрібно для того, щоб повідомити компілятор про тип
даних, що зберігаються в змінній, перш ніж він спробує правильно скомпілювати будь-який оператор, в якому використовується
змінна. Це дозволяє також здійснювати строгий контроль типів в С #.
Властивості – Це спосіб доступу до внутрішнього стану об’єкту, імітуючий змінну деякого типу. Простими словами
змінна в класі.
Узагальнене програмування – це парадигма програмування, яка полягає у такому описі даних та алгоритмів, щоб їх
можна було використовувати до різних типів даних не змінюючи сам опис.
Ітератор – це інтерфейс який надає доступ до елементів колекції та оперувати з кожним із них поочередно.
Анонімні функції - метод, на який посилається делегат, нерідко використовується тільки для цієї мети. Іншими
словами, єдиною підставою для існування методу є та обставина, що він може бути викликаний за допомогою делегата, але сам
по собі він не викликається взагалі. У подібних випадках можна скористатися анонімною функцією, щоб не створювати окремий
метод. Анонімна функція, по суті, являє собою безіменний кодовий блок, який передається конструктору делегата. Перевага
анонімної функції полягає, зокрема, в її простоті. Завдяки їй відпадає необхідність оголошувати окремий метод, єдине
призначення якого полягає в тому, що він передається делегату. Починаючи з версії 3.0, в C# передбачено два різновиди
анонімних функцій - анонімні методи і лямбда-вирази LINQ - проект Microsoft по додаванню синтаксису мови запитів, що
нагадує SQL, в мови програмування платформи .NET Framework.
Анонімні методи почали застосовуватися в C# ще у версії 2.0, а лямбдавирази - у версії 3.0. В цілому лямбда-вираз
удосконалює принцип дії анонімного методу і в даний час вважається кращим для створення анонімної функції. Але анонімні
методи широко застосовуються в існуючому коді C# і тому як і раніше є важливою складовою частиною C#. А оскільки анонімні
методи передували появі лямбда-виразів, то чітке уявлення про них дозволяє краще зрозуміти особливості лямбда-виразів. До
того ж анонімні методи можуть бути використані в цілому ряді випадків, де застосування лямбда-виразів виявляється
неможливим. Анонімний метод – один із способів створення безіменного блоку коду, пов'язаного з конкретним екземпляром
делегата. Для створення анонімного методу досить вказати кодовий блок після ключового слова delegate.
Виключення - механізм мов програмування, призначений для опису реакції програми на помилки часу виконання і
інші можливі проблеми, які можуть виникнути при виконанні програми і призводять до неможливості подальшої відпрацювання
програмою її базового алгоритму.
Коментарі в форматі XML – це ті самі коментарі які видні лише для програміста а компілятор не звертає на них увагу
але вони описують метод чи поле так, що коли ти вписуєш метод то середовище розробки показує коментар як опис методу чи
поля, таким чином клієнтський програміст може менше звертатись до документації просто читаючи опис методу, що він повертає
та що означає.

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
12
Microsoft Visual Studio – це інтегроване середовище розробки, яке підтримує велику кількість мов програмування та
дозволяє писати на них різні програми простіше за допомогою своїх корисних функцій. Visual Studio (скорочено VS) включає в
себе ряд корисних інструментів, які допомагають програмістам в розробці програмного забезпечення, одним із таких інструментів
є технологія IntelliSense.
Visual Studio .NET 2003 (кодове ім'я Everett; внутрішня версія 7.1) — випущена в квітні 2003 (містить .NET
Framework 1.1). Це була перша версія, що допускала розробку застосунків для мобільних пристроїв, використовуючи ASP.NET
або .NET Compact Framework. Внутрішній номер версії Visual Studio .NET 2003 був 7.1, але версії файлів були 8.0. Visual
Studio .NET 2003 також було випущено в чотирьох варіантах: Academic, Professional, Enterprise Developer, та Enterprise Architect.
Версія Enterprise Architect містила спеціальний застосунок Microsoft Visio 2002, що використовувався для побудови UML об'єктів.
Пакет оновлень для Visual Studio .NET 2003 було випущено 13 вересня 2006 року.
Ця технологія включає в себе системи автодоповнення тексту, який пише програміст, аналіз коду для підказок
програмісту аби не потрібно було тримати усе в голові, та лазити по коду бо одразу буде виведено повідомлення про те з якою
змінною йде робота та який у неї тип даних, також є зручним способом перегляду документації завдяки виводу опису до поля,
методу а також потрібні їй аргументи, написавши їх ім’я, що в рази зменшує затрати по часу, що робить розробку програмного
забезпечення дешевшим та простішим. Також Visual Studio підтримує такі сервіси як: GitHub або Microsoft Azure.
Сама технологія IntelliSense вперше з’явилася в Visual Basic 5.0 Creation Edition в 1996 році, котрий є публічно
доступним прототипом Visual Basic 5.0. Незважаючи на початкове тестування в середовищі програмування Visual Basic,
IntelliSense швидко включили в Visual FoxPro і Visual C ++ в Visual Studio 97. Оскільки версія для Visual Basic використовувала
можливості COM, вона була більш розвинутою, ніж версія для Visual C ++, так як остання не була повністю заснована на COM.
Ці недоліки були виправлені після появи платформи .NET Framework, яка надає потужну систему метаданих.
IntelliSense вступила в нову стадію розробки з появою Visual Studio .NET, яка підтримувала метадані і модель
документації коду .NET Framework. В даний час IntelliSense підтримується в Visual Studio для таких мов, як C ++, C #, J #, Visual
Basic, Visual FoxPro, XML, HTML, XSLT і інших. Починаючи з Visual Studio 2005 IntelliSense за замовчуванням починає
пропонувати варіанти доповнення коду, не вимагаючи введення маркерів, тобто, як тільки користувач починає друкувати.
Оскільки тепер доступні варіанти включають в себе і конструкції мови (такі як for або if), вони також були включені в список
варіантів для автодоповнення.
Використаний ігровий рушій Unity - міжплатформенне середовище розробки комп'ютерних ігор, розроблена
американською компанією Unity Technologies. Unity дозволяє створювати додатки, що працюють на більш ніж 25 різних
платформах, що включають персональні комп'ютери, ігрові консолі, мобільні пристрої, інтернет-додатки та інші. Випуск Unity
відбувся в 2005 році і з того часу йде постійний розвиток.
Редактор Unity має інтерфейс, що складається з різних вікон, які можна розташувати на свій розсуд. Завдяки цьому
можна проводити налагодження гри чи застосунка прямо в редакторі. Головні вікна — це оглядач ресурсів проєкту, інспектор
поточного об'єкта, вікно попереднього перегляду, оглядач сцени та оглядач ієрархії ресурсів.
Проєкт в Unity поділяється на сцени (рівні) — окремі файли, що містять свої ігрові світи зі своїм набором об'єктів,
сценаріїв, і налаштувань. Сцени можуть містити в собі як об'єкти-моделі (ландшафт, персонажі, предмети довкілля тощо), так і
порожні ігрові об'єкти — ті, що не мають моделі, проте задають поведінку інших об'єктів (тригери подій, точки збереження
прогресу тощо). Їх дозволяється розташовувати, обертати, масштабувати, застосовувати до них скрипти. В них є назва (в Unity
допускається наявність двох і більше об'єктів з однаковими назвами), може бути тег (мітка) і шар, на якому він повинен
відображатися. Так, у будь-якого предмета на сцені обов'язково наявний компонент Transform — він зберігає в собі координати
місця розташування, повороту і розмірів по всіх трьох осях. У об'єктів з видимою геометрією також за умовчанням присутній
компонент Mesh Renderer, що робить модель видимою. Різні моделі можуть об'єднуватися в набори (ассети) для швидкого
доступу до них. Наприклад, моделі споруд на спільну тему.

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
13
Unity підтримує фізику твердих тіл і тканини, фізику типу Ragdoll (ганчіркова лялька). У редакторі є система
успадкування об'єктів; дочірні об'єкти будуть повторювати всі зміни позиції, повороту і масштабу батьківського об'єкта. Скрипти
в редакторі прикріплюються до об'єктів у вигляді окремих компонентів.
Unity підтримує стиснення текстур, міпмапінг і різні налаштування роздільності екрана для кожної платформи;
забезпечує бамп-мапінг, мапінг відображень, паралакс-мапінг, затінення навколишнього світла у екранному просторі, динамічні
тіні за картами тіней, рендер у текстуру та повноекранні ефекти обробки зображення, такі як зернистість, глибина чіткості,
розмиття в русі, відблиски віртуальних лінз або ореол навколо джерел світла.
Основними перевагами Unity є наявність візуальної середовища розробки, міжплатформенній підтримки і модульної
системи компонентів. До недоліків відносять появу складнощів при роботі з багатокомпонентними схемами і труднощі при
підключенні зовнішніх бібліотек. На Unity написані тисячі ігор, додатків, візуалізації математичних моделей, які охоплюють
безліч платформ і жанрів. При цьому Unity використовується як великими розробниками, так і незалежними студіями.
1.4 Вимоги до апаратного та програмного забезпечення
Мінімальні вимоги до пристрою:
- Пристрій на базі операційної системи Windows 7/8/8.1/10.
- Екран з роздільною здатністю не менше 800х400 рх.
- Оперативна пам'ять 4 гб.

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
14
2 Практична частина
2.1 Створення та налагодження програми
В даному дипломному проекті розроблено гру «2 parts of me», з використанням засобів об’єктно-орієнтованого
програмування та мови програмування C# у ігровому движку Unity версії 2020.3.1f1.
Сама Unity, як і інші ігрові движки використовують компонентно-орієнтоване програмування (КОП), у цілому КОП
можна розглядати як розвиток ООП з вилученням проблемного місця, а саме базового класу, який є як і перевагою так і
проблемою. Наприклад ми створюємо базовий клас для усіх об´єктів типу «Ворог», але нам потрібно аби різні вороги мали
комбінацію різних можливостей, без розбиття їх по ієрархії, щоб один ворог біг стрибати а інший літати, а інший і літати і
стрибати.
Було чудово, якщо вони при цьому могли змінювати свої можливості під час виконання програми. Ми можемо
створити таку поведінку за допомогою інтерфейсів, але це забороняє нам змінювати їх поведінку під час виконання програми та
самі інтерфейси потрібно реалізовувати у кожному класі окремо, що викликає повторення коду.
Компонентна модель являє собою об'єкт, який містить у собі компоненти, які надають йому певні можливості та
характеристики, таким чином кожен компонент може реалізувати окрему властивість і бути частиною будь-яких об´єктів. Також
компоненти можна додавати та видаляти з об'єктів під час виконання програми, що дає нам можливість прибирати можливість
літати у ворога, якому, наприклад, зламали крила.
Для реалізації даної програми було вирішено створити декілька основних класів:
1. GameData – зберігає статично набір даних для запам’ятовування потрібної інформації між ігровими сценами.
2. ManagerGame – керує основними процесами алгоритму гри та послідовністю.
3. HelperPers – керує підказками, які відображаються перед гравцем.
4. Gost – описую та задає основні функції для гравця-привида.
5. Human – описую та задає основні функції для гравця-людини.
6. Activator – базовий клас для всіх інтерактивних елементів в грі.

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
15
2.2 Опис програми та її алгоритмів
Діаграма прецедентів є графом, що складається з множини акторів, прецедентів (варіантів використання) обмежених
межею системи (прямокутник), асоціацій між акторами та прецедентами, відношень серед прецедентів, та відношень
узагальнення між акторами. Діаграми прецедентів відображають елементи моделі варіантів використання.
Суть діаграми прецедентів полягає в тому, що проєктована система подається у вигляді множини сутностей чи
акторів, що взаємодіють із системою за допомогою так званих варіантів використання. Варіант використання (англ. use case)
використовують для описання послуг, які система надає актору. Іншими словами, кожен варіант використання визначає деякий
набір дій, який виконує система під час діалогу з актором. При цьому нічого не говориться про те, яким чином буде реалізовано
взаємодію акторів із системою.
У мові UML є кілька стандартних видів відношень між акторами і варіантами використання:
- асоціації (англ. association relationship)
- включення (англ. include relationship)
- розширення (англ. extend relationship)
- узагальнення (англ. generalization relationship)
При цьому загальні властивості варіантів використання можна подати трьома різними способами, а саме — за
допомогою відношень включення, розширення і узагальнення.
Розглянемо функціональні можливості користувача. На рисунку 2.1 зображена діаграма прецедентів, на якій видно як
користувач може взаємодіяти з програмою.

Рисунок 2.1 – Взаємодія гравця з програмою


Як видно, користувач може переміщуватись та взаємодіяти з елементами гри. Предмети можна або активувати або
підбирати. Усю логіку виконує ядро програми.
Діаграма компонент — в UML, діаграма, на якій відображаються компоненти, залежності та зв'язки між ними.
Діаграма компонент відображає залежності між компонентами програмного забезпечення, включаючи компоненти
вихідних кодів, бінарні компоненти, та компоненти, що можуть виконуватись. Модуль програмного забезпечення може бути
представлено як компоненту. Деякі компоненти існують під час компіляції, деякі — під час компонування, а деякі під час роботи
програми.
Діаграма компонент відображає лише структурні характеристики, для відображення окремих екземплярів компонент
слід використовувати діаграму розгортування.
Діаграма компонентів - Діаграма компонентів дозволяє визначити архітектуру розроблюваної системи, встановивши
залежності між програмними компонентами, в ролі яких може виступати вихідний, бінарний і виконуваний код. У багатьох
середовищах розробки модуль або компонент відповідає файлу.

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
16
На рисунку 2.2 видна залежність усіх ресурсів одне від одного, що в результаті проявляє структуру документів.

Рисунок 2.2 Діаграма компонентів програми


Усі компоненти розфасовані по папкам в залежності від задачі або сцени. Таким чином усі потрібні файли
знаходяться у одній папці. На діаграмі вказані і всі файли з скриптами та директорії в яких зберігаються ресурси, сцени та ін.
Основний набір файлів згенеровано середовищем Unity.
Діаграма класів - статичне представлення структури моделі. На цій діаграмі показують класи, інтерфейси, об'єкти й
кооперації, а також їхні відносини. Діаграма класів може містити позначення деяких елементів поведінки. Служить для
представлення статичної структури моделі системи в термінології класів об'єктно орієнтованого програмування.
Асоціація показує, що об'єкти однієї сутності (класу) пов'язані з об'єктами іншої сутності.
Якщо між двома класами визначена асоціація, то можна переміщатися від об'єктів одного класу до об'єктів іншого.
Цілком припустимі випадки, коли обидва кінці асоціації відносяться до одного і того ж класу. Це означає, що з об'єктом деякого
класу дозволено зв'язати інші об'єкти з того ж класу. Асоціація, що зв'язує два класи, називається бінарною. Можна, хоча це рідко
буває необхідним, створювати асоціації, що зв'язують відразу кілька класів; вони називаються n-арними. Графічно асоціація
зображується у вигляді лінії, що з'єднує клас сам з собою або з іншими класами.
Асоціації може бути присвоєно ім'я, яке описує природу відносин. Зазвичай ім'я асоціації не вказується, якщо тільки
ви не хочете явно задати для неї рольові імена або у вашій моделі настільки багато асоціацій, що виникає необхідність посилатися
на них і відрізняти один від одного. Ім'я буде особливо корисним, якщо між одними і тими ж класами існує кілька різних
асоціацій.
Клас, що бере участь в асоціації, грає в ній деяку роль. По суті, це «обличчя», яким клас, що знаходиться на одній
стороні асоціації, звернений до класу з іншого її боку. Ви можете явно позначити роль, яку клас грає в асоціації.
Агрегація — проста асоціація між двома класами, де один з класів має вищий ранг (ціле) і складається з декількох
менших за рангом (частин).
Ставлення такого типу називають агрегацією; воно зараховане до відносин типу «має» (з урахуванням того, що
об'єкт-ціле має кілька об'єктів-частин). Агрегація є окремим випадком асоціації і її зображують як просту асоціацію з
незафарбованим ромбом з боку «цілого».

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
17
За потреби можна вказувати кратність агрегації.
Агрегація не накладає жорстких умов на термін існування об'єктів. Наприклад, «частини» можуть існувати тоді, коли
«ціле» зникає.
Графічно агрегація представлена порожнім ромбом на блоці «цілого», і лінією, яка проведена від цього ромба до
класу, що міститься в ньому («частин»).
Композиція — більш строгий варіант агрегації. Відома також як агрегація за значенням.
Композиція має жорстку залежність часу існування екземплярів класу контейнера та екземплярів класів що містяться
в ньому. Якщо контейнер буде знищений, то весь його вміст буде також знищено. Графічно представляється як і агрегація, але з
зафарбованим ромбиком.
Успадкування (англ. inheritance) — це один з принципів об'єктно-орієнтовного програмування, який дає класу
можливість використовувати програмний код іншого (базового) класу, доповнюючи його своїми власними деталями реалізації.
Іншими словами, під час успадкування відбувається отримання нового (похідного) класу, який містить програмний код базового
класу з зазначенням власних особливостей використання. Успадкування належить до типу is-a відношень між класами. При
успадкуванні створюється спеціалізована версія вже існуючого класа.
На рисунку 2.3 зображена схема класів для моєї гри.

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
18
Рисунок 2.3 Діаграма класів

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
19
Рисунок 2.4 – Основні класи рушія
На рисунку ми бачимо як наслідуються один від одного основні класи в рушію Unity. Від класу MonoBehavior
наслідуються всі користувацькі класи.
Для розуміння особливостей виконання проектів, створених у середовищі Unity, розглянемо алгоритм взаємодії
модулів, що забезпечують фізику та рендеринг.
На рисунку 2.5 відображений алгоритм роботи Unity у вигляді блок-схеми.
З рисунку видно що одразу йдуть 2 паралельні процеси:
1. Обробка графіки.
2. Обробка фізики.
Графічна обробка йде послідовно, тобто один кадр обробляється після попереднього від чого залежить час між
кадрами. В один цикл обробки кадр оброблявся 2 мілісекунди а в наступний 15 мілісекунд, від чого залежить динаміка виконання
коду. Якщо на потужному комп’ютері 50 кадрів в секунду то функція переміщення гравця на 1 метр перемістить його на 50
метрів в секунду, в той час як на слабкому комп’ютері гравець може переміщатись лише на 30 метрів в секунду. Фізичні процеси
виконуються зі сталим періодом часу, зазвичай це 0.02с . За рахунок цього внезалежності від потужності комп’ютеру гра буде
обробляти потрібний код однакову кількість разів.
Освітлення може бути досить складною темою, але в цілому ви повинні використовувати мінімальну кількість
світильників, необхідних для досягнення бажаного стилю. Світло може бути одним з найдорожчих аспектів гри, тому для
низькопродуктивних платформ дуже погано працює динамічне освітлення.
У Unity є три режими освітлення: Realtime, Mixed і Baked. Realtime виглядає найкраще, але воно дуже вимоглива.
Baked lighting може і повинен використовуватися, коли це можливо. Тепер у вас не будуть витрачається ресурси, щоб постійно
перераховувати світло і тіні.
Майте на увазі, що ви можете «підробляти» висвітлення, використовуючи emissive maps, які змушують частини
текстури випромінювати світло. Прикладом цього може служити приладова панель літака з безліччю маленьких вогнів.
Створення точки світу для кожного з них було б надзвичайно витратним з точки зору ресурсів, але карта emissive вирішить це
питання.
Шейдери керують усіма візуальними елементами у вашій грі. Не будемо вдаватися в складності оптимізації
шейдерного коду тут, але ви повинні знати, що оптимізовані шейдери можуть значно підвищити продуктивність, оскільки вони не
вимагають тонни обчислень.
Ще один спосіб прискорити вашу гру — використовувати мобільні дружні шейдери навіть на більш
високопродуктивних платформах. Якщо ви працюєте над мобільною грою, вам обов’язково потрібно використовувати мобільні
шейдери, тому що вони вимагають менше обчислень.
Такі речі, як «Глобальний туман» і «Риб’яче око», — це загальні ефекти зображення, які ви, можливо,
використовували раніше, щоб задати настрій у грі. Такі ефекти повинні бути оптимізовані в максимально можливій мірі, інакше
вони багато беруть на себе і гра починає гальмувати.

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
20
Рисунок 2.5 – Алгоритм обробки ігрового циклу “Unity”

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
21
Для підвищення швидкості обробки даних та плавності гри є різні методи оптимізації та сфери, які дають
найбільше навантаження в грі. Розглянемо їх.
Тіні здатні конкретно навантажити вашу відеокарту і навіть призвести до відчутного падіння кадрової частоти.
Пов'язано це з тим, що популярні методи динамічного затінення можуть зажадати виконати рендер всієї сцени вдруге. Повне
відключення тіней може пошкодити реалізму і глибині картинки, тому краще ставити їх на мінімум. Це дозволить GPU
переправити ресурси на інші завдання, а в деяких іграх різниця взагалі не буде помітна.
Ambient occlusion Популярна техніка динамічного затінення. Вона відповідає за розподіл зовнішньої освітленості -
зокрема, як об'єкти блокують і відбивають світло, яке рухається від джерела. Існує безліч типів AO: SSAO, HBAO +, HDAO і
3DAO - найпоширеніші. Якщо вимкнути цей параметр, то втратите деякі дрібні деталі тіней і відображення кольору від
персонажів і об'єктів, зате зможете наблизитися до гладкого FPS.
Відображення дуже важливі для занурення в ігровий світ. І ніщо так не псує останнє, як дзеркала, які або
відображають нашого підопічного спотворено, або не роблять це зовсім (крім тих випадків, коли гра про вампірів). Як і у випадку
з тінями, динамічні відображення - досить трудомісткий процес, тому їх слід відключити тільки власникам слабких ПК або
шанувальникам швидких мережевих шутерів на кшталт Overwatch.
Суперсемплінг Найпростіша, але при цьому ресурсномістка техніка згладжування. Потрібний інструмент для
власників потужних РС і марна річ для тих, хто хоче трохи знизити графіку в останніх релізах. В такому випадку підійде
протилежний інструмент - субсемплінг. Він дозволяє рендерити ігри в «нерідній» дозвільній здатності і потім робити апскейл
(розтягнути) до нього. При цьому гра стане менш чіткою, але збільшиться продуктивність.
Згладжування Існує багато видів згладжування і їх вплив на картинку і вимогливість до ресурсів дуже
відрізняються. Повністю відключати її варто тільки в дуже рідких випадках, оскільки тоді краї багатьох об'єктів стануть помітно
шорсткими. Тут краще вибрати MSAA. Він буде стосуватись тільки певних частини фрейму, який він буде вибирати на основі
складного алгоритму. MSAA не настільки точний, як деякі інші техніки, але зате має менший вплив на продуктивність.
Анізотропна фільтрація Ця технологія стала своєрідною відповіддю на проблему, яка була дуже поширена в
відеоіграх більше 10 років тому - як побороти «ступінчастість» зображення текстур на поверхнях сильно відхилених щодо
камери. Спочатку була винайдена білінійна, потім трилінійна фільтрація, а потім з'явилася анізотропна. Вона не знижує FPS або
робить це наскільки незначно, що різницю помітить хіба що найбільш спостережливий користувач.
Постобробка Як не важко здогадатися з назви, цим терміном називають ефекти, які накладаються після першого
рендеру і покращують картинку за допомогою невеликих налаштувань або візуальних апгрейдів. Поодинці вони можуть не мати
сильного впливу на продуктивність, але разом вони можуть її підняти при відключенні або використанні на мінімумі. Більшість
цих ефектів спрямовані на створення інтерактивної кіношної естетики. Для цього призначені розмиття руху, глибина різкості,
хроматична аберація і т.д. Тут все залежить від ваших смаків, проте деякі настройки можуть мати відчутний вплив на кількість
FPS.
Глибина різкості розмиває периферію при зумі. Наприклад, при стрільбі з використанням деяких прицілів шутерах
від першої особи. Відключення цієї опції може підвищити частоту кадрів, але тут все залежить від гри, так що краще спочатку
провести тести.
Розмиття в русі робить рівно те, що зазначено в назві - додає розмиття при різких і швидких рухах персонажів.
Воно може стати в нагоді для компенсації при низькому FPS. Якщо ж ви бажаєте твердих 60 FPS, краще цю опцію відключити.
Світлові шахти не роблять великого впливу на продуктивність і виглядають красиво. Те ж саме справедливо по
відношенню до об'ємного туману, але він може серйозно навантажити вашу відеокарту.

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
22
Рисунок 2.6. Порядок будування полігону.
Ви, звісно, можете зробити все навпаки, це лише загальноприйняті правила для побудування полігональної сітки. Можна
створити свій алгоритм обробки полігональної сітки для відеокарти та тоді будувати її по своїм правилам, але це додає величезний
пласт роботи.
Таким чином програма при створенні світу розраховує які об’єкти буде видно гравцеві а які ні, і створює полігональну
сітку лише для тих, які будуть видно. Тобто весь світ всередині порожній, симулюється лише його поверхня.
Фізична симуляція відбувається у певному радіусі від гравця, аби не симулювати увесь світ одразу не викликаючи
додаткових навантажень на систему.

2.3 Інструкція програміста

Тема: 3D гра жанру пригоди «2 parts of me».


Мета: Створити гру на базі операційної системи Windows «Поєднай дві частини себе»
Мова програмування: С#.
Вхідні дані: Дії гравця.
Вихідні дані: Ігровий процес.
Основний клас: Клас ігрового движку Unity – MonoBehaviour.
2.4 Інструкція оператора
Відкрити папку з встановленим на комп’ютер застосуванням. Відкрити в ній файл «GGJ22.exe». Гра одразу почне
завантажувати світ.
Далі за допомогою миші можна оглядатись та розміщувати або ж руйнувати предмети.
Переміщення реалізоване на клавіші WASD. Спринт на клавішу Shift, стрибки на Space та взаємодія на E. Зліва
відображається зібрані предмети та їх кількість а зверху відображається кількість зібраних магічних камінців, як на рисунку 2.6.

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
23
Рисунок 2.6 – Фото з геймплея гри

Рисунок 2.7 – перша локація

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
24
Рисунок 2.8 – перехід на другу локацію

Рисунок 2.9 – Другий рівень

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
25
Рисунок 2.10 – Кінцівка гри

У висновок можна сказати що гравець може: переміщатися, активувати ігрові елементи або підбирати їх та гуляти по
світу. Ціль зібрати свою камінці а ворожі зруйнувати. Можна і не збирати або не руйнувати і від цього залежить чим закінчиться гра.
Чи зможе з’єднатися душа із тілом чи ні.

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
26
3 Організаційно - економічна частина

3.1 Оцінка вартості програмного продукту


Прогрес в економіці, промисловості, науці і техніці, у сфері освіти в даний час багато в чому залежить від масового
впровадження обчислювальної техніки. Будь-який комп'ютер в процесі роботи використовує засоби програмного забезпечення.
Розробка програмних засобів вимагає певних інтелектуальних і трудових витрат, а також обов'язкового використання
комп'ютерної техніки, що визначає особливості розрахунку собівартості програмного продукту.
Оцінка вартості програмування розглядається як оцінка затрат коштів і часу, необхідних для виконання етапів
проекту.
Вартість програмного продукту включає:
- собівартість програмного продукту;
- плановий прибуток.
Оцінка вартості включає розробку приблизної оцінки вартості ресурсів, необхідних для виконання робіт проекту.
Оцінка вартості проекту по суті є оцінкою усіх витрат, необхідних для успішної і повної реалізації проекту.
Планування витрат проекту має здійснюватися для:
• визначення економічної ефективності проекту порівнянням проектних затрат і доходів;
• забезпечення фінансування проекту;
• розподілу ресурсів проекту відповідно до обсягів і змісту робіт;
• оцінювання тривалості робіт, оскільки визначення затрат необхідне для оцінювання часу, і навпаки – оцінювання
часу дає змогу підрахувати затрати;
• забезпечення контролю проекту (порівняння планових витрат із фактичними, визначення відхилень і прийняття
відповідних коригувальних дій);
• підготовки участі компанії в тендерах (фірми, які беруть участь у тендерах з виконання проектів, мають
підрахувати витрати з метою визначення ціни своєї пропозиції, та прогнозування своїх прибутків від виконання проекту).
Якщо проект виконується за контрактом, увага має бути приділена відмінності між оцінкою вартості та ціновою політикою.
Оцінка вартості включає отримання оцінки ймовірних кількісних результатів – скільки коштуватиме для організації, що виконує
проект, розробка конкретного продукту чи послуги. Цінова політика – це комерційне рішення, скільки коштів може заплатити
організація-користувач проекту за виробництво нового продукту чи послуги; тут використовується як один з безлічі чинників і
оцінка вартості.
Методи та засоби оцінки вартості
1 Оцінка на основі аналогів. Оцінка на основі аналогів, або оцінка "зверху – вниз", означає використання фактичної вартості
попередньої аналогічної роботи як оцінки вартості майбутньої роботи. Вона часто використовується для оцінки загальної вартості
проекту, коли про нього є небагато детальної інформації (наприклад, на його ранніх фазах). Оцінка на основі аналогів є однією з
форм висновку експерта. Оцінка на основі аналогів дешевша за інші методи. Вона найбільш надійна, коли (а) попередні проекти
схожі не тільки за формою, а й за змістом, і коли (b) особи (група осіб), що виконують цю роботу, мають необхідний досвід.
2 Параметричне моделювання. Параметричне моделювання включає використання властивостей (параметрів) математичної
моделі для прогнозу вартості проекту. Моделі можуть бути простими (при зведенні житлового будинку квадратний метр житлової
площі коштуватиме певну суму грошей) або складними (одна модель вартості розробки програмного забезпечення використовує
13 різних змінних чинників, по кожному з яких є 5-7 значень).
Як вартість, так і точність параметричних моделей варіюється у великих межах. Найбільш імовірно надійними вони будуть, коли
(а) інформація з архіву, що використовується для розробки моделі, була достатньо точною, (b) використовувані в моделі
параметри є такими, що чітко вимірюються кількісно, і коли (с) модель масштабується – працює однаково добре як для дуже
великого проекту, так і для дуже малого.

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
27
3 Оцінка "знизу – вверх". Метод полягає в оцінці вартості окремих елементів робіт і подальшому підсумовуванні їх для
отримання результату по проекту. Вартість і точність оцінки "знизу вверх" залежать від розміру окремих елементів робіт: чим
дрібніші елементи робіт, тим вищі вартість і точність. Команда управління проектом має оцінити, що важливіше: підвищена
точність або підвищена вартість.
Витрати, пов'язані з реалізацією проекту, можуть бути різними, тому їх визначають за низкою ознак.
За методом віднесення на проектні роботи розрізняють витрати:
– прямі – витрати за робочими пакетами відповідно до структури робіт проекту (наприклад, заробітна плата виконавців роботи,
оплата роботи субпідрядників);
– непрямі – накладні витрати, пов'язані з процесом управління проектом та обслуговуванням виробництва продукту проекту
(наприклад, заробітна плата адміністративного персоналу проекту, орендна плата за офіс, у якому працює проектна команда).
За залежністю від зміни обсягів проектних робіт витрати поділяють на:
– постійні – витрати, величина яких залишається незмінною у разі зміни обсягу виконання проектних робіт (наприклад, витрати,
пов'язані з управлінням, організацією та обслуговуванням проекту);
– змінні – витрати, величина яких залежить від зміни обсягу виконання проектних робіт (наприклад, матеріальні витрати, витрати
на оплату роботи консультантів у проекті).
За призначенням проектні витрати групують на:
– інвестиційні – витрати на придбання основного і оборотного капіталу проекту (наприклад, витрати на придбання землі, купівлю
або оренду технологій та обладнання);
– поточні – витрати на випуск продукції проекту та виконання інших проектних робіт (наприклад, амортизаційні відрахування,
витрати на оплату праці і соціальні нарахування).
За економічним змістом розрізняють такі елементи витрат:
– трудові витрати – це витрати на оплату праці людей, залучених до виконання проекту. У грошовій формі вони обчислюються
множенням кількості запланованих людино-годин на вартість однієї людино- години по кожному виду трудового ресурсу;
– матеріальні витрати – це вартість матеріалів або сировини, закуплених для створення кінцевого продукту проекту. Наприклад,
для проекту проведення навчання персоналу це будуть втрати на придбання навчальної літератури та канцелярського приладдя;
– витрати на придбання, оренду або лізинг обладнання і придбання або оренду виробничих приміщень. Ці витрати враховують
частину вартості устаткування (через амортизаційні відрахування) та приміщень у межах часу їх використання в проекті;
– субконтракта – це витрати, які відображають вартість виконання частини проектних робіт зовнішніми організаціями. До них
відносять оплату праці зовнішніх учасників та матеріалів, які постачаються зовнішніми підрядниками;
– витрати на управління проектом – це виграти на здійснення процесів управління проектом. До них можуть відноситися трудові
або матеріальні виграти, але які не прямо пов'язані з виконанням конкретних проектних робіт, а стосуються всього проекту.
Наприклад, оплата праці менеджера проекту, витрати на утримання управлінських структур проекту (проектного офісу) та
проектних інформаційних систем;
– інші витрати – це витрати, які за своїм економічним змістом не увійшли до названих вище груп. До цієї категорії можуть
відноситися різні наладні та адміністративні витрата, такі як транспортні, складські витрати, страхові або ліцензійні виплата по
проекту.
Структура вартості проекту в розрізі статей витрат звичайно базується на структурі плану рахунків проекту, що представляє
собою декомпозицію витрат від самого верхнього рівня вартості всього проекту до нижнього рівня вартості однієї одиниці
ресурсів. Для конкретного проекту вибирається свій план рахунків або їх сімейство. Як базові варіанти можуть
використовуватися бухгалтерські плани рахунків, плани рахунків управлінського обліку.
3.1.1 Розрахунок часу
Загальний час на створення програми складається з різних компонентів. Структура загального часу на створення
програмного продукту представлена в таблиці 3.1
Таблиця 3.1 – Структура загального часу на створення програмного продукту.

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
28

Позначення часу даного етапу Зміст етапу
етапу

1 ТПО Підготовка опису завдання

2 ТО Опис завдання

3 ТА Розробка алгоритмів

4 ТБС Розробка блок-схеми алгоритмів

5 ТПІ Проектування інтерфейсу

6 ТН Написання програми (кодування)

7 ТВТ Відладка і тестування програми

Оформлення документації, інструкції


8 ТД
користувачеві, записки пояснення

Час розраховується в людино-годинах, причому ТПО та ТД береться по фактично відпрацьованому часу, а час
останніх етапів визначається розрахунковий по умовному числу команд Q.
Умовне число команд Q визначається за формулою
Q= q ⋅ з, (3.1)

де q - коефіцієнт, що враховує умовне число команд залежно від типу завдання. Значення коефіцієнта q вибирається
з таблиці 3.2.
Значення коефіцієнта з вибирається з таблиці 3.3.
Таблиця 3.2 – Значення коефіцієнта q.

Тип завдання Значення коефіцієнта q

Завдання обліку 1400…1500

Завдання оперативного управління 1500…1700

Завдання планування 3000…3500

Багатоваріантні завдання 4500…5000

Комплексні завдання 5000…5500

Для даного завдання приймається коефіцієнт q = 3050.


Програмні продукти за мірою новизни можуть бути віднесені до однієї з чотирьох груп:
- група А - розробка принципово нових завдань;
- група Б - розробка оригінальних програм;
- група В - розробка програм з використанням типових рішень;
- група Г - разове типове завдання.
Для даного завдання міра новизни: В
За складністю програмні продукти можуть бути віднесені до однієї з трьох груп:
- 1 - алгоритми оптимізації і моделювання систем;
- 2 - завдання обліку, звітності і статистики;
- 3 - стандартні алгоритми.
Дане завдання може бути віднесено до першої групи складності низького рівня.
Коефіцієнт ( з ) визначається з таблиці 3.3 в залежності від складності і міри новизни.

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
29
Таблиця 3.3 – Значення коефіцієнта з.

Мова Група Міра новизни

програмування складності А Б В Г

1 1,38 1,26 1,15 0,69

Високого рівня 2 1,30 1,19 1,08 0,65

3 1,20 1,10 1,00 0,60

1 1,58 1,45 1,32 0,79

Низького рівня 2 1,49 1,37 1,24 0,74

3 1,38 1,26 1,15 0,69

Для даного завдання коефіцієнт з = 1,15.


За формулою 3.1 визначається умовне число команд Q.
Q = 3050 ⋅ 1,15 = 3 507,5 чол / годин.

Визначається час, витрачений на кожен етап створення програмного продукту:


- ТПО (час на підготовку опису завдання), береться по факту і для даного завдання
ТПО = 40 чол / годин.
- ТО ( час на опис завдання ) визначається за формулою

ТО = Q ⋅ B / (50 ⋅ K), (3.2)

де В - коефіцієнт обліку змін завдання. Коефіцієнт В залежно від складності завдання і числа змін вибирається в
інтервалі від 1,2 до 1,5. Для даного завдання В = 1,4
К - коефіцієнт, що враховує кваліфікацію програміста. Значення коефіцієнта вибирається з таблиці 3.4.

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
30
Таблиця 3.4 – Значення коефіцієнта К.

Стаж програміста Значення коефіцієнта К

до 2-х років 0,8

від 2 до 3 років 1,0

від 3 до 5 років 1,1…1,2

від 5 до 10 років 1,2…1,3

понад 10 років 1,3…1,5

В даному випадку коефіцієнт К = 0,8.


За формулою 3.2 підраховується час на опис завдання.
ТО = 3507,5 ⋅ 1,4 / (50 ⋅ 0,8) = 122,8 [чол. / годин].

- ТА (час на розробку алгоритмів) розраховується за формулою


ТА = Q / (50 * K), (3.3)
За формулою 3.3 підраховується час на розробку алгоритмів.
ТА = 3507,5 / (50 ⋅ 0,8) = 87,6 [чол. / годин].
А
- ТБС (час на розробку блок-схеми) визначається аналогічно Т за формулою 3.3 і складає
ТА = 3507,5 / (50 ⋅ 0,8) = 87,6 [чол. / годин].

- ТН (час написання програми на мові програмування) визначається за формулою


ТН = Q ⋅ 1,5 / (50 ⋅ K), (3.4)

За формулою 3.4 підраховується час написання програми на мові програмування.


ТН = 3507,5 ⋅ 1,5 / (50 ⋅ 0,8) = 131,5 [чол. / годин].

- ТПІ (час на проектування інтерфейсу) визначається за формулою

ТПІ = Q / 50, (3.5)

За формулою 3.5 підраховується час на проектування інтерфейсу програми.


ТПІ = 3507,5 / 50= 70,15 [чол. / годин].

- ТВТ (час відладки і тестування програми) визначається за формулою

ТВТ = Q ⋅ 4,2 / (50 ⋅ К), (3.6)

За формулою 3.6 підраховується час відладки і тестування програми.

ТВТ = 3507,5 ⋅4,2 / (50 ⋅ 0,8) = 368,2 [чол. / годин].

- ТД (час на оформлення документації), береться по факту і для даного завдання


ТД = 40 чол / годин.
Підраховується загальний час на створення програмного продукту за формулою
Т = ТПО + ТО + ТА + ТБС + ТН + ТПІ + ТВТ + ТД, (3.7)
Т = 40+122,8+87,6+87,6+131,5+70,15+368,2+40=947,85 [чол. / годин].

або спрощений варіант


Т = ТПІ + ТВТ + ТД, (3.7.1)
Т = 70,15+368,2+40 = 478,35[чол. / годин].

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
31
3.1.2 Розрахунок заробітної плати виконавця робіт із створення програмного продукту

Основна ЗП визначається за формулою

ЗПосн.=(ЗП 1р ⋅ Кт ⋅ Т)/(Чр ⋅ tp.д.)⋅(1 + П/100), (3.8)

де 3П 1р - місячна зарплата 1-го розряду, грн.;


Кт - тарифний коефіцієнт, відповідний розряду тарифної сітки, за яким працює виконавець;
Т - загальний час на створення програмного продукту, чол. / годин;
Чр - кількість робочих днів в місяць;
tр.д. - тривалість робочого дня в годинах;
П - відсоток премії.
Для даного завдання:
- 3П 1р = 450,00 грн.;
- виконавець має 14 розряд;
- для 14 розряду тарифний коефіцієнт Кт = 3,36;
- загальний час створення програмного продукту Т = 947,8 чол. / годин;
- кількість робочих днів Чр = 118,4;
- тривалість робочого дня tр.д. = 8 годин;
- відсоток премії П=15%.
Таким чином, визначаємо основну заробітну плату виконавця робіт із створення програмного продукту.
ЗП осн. = (450,00⋅3,36⋅947,8)/(118⋅8)⋅(1+15/100)=111 730,55 [грн].

Додаткова заробітна плата береться у розмірі 15 % від основної і розраховується за формулою


ЗП дод. = ЗПосн. ⋅ 15 / 100, (3.9)

ЗП дод. = 111 730,55 ⋅ 15 / 100=16759,58[грн].

Загальна заробітна плата розраховується за формулою


ЗПзагальна = ЗПосн + ЗПдод., (3.10)
ЗПзагальна =111 730,55 + 16759,58= 128490,13[грн].
3.1.3 Розрахунок нарахувань на заробітну плату (єдиного соціального внеску)
Єдиний соціальний внесок нараховується на заробітну плату за формулою 3.11 і складає 22 % від загальної заробітної
плати
ЄСВ = ЗПзагальна ⋅ 35,6 / 100, (3.11)

ЄСВ = 128490,13 ⋅ 22 / 100 = 28267,82[грн].

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
32
3.1.4 Розрахунок витрат на збереження та експлуатацію ПЕОМ, що відносяться до даного програмного
продукту
Витрати на збереження та експлуатацію ПЕОМ визначаються у розмірі 130% від основної заробітної плати
працівників, що забезпечують функціонування ПЕОМ.
До таких витрат відносяться витрати на:
- основну заробітну плату працівників, що забезпечують функціонування ПЕОМ (інженер-електронник; системний
програміст; оператор);
- основна ЗП адміністративного і допоміжного персоналу;
- амортизаційні відрахування;
- витрати на електричну енергію;
- витрати на матеріали (до їх числа входять диски, картриджі і папір для принтерів та інше);
- витрати на профілактику ПЕОМ з периферією;
- витрати на опалювання виробничих площ;
- витрати на обслуговування виробничих площ;
- інші виробничі витрати.
Розрахунок витрат на збереження та експлуатацію ПЕОМ, що відносяться до даного програмного продукту за
формулою
В зб. експл. = ЗП осн. ⋅ 130 / 100, (3.12)

В зб. експл. = 128490,13 ⋅ 130 / 100 = 167037,169 [грн].

3.2 Розрахунок собівартості програмного продукту


У собівартість програмного продукту входять наступні елементи:
- основна заробітна плата виконавця робіт із створення програмного продукту;
- додаткова заробітна плата виконавця робіт із створення програмного продукту;
- нарахування на заробітну плату (єдиний соціальний внесок);
- витрати на збереження та експлуатацію ПЕОМ, що відносяться до даного програмного продукту;
- інші витрати.
Інші витрати складають 10% від суми перших чотирьох елементів і розраховуються за формулою
І.вит.=(ЗП осн. + ЗП дод. + ЄСВ + В зб. експл.) ⋅10 / 100 (3.13)

І.вит.= (111 730,55+ 16759,58 + 28267,82+ 167037,169) 10 / 100 = 32379,51 [грн].


Визначається собівартість програмного продукту за формулою
Сп.п. = ЗП осн. + ЗП дод. + ЄСВ + В зб.експл. + І.вит. (3.14)
Сп.п. = 111 730,55+ 16759,58 + 28267,82+ 167037,169 + 32379,51 = 356174,63 [грн].
Структура собівартості програмного продукту відображається в таблиці 3.5.
Таблиця 3.5 – Структура собівартості програмного продукту

Питома
Сума
Елементи структури вага
грн.
%

1 Основна заробітна плата виконавця 111730,55 31

2 Додаткова заробітна плата виконавця 16759,58 5

3 Нарахування на заробітну плату (ЄСВ) 28267,82 8

4 Витрати збереження та експлуатацію ПП 167037,169 46

5 Інші витрати 32379,51 9

Собівартість програмного продукту 356174,63 100

3.3 Розрахунок ціни програмного продукту

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
33
Ціна програмного продукту складається з декількох компонентів і розраховуються за формулою
Ц = Сп.п. + П + ПДВ, (3.15)
де Сп.п.- собівартість програмного продукту, грн.;
П - плановий прибуток, грн.;
ПДВ - податок на додану вартість, грн.
П – прибуток складає 40% від повної собівартості програмного продукту і розраховуються за формулою
П = Сп.п. ⋅ 40 / 100 (3.16)

П = 356174,63⋅40 / 100 = 142469,85[грн].

ПДВ - податок на додану вартість, який береться у розмірі 20% від суми собівартості і прибутку розраховуються за
формулою
ПДВ = (Сп.п. + П) ⋅20 / 100, (3.17)

ПДВ = (356174,63+142469,85) ⋅ 20 /100 = 99728,8964[грн].

За формулою 3.15 визначається ціна програмного продукту.


Ц = 356174,63+142469,85+99728,8964= 598 373,37[грн].

3.4 Зведена таблиця показників


Результати розрахунків відображаються в підсумкової таблиці 3.6.
Таблиця 3.6 – Результати розрахунків

Сума,
Найменування показника
грн.

Собівартість програмного продукту 356174,63

Прибуток 142469,85

ПДВ 99728,8964

Ціна програмного продукту 598 373,37

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
34
4. Охорона праці та навколишнього середовища
4.1 Загальні питання охорони праці та навколишнього середовища.
З 1991 в Україні починається формування законодавчої бази з питань охорони праці. Як відомо, завдання охорони
праці – звести до мінімуму імовірність ураження та захворювання робітника з одночасним забезпеченням нормальних та здорових
умов праці при максимальній його продуктивності. Серед правової документації з питань охорони праці слід зазначити:
Конституцію України, Закон України «Про охорону праці», Кодекс законів про працю України, Закон України «Про обов`язкове
соціальне страхування», Закон України «Про санітарно-епідемічне благополуччя населення», Закон України «Про пожарну
безпеку».
Охорона праці – це система правових, соціально-економічних, організаційно-технічних, санітарно-гігієнічних,
лікувально-профілактичних заходів та засобів, які направлені на збереження життя, здоров‫ۥ‬я та працездатності у процесі трудової
діяльності.
Метою охорони праці є забезпечення безпечних і комфортних умов діяльності людини й мінімально припустимих
рівнів впливу на людину й середовище.
25 листопада 1992 року був прийнятий Закон України «Про охорону праці». Цей закон визначає основні положення з
реалізації конституційного права громадян на працю, охорону праці, охорону їхнього життя й здоров’я. Закон з охорони праці
регулює взаємини між працюючими й адміністрацією з питань охорони праці. Цей закон поширюється на всі види діяльності.
Відділ маркетингу, у якому проводилась робота розташована на другому поверсі двоповерхового будинку. Вона має
розмір 5м х 4м х 3м, площею 20м2 та об'ємом 80м3. Обслуговування приладів розраховано на 3 робочих місця оператора ЕОМ. На
одного працюючого за відео терміналом [16] площа дорівнює 6м2 об'єм дорівнює 20м2 та не менш 4,5м2 площі і 15м3 об'єму на
одне робоче місце для робітників, які не використовують ЕОМ . Таким чином, відділ відповідає санітарним нормам проектування
підприємств для даного виду робіт.
Охорона праці є обов’язковим елементом організації будь-якого підприємства. Охорона праці – це система правових,
соціально-економічних, організаційно-технічних, санітарно-гігієнічних і лікувально-профілактичних засобів і заходів,
спрямованих на збереження здоров’я і працездатності людини. Законодавча база охорони праці налічує ряд законів, основними з
яких є Закон про охорону праці, Кодекс законів про працю України, Закон України „Про загальнообов’язкове державне
соціальне страхування від нещасного випадку на виробництві та професійного захворювання, які спричинили втрату
працездатності“, „Про охорону здоров’я“, „Про пожежну безпеку“, „Про забезпечення санітарного та епідеміологічного
благополуччя населення“ та прийнятих відповідно до них нормативно-правових актів.
Закон України „Про охорону праці“ , що визначає основні положення по реалізації конституційного права громадян
на охорону їхнього життя і здоров’я в процесі трудової діяльності, регулює взаємини між працівником і адміністрацією з питань
охорони праці. Закон поширюється на всі види діяльності, крім цього, охорона праці базується на нормативних актах.
Дія Закону поширюється на всіх юридичних та фізичних осіб, які відповідно до законодавства використовують
найману працю, та на всіх працівників. Наведені правові норми регламентують організацію роботи в галузі охорони праці на
підприємствах (в установах), планування і фінансування заходів щодо охорони праці; визначають структуру служби щодо
охороні праці; передбачають організацію нагляду і контролю за дотриманням правил охорони праці; регламентують порядок
розслідування й обліку нещасних випадків; компенсації матеріального збитку; відповідальності за порушення вимог охорони
праці.
Державна політика в галузі охорони праці спрямована на створення належних, безпечних і здорових умов праці,
запобігання нещасних випадків та професійних захворювань. Державна політика в галузі охорони праці базується на принципах:
- пріоритету життя і здоров’я працівників, повної відповідальності роботодавця за створення належних, безпечних і
здорових умов праці; підвищення рівня промислової безпеки шляхом забезпечення суцільного технічного контролю за станом
виробництв, технологій та продукції, а також сприяння підприємствам у створенні безпечних та нешкідливих умов праці;
комплексного розв’язання завдань охорони праці на основі загальнодержавних, галузевих, регіональних програм з цього питання
та з

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
35
- урахуванням інших напрямів економічної і соціальної політики, досягнень у галузі науки і техніки та охорони
довкілля.
Питання охорони праці в даному розділі розглядаються стосовно працівників офісу. У приміщенні працюють
робітники, які виконують роботу з використанням ПЕОМ. Тому передбачаються умови праці з урахуванням санітарних норм
2
НПАОП 0.00-1.28 – 10, тобто норма площі на одного працівника не менш 6 (шести) м .

На працівників впливають такі небезпечні виробничі фактори, як неналежне освітлення, не враховуються іноді
ергономічні характеристики робочого місця, відсутність вентиляції, наявність пилу в робочих приміщеннях, наявність шуму та
неіонізованих випромінювань.
4.2 Управління охороною праці
Відповідно до статті 17 Закону України «Про охорону праці», власник підприємства зобов`язаний створити у
кожному структурному підрозділі та на робочому місці умови праці відповідно до вимог нормативних актів, а також забезпечити
дотримання прав робітників, які гарантуються законодавством. Урегулювання питань охорони праці між власником підприємства
та працівниками оговорено колективним договором, в якому вказані права та зобов`язання обох сторін, перелік соціальних
гарантій у сфері охорони праці та перелік заходів щодо досягнення нормативів безпеки, попередження виробничого травматизму
та професійних захворювань .
Оскільки на підприємстві ВАТ КФТП більше ніж 1100 робітників, то є необхідність у створенні служби з охорони
праці . Тож відповідальним за охорону праці є відділ з охорони праці , котрий очолює інженер з охорони праці.
Задачами головного інженера, як відповідального за охорону праці на підприємстві є:
1) організація та координація робіт з охорони праці;
2) удосконалення організації робіт з охорони праці;
3) контроль за станом охорони праці та функціонуванням системи управління охороною праці;
4) аналіз стану охорони праці, організація розроблення планів з удосконалення умов та охорони праці;
5) впровадження та удосконалення системи управління охороною праці, передових розробок з охорони праці;
6) організація навчання працівників безпечним методам праці;
7) організація пропаганди та інформованості робітників.
У відповідності ст. 13 роботодавець зобов’язаний створити на робочому місці в кожному структурному підрозділі
умови праці відповідно до нормативно правових актів, а також забезпечити додержання вимог законодавства щодо прав
працівників у галузі охорони праці. З цією метою він забезпечує функціонування системи управління охороною праці, а саме:
створює відповідні служби і призначає посадових осіб, які забезпечують вирішення конкретних питань охорони
праці, затверджує інструкції про їх обов’язки, права та відповідальність за виконання покладених на них функцій, а також
контролює їх дотримання;
розробляє за участю сторін колективного договору і реалізує комплексні заходи для досягнення встановлених
нормативів та підвищення існуючого рівня охорони праці;
забезпечує виконання необхідних профілактичних заходів відповідно до обставин, що змінюються;
впроваджує прогресивні технології, досягнення науки і техніки, засоби механізації та автоматизації виробництва,
вимоги ергономіки, позитивний досвід з охорони праці тощо;
забезпечує належне утримання будівель і споруд, виробничого обладнання та устаткування, моніторинг за їх
технічним станом;
забезпечує усунення причин, що призводять до нещасних випадків, професійних захворювань, та здійснення
профілактичних заходів, визначених комісіями за підсумками розслідування цих причин;
організовує проведення аудиту охорони праці.
З цією метою роботодавець забезпечує функціонування системи керування охороною праці, для чого в офісі:

створює службу з охорони праці і призначає посадових осіб;

розробляє і реалізує комплексні заходи для досягнення встановлених нормативів з охороні праці;

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
36

забезпечує усунення причин, що викликали нещасні випадки;

організує проведення досліджень умов праці, атестацію робочих місць на відповідність нормативним актам про охорону
праці;

розробляє і затверджує положення, інструкції, інші нормативні акти з охорони праці, що діють в офісі;

здійснює постійний контроль за дотриманням працівниками правил техніки безпеки з обчислювальною технікою;

організовує пропаганду безпечних методів праці.
Підприємство має наступну організаційну структуру (табл. 4.1):
Таблиця 4.1 – Структура підприємства та його штатний розклад

Номер за Структурні Кількість Примітка


журналом підрозділи працівників,
групи взагалі/у відділі

1. Директор, заступник директора, 30/6 Фахівець із


технічний відділ, охорони праці
відділ реалізації залучається із
продукції, іншої організації
бухгалтерія

4.3 Організація безпечних умов праці


Робоче місце – це простір, оснащений необхідними технічними засобами (відображення інформації, органами
управління тощо).
При виникненні аварійної ситуації ПЕОМ негайно відключається від електричної мережі.
Для забезпечення електробезпеки відповідно до нормативних документів використовують систему організаційних і
технічних заходів та засобів, згідно з ПУЭ [6]. Приміщення, де розташовані ПЕОМ, по небезпечності ураження людини
електричним струмом є приміщеннями без підвищеної небезпеки. Незважаючи на це, використовують технічні і організаційні
заходи захисту користувачів ПЕОМ від ураження електричним струмом. До технічних заходів належить порядок підготовки
робочого місця, який вимагає при цьому зняття напруги, необхідно вжити у вказаному порядку таких технічних заходів:

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

перевірка відсутності напруги на струмовводах;

заземлення обладнання для захисту людей від ураження електричним струмом;

занулення або захисне відключення обладнання;

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

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
37
• екранування джерела випромінювання;
• захист робочого місця від випромінювання;
• екранування персоналу шляхом використання індивідуальних засобів захисту;
• всі екрани повинні ретельно заземлятися.
Працівники офісу проходять періодичні медичні огляди з періодичністю один раз у два роки.
Керівник підприємства повинен визначити обов’язки посадових осіб щодо забезпечення пожежної безпеки,
призначити відповідальних за пожежну безпеку окремих будівель, споруд, приміщень, дільниць, технологічного та інженерного
устаткування, а також за утримання й експлуатацію засобів протипожежного захисту. Обов’язки щодо забезпечення пожежної
безпеки, утримання та експлуатації засобів протипожежного захисту передбачаються у посадових інструкціях, обов’язках,
положеннях про підрозділ.
4.4 Охорона навколишнього середовища
Охорона навколишнього середовища – сукупність міжнародних, державних та регіональних правових актів,
інструкцій та стандартів, які визначають загальні юридичні вимоги до кожного окремого забрудника та які забезпечують його
зацікавленість у виконанні цих вимог, конкретних природоохоронних заходів по втіленню в життя цих вимог.
Закон України "Про охорону навколишнього природного середовища", прийнятий 25 червня 1991 року, визначає
правові, економічні, соціальні основи охорони навколишнього середовища. Завдання закону полягає в регулюванні відносин в
області охорони природи, використанні й відтворенні природних ресурсів, забезпеченні екологічної безпеки, попередженні й
ліквідації наслідків негативного впливу на навколишнє середовище господарської й іншої діяльності людини, збереження
природних ресурсів, генетичного фонду нації, ландшафтів і інших природних об'єктів .
Серед шляхів стабілізації екологічної безпеки можна виділити наступні:
вирішити проблему економного використання та збереження сировини, енергоресурсів;
контролювати темпи збільшення кількості населення планети;
у всіх галузях господарювання дотримуватися екологічно обснованих нормативів виробництва;
повністю знешкоджувати, перероблювати та повторно використовувати всі відходи виробництва, життєдіяльності та
вторинної сировини;
зберігати рівновагу в екосистемі (функціональну єдність організмів та навколишнього середовища) у містах
проживання та на усій планеті в цілому;
створювати природний заповідний фонд кожної країни та планети Земля;
удосконалювати та контролювати правову базу в справі охорони навколишнього середовища у кожній окремій країні
та на всій Землі;
розширяти міжнародне співробітництво.
Головними відходами роботи відділу є відходи споживання. Відходи споживання – це вироби та матеріали, що
втратили повністю або частково свої споживчі властивості в результаті фізичного або морального зносу та життєдіяльності
людей. Серед відходів споживання, як правило, виділяють житлово-комунальні, вагому частку яких складають тверді побутові
відходи (ТБВ).
Загальними тенденціями з ліквідації та переробки ТБВ є складування на свалках та полігонах - 66%, спалювання -
30%, компостирування - 3%, хімічні способи - 1%.
При роботі над проектом і експериментальною частиною дослідником використані матеріали вжиті в мінімальних
кількостях, які не є джерелом забруднення навколишнього середовища.
Стан навколишнього середовища в Україні викликає серйозне занепокоєння, оскільки є результатом економічних
помилок та екологічних прорахунків, оскільки уже неможливе самовідновлення і самоочищення природного середовища, іде
активна деградація і небезпечне знищення запасів природних ресурсів.
У зв’язку з цим сформульовані основні шляхи виходу України із тяжкої екологічної кризи:

розробка комплексних програм з охорони природи на основі моніторингових спостережень;

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
38

збільшення витрат на охорону природи та прискорення темпів будівництва природоохоронних об’єктів

заборона відступу від проектів, що наносять шкоду навколишньому середовищу тощо.
Оскільки, в основному, джерелами забруднення навколишнього середовища є технологічні процеси та недосконале
очищення відходів від цих процесів, основним завданням є розробка безвідходних або маловідходних технологій, використання
сучасних транспортних засобів, впровадження організаційних заходів з екологічної безпеки, таких, наприклад, як плата за викиди
в атмосферу та гідросферу, продаж квот на викиди в навколишнє середовище, раціональне розміщення підприємств, з
урахуванням щільності населення тощо.
На сучасному етапі при масовому використанні моніторів і комп’ютерів не можна не враховувати також їх вплив на
навколишнє середовище на всіх стадіях: при виготовленні, експлуатації й після закінчення їхнього терміну служби. Сьогодні
діють екологічні стандарти, які визначають вимоги до виробництва й матеріалів, використовуваним у конструкції приладів. Вони
не повинні містити фреонів, хлоридів, бромідів (ВS 7750) ТСО 95.
У стандартах ТСО 99 закладено обмеження з кадмію у світлочутливому шарі екрану дисплея та ртуті в батарейках.
Апарати, тара й документація повинні проходити нетоксичну переробку після використання.
Робота на ПК типу ІВМ РС/АТ не робить шкідливого впливу на навколишнє середовище. Після витікання терміну
служби він повністю підлягає вторинній переробці, а також апарати, тара, документація повинні допускати нетоксичну
переробку після використання.
Офіс за специфікою роботи, крім відпрацьованих моніторів, має відходи люмінесцентних ламп, побутові відходи та
відходи паперу. Відпрацьовані лампи люмінесцентні складують у відведених місцях та направляють на спеціалізовану переробку
від ртуті. Папір подрібнюють і відправляють на утилізацію. Побутові відходи комунальні служби вивозять на полігон.

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
39
Висновок
В ході написання курсової роботи було створено програму на тему : «3D гра жанру пригоди «2 parts of me»», який
задовольняє поставлені задачі та має змогу розширятися та змінюватись.
Я досліди та проаналізував різні існуючи жанри ігор та обрав той жанр, в якому я розробив програмний продукт.
Розробив план конструювання та впевнився у фінансовій вигідності розробки, порахувавши витрати та час розробки.
Дослідив ігровий рушій та його можливості для ефективної роботи з ним. Зрозумів основні методи розробки на мові
сі-шарп на основі рушія Unity.
В самій грі було реалізовано такі функціональні можливості як: взаємодія із різними інтерактивними предметами;
можливість переміщення гравця за допомогою клавіш WASD; Обертання камери навколо ігрового персонажа.
Усі ресурси потрібні для роботи програми не залежать від зовнішнього зв’язку, таким чином можна запускати гру у
будь якому місці незалежно від зовнішніх факторів.
Були вивчені нові методи розробки програмного забезпечення та оптимізації коду. Задля реалізації реакції інтерфейсу
були створені окремі класи для кожної під задачі та вивчений новий ігровий движок для розробки ігор.
Було застосовано такі технології як:
- .NET Framework 3.0.
- Мова програмування С#.
- Ігровий рушій Unity.
Були проаналізовані методи побудови UI (User Interface) для того аби побудувати максимально простий та адаптивний
дизайн для мобільного додатку та технології шифрування, генерування випадкових чисел та подібне.
В результаті була створена програма з урахуванням принципів розробки адаптивних додатків для операційної
системи Windows.

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
40
Список літератури та використаних джерел
1. Закон України „Про охорону праці“ із змінами та доповненнями, 2002. 2. Законодавство України про
охорону праці.
3. ДНАОП 0.03-3.01 – 71. Санитарные норми проектирования промышленных предприятий (СН 245 – 71),
4. ГОСГ 12.1.005-88 ССБТ. Общие санитарно-гигиенические требования к воздуху рабочей зоны. – Введен 01.01.89.
5. Долин ПА. Справочник по технике безопасности . М: Энергоатомиздат, 1984.
6. СНиП 2.04.05 – 92. Нормы проектирования. Отопление, вентиляция и кондиционирование воздуха. – М.:
Стройиздат, 1992.
7. ДБН В. 2.5-28 – 2006 Природне і штучне освітлення – К.: Мінбуд України, 2006.
8. ГОСТ 12.1.003 – 83. ССБТ. Шум. Общие требования безопасности. – Введен 01.07.89.
9. ДСанПіН 3.3.2.007 – 1998. Державні санітарні правила і норми роботи з візуальними дисплейними терміналами
електронно-обчислювальних машин. – Київ, 1998.
10. ГОСТ 17.1.3.03 – 77. Правила выбора и оценка качества источников централизованного хозяйственно-питьевого
водоснабжения.
11. НПАОП 0.00-1.28 – 10. Правила охорони праці при експлуатації електронно-обчислювальних машин. – Київ,
2010.
12.НПАОП 40.1-1.21 – 98 „Правила безпечної експлуатації електроустановок споживачів“.
13.НАПБ Б. 07.005 – 86. Визначення категорії будівель і споруд по вибухопожежній і пожежній безпеці. – К.
Будіздат, 1987.
14. ДБН В 1.1-7 – 02. – „Захист від пожежі. Пожежна безпека об’єктів будівництва“. К.: 2003. – 41с.
15. ГОСТ 12.1.004-91. ССБТ. Пожарная безопасность. Общие требования. – Введен 01.07.91.
16. Закон України „Про охорону навколишнього середовища“ от 25.06.91. 17. ДСТУ. Система управління
навколишнього середовища. ISО 14001 – 97 – К.: Держстандарт України, 1997.
18. НПАОП 40.1-1.32 – 01 „Правила будови електроустановок. Електрообладнання спеціальних установок“.
19. В.В. Березуцький. Основи охорони праці. – Харків, Факт, 2005, с. 280.

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
41
20. Мова програмування С# [Електронний ресурс] — Режим доступу до ресурсу: https://ru.wikipedia.org/wiki/C_Sharp
21. Анонімні функції [Електронний ресурс] — Режим доступу до ресурсу:
https://ru.wikipedia.org/wiki/Анонимная_функция
22. Інформація про LINQ [Електронний ресурс] — Режим доступу до ресурсу:
https://ru.wikipedia.org/wiki/Language_Integrated_Query
23. Інформація про настільні ігри [Електронний ресурс] — Режим доступу до ресурсу:
https://ru.wikipedia.org/wiki/Настольная_игра
24. Інформація про Microsoft Visual Studio [Електронний ресурс] — Режим доступу до ресурсу:
https://visualstudio.microsoft.com/ru/
25. Інформація про гру «Death Stranding» [Електронний ресурс] — Режим доступу до ресурсу:
https://store.steampowered.com/app/1850570/DEATH_STRANDING_DIRECTO
RS_CUT/
26. Інформація про гру «Scarf» [Електронний ресурс] — Режим доступу до ресурсу:
https://store.steampowered.com/app/645320/SCARF/?l=russian
27. Unity [Електронний ресурс] — Режим доступу до ресурсу:
https://ru.wikipedia.org/wiki/Unity_(игровой_движок)
28. https://uk.wikipedia.org/wiki/Відеогра#Історія
29. https://uk.wikipedia.org/wiki/Microsoft_Visual_Studio

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
42
Додаток
Код класів
ManagerGame.cs

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.SceneManagement;

public enum NameScene

Intro,

IntroCine,

Level1,

Level2,

EndGame

public class ManagerGame : MonoBehaviour

[SerializeField] private GameData gameData;

[SerializeField] private Activator[] stones;

[SerializeField] private Animator animWhite;

[SerializeField] private GameObject persObj;

[SerializeField] private GameObject counterUIHuman;

[SerializeField] private GameObject counterUIGost;

[SerializeField] private Transform startSpawnPoint;

[SerializeField] private Material humanMat;

[SerializeField] private Material gostMat;

[SerializeField] private Renderer persRend;

private void Start()

Cursor.visible = false;

if (SceneManager.GetActiveScene().buildIndex == (int)(NameScene.Level1))

gameData.Reset();

PlayHuman();

else if (SceneManager.GetActiveScene().buildIndex == (int)(NameScene.Level2))

PlayGost();

public void PlayHuman()

persRend.material = humanMat;

persObj.GetComponent<Human>().isWorkingScript = true;

persObj.GetComponent<Gost>().isWorkingScript = false;

persObj.GetComponent<Human>().enabled = true;

persObj.GetComponent<Gost>().enabled = false;

persObj.GetComponent<PlayerControl>().velocity.y = 0;

StartCoroutine(SetPos(startSpawnPoint.position));

persObj.transform.position = startSpawnPoint.position;

counterUIHuman.SetActive(true);

counterUIGost.SetActive(false);

animWhite.SetTrigger("FromWhite");

foreach (Activator obj in stones)

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
43
if (obj.tag == "HumanStone")

obj.helpText = "Взять";

else if (obj.tag == "GostStone")

obj.helpText = "Разрушить";

obj.helpSecondText = "Достаточно";

public void PlayGost()

persRend.material = gostMat;

persObj.GetComponent<Human>().isWorkingScript = false;

persObj.GetComponent<Gost>().isWorkingScript = true;

persObj.GetComponent<Human>().enabled = false;

persObj.GetComponent<Gost>().enabled = true;

persObj.GetComponent<PlayerControl>().velocity.y = 0;

StartCoroutine(SetPos(startSpawnPoint.position));

persObj.transform.position = startSpawnPoint.position;

counterUIHuman.SetActive(false);

counterUIGost.SetActive(true);

animWhite.SetTrigger("FromWhite");

foreach (Activator obj in stones)

if (obj.tag == "HumanStone")

obj.helpText = "Разрушить";

else if (obj.tag == "GostStone")

obj.helpText = "Взять";

obj.helpSecondText = "Достаточно";

private IEnumerator SetPos(Vector3 vec)

persObj.GetComponent<PlayerControl>().controller.enabled = false;

yield return null;

persObj.GetComponent<PlayerControl>().controller.transform.position = vec;

yield return null;

persObj.GetComponent<PlayerControl>().controller.enabled = true;

public void LoadLevel(NameScene nameScene)

if (nameScene == NameScene.Intro)

gameData.Reset();

SceneManager.LoadScene((int)nameScene);

Activator.cs

using System.Collections;

using System.Collections.Generic;

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
44
using UnityEngine;

public class Activator : MonoBehaviour

[SerializeField] private AudioSource sfxActivate;

public string helpText = "Взаимодействовать";

public string helpSecondText = "Непонятно";

public virtual void Activate(bool isDestroy = true)

if (sfxActivate.isPlaying)

sfxActivate.Stop();

sfxActivate.Play();

else

sfxActivate.Play();

if (isDestroy)

Destroy(gameObject);

Bell.cs

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class Bell : Activator

[SerializeField] private Animator animGate;

[SerializeField] private Animator animBell;

private bool isOpened = false;

public override void Activate(bool isDestroy = true)

base.Activate(false);

animBell.SetTrigger("Bell");

if (isOpened) return;

isOpened = true;

StartCoroutine(StartOpen());

private IEnumerator StartOpen()

yield return new WaitForSeconds(2);

animGate.SetTrigger("Open");

EndGame.cs
using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using TMPro;

using UnityEngine.SceneManagement;

public class EndGame : MonoBehaviour

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
45
[SerializeField] private TMP_Text hCollect;

[SerializeField] private TMP_Text hDestroy;

[SerializeField] private TMP_Text gCollect;

[SerializeField] private TMP_Text gDestroy;

[SerializeField] private GameData gameData;

[SerializeField] private TMP_Text hResText;

[SerializeField] private TMP_Text gResText;

[SerializeField] private TMP_Text resGameText;

private int hRes = 0;

private int gRes = 0;

void Start()

Cursor.visible = true;

hCollect.text = gameData.countHumanStoneCollect + " Собрано";

hDestroy.text = gameData.countHumanStoneDamage + " Pазрушено!";

gCollect.text = gameData.countGostStoneCollect + " Собрано";

gDestroy.text = gameData.countGostStoneDamage + " Pазрушено!";

hRes = gameData.countHumanStoneCollect - gameData.countHumanStoneDamage;

gRes = gameData.countGostStoneCollect - gameData.countGostStoneDamage;

hResText.text = "Итог " + hRes;

gResText.text = "Итог " + gRes;

if (hRes == 0 && gRes == 0)

resGameText.text = "Душа и тело разрушены...";

else if (hRes > gRes)

resGameText.text = "Душа осталась без тела и разрушилась.";

else if (hRes < gRes)

resGameText.text = "Тело осталось без души и разрушилось.";

else if (hRes > 0 && gRes > 0 && hRes == gRes)

resGameText.text = "Тело с душой снова восоединились.\nEnd of duality!";

else

resGameText.text = "Душа и тело разрушены...";

StartCoroutine(Restarting());

private IEnumerator Restarting()

yield return new WaitForSeconds(30f);

SceneManager.LoadScene((int)(NameScene.Intro));

FinalHouse.cs
using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class FinalHouse : Activator

[SerializeField] private ManagerGame managerGame;

[SerializeField] private Animator animWhite;

private int countActivate = 0;

public override void Activate(bool isDestroy = true)

StartCoroutine(Next());

private IEnumerator Next()

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
46
{

animWhite.SetTrigger("ToWhite");

yield return new WaitForSeconds(1.4f);

countActivate++;

if (countActivate == 1)

managerGame.PlayGost();

else if (countActivate > 1)

managerGame.LoadLevel(NameScene.Level2);

FrogHouse.cs
using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class FrogHouse : Activator

[SerializeField] private GameObject frog;

[SerializeField] private GameData gameData;

[SerializeField] private Animator animWay;

private bool isEated = false;

private void Start()

frog.SetActive(false);

public override void Activate(bool isDestroy = true)

base.Activate(false);

if (isEated) return;

frog.SetActive(true);

isEated = true;

gameData.countEatFrog++;

if (gameData.countEatFrog >= 3)

// <-- mega kvak sfx

animWay.SetTrigger("Active");

GameData.cs
using UnityEngine;

[CreateAssetMenu(fileName = "Data", menuName = "ScriptableObjects/GameData", order = 1)]

public class GameData : ScriptableObject

public int countHumanStoneCollect = 0;

public int countHumanStoneDamage = 0;

public int countGostStoneCollect = 0;

public int countGostStoneDamage = 0;

public int countEatFrog = 0;

public void Reset()

countHumanStoneCollect = 0;

countHumanStoneDamage = 0;

countGostStoneCollect = 0;

countGostStoneDamage = 0;

countEatFrog = 0;

Gost.cs

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
47
using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;

using TMPro;

public class Gost : MonoBehaviour

[SerializeField] private HelperPers helper;

[SerializeField] private GameData gameData;

[SerializeField] private TMP_Text textCountLevelStone;

[SerializeField] private Image filledImageStone;

[SerializeField] private InventarDisplay inventarDisplay;

[SerializeField] private AudioSource sfxTake;

[SerializeField] private AudioSource sfxDamageStone;

[SerializeField] private AudioSource sfxDead;

[SerializeField] private Animator animDead;

[SerializeField] private Animator animNextLvl;

[SerializeField] private PlayerControl playerControl;

[SerializeField] private Transform spawnPoint;

public bool isWorkingScript = false;

private int countLevelStone = 0; // max 4 for level

private int countLevelStoneDamage = 0; // max 4 for level

private Activator activeObj;

private int collectedMashroom = 0;

private int collectedStone = 0;

private bool hasMoney = false;

private bool hasScroll = false;

private bool hasKey = false;

private bool hasTorch = false;

private void Start()

//gameData.Reset();

//animNextLvl.SetTrigger("FromWhite");

inventarDisplay.Reset();

private void Update()

if (isWorkingScript == false) return;

if (Input.GetKeyDown(KeyCode.E))

if (activeObj)

if (activeObj.CompareTag("Stone"))

activeObj.Activate(false);

helper.Click();

collectedStone++;

inventarDisplay.IncrementItem(TypeItem.Stone);

activeObj.gameObject.SetActive(false);

sfxTake.Play();

else if (activeObj.CompareTag("Mashroom"))

activeObj.Activate(false);

helper.Click();

collectedMashroom++;

inventarDisplay.IncrementItem(TypeItem.Mashroom);

activeObj.gameObject.SetActive(false);

sfxTake.Play();

else if (activeObj.CompareTag("Money"))

activeObj.Activate(false);

helper.Click();

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
48
hasMoney = true;

inventarDisplay.IncrementItem(TypeItem.Money);

activeObj.enabled = false;

else if (activeObj.CompareTag("Key"))

activeObj.Activate(false);

helper.Click();

hasKey = true;

inventarDisplay.IncrementItem(TypeItem.Key);

activeObj.gameObject.SetActive(false);

sfxTake.Play();

else if (activeObj.CompareTag("Scroll"))

activeObj.Activate(false);

helper.Click();

hasScroll = true;

inventarDisplay.IncrementItem(TypeItem.Scroll);

activeObj.gameObject.SetActive(false);

sfxTake.Play();

else if (activeObj.CompareTag("Magazine"))

activeObj.Activate(false);

helper.Click();

hasMoney = false;

hasTorch = true;

inventarDisplay.DicrementItem(TypeItem.Money);

inventarDisplay.IncrementItem(TypeItem.Torch);

else if (activeObj.CompareTag("Stick"))

activeObj.Activate(false);

helper.Click();

hasTorch = false;

inventarDisplay.DicrementItem(TypeItem.Torch);

else if (activeObj.CompareTag("StoneWall"))

if (collectedStone > 0)

activeObj.Activate(false);

helper.Click();

collectedStone--;

inventarDisplay.DicrementItem(TypeItem.Stone);

else if (activeObj.CompareTag("FrogHouse"))

if (collectedMashroom > 0)

activeObj.Activate(false);

helper.Click();

collectedMashroom--;

inventarDisplay.DicrementItem(TypeItem.Mashroom);

else if (activeObj.CompareTag("HumanStone"))

activeObj.Activate(false);

helper.Click();

gameData.countGostStoneDamage++;

countLevelStoneDamage++;

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
49
activeObj.gameObject.SetActive(false);

sfxDamageStone.Play();

else if (activeObj.CompareTag("GostStone"))

activeObj.Activate(false);

helper.Click();

gameData.countGostStoneCollect++;

countLevelStone++;

textCountLevelStone.text = countLevelStone.ToString();

activeObj.gameObject.SetActive(false);

sfxTake.Play();

else if (activeObj.CompareTag("FinalDoor"))

activeObj.Activate(false);

helper.Click();

hasScroll = false;

hasKey = false;

inventarDisplay.DicrementItem(TypeItem.Key);

inventarDisplay.DicrementItem(TypeItem.Scroll);

//animNextLvl.SetTrigger("ToWhite");

inventarDisplay.Reset();

else if (activeObj.CompareTag("OutDoor"))

activeObj.Activate(false);

helper.Click();

hasScroll = false;

hasKey = false;

inventarDisplay.DicrementItem(TypeItem.Key);

inventarDisplay.DicrementItem(TypeItem.Scroll);

//animNextLvl.SetTrigger("ToWhite");

inventarDisplay.Reset();

else

activeObj.Activate(false);

helper.Click();

activeObj = null;

filledImageStone.fillAmount = Mathf.Lerp(filledImageStone.fillAmount, 0.25f + countLevelStone * 0.125f, Time.deltaTime * 5);

private void OnTriggerEnter(Collider other)

if (isWorkingScript == false) return;

if (other.CompareTag("DeadZone"))

StartCoroutine(Deading());

Activator obj;

if ((obj = other.GetComponent<Activator>()) == null) return;

if ((other.CompareTag("HumanStone") && countLevelStoneDamage >= 4) ||

(other.CompareTag("GostStone") && countLevelStone >= 4) ||

(other.CompareTag("Magazine") && hasMoney == false) ||

(other.CompareTag("StoneWall") && collectedStone <= 0) ||

(other.CompareTag("FrogHouse") && collectedMashroom <= 0) ||

(other.CompareTag("Stick") && hasTorch == false) ||

(other.CompareTag("Money") && hasMoney == true) ||

(other.CompareTag("FinalDoor") && hasScroll == false) ||

(other.CompareTag("OutDoor") && hasScroll == false) ||

(other.CompareTag("Key"))) // only for gost

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
50
{

activeObj = null;

helper.Show(obj.helpSecondText, false);

else if (other.CompareTag("TrapWood") ||

other.CompareTag("Frog"))

activeObj = null;

obj.Activate(false);

else

helper.Show(obj.helpText);

activeObj = obj;

private IEnumerator Deading()

animDead.SetTrigger("Dead");

sfxDead.Play();

yield return new WaitForSeconds(1.5f);

playerControl.velocity.y = 1f;

playerControl.controller.enabled = false;

yield return null;

playerControl.controller.transform.position = spawnPoint.position;

yield return null;

playerControl.controller.enabled = true;

private void OnTriggerExit(Collider other)

if (isWorkingScript == false) return;

activeObj = null;

helper.Hide();

Листт
ВСП КФКТЕ. 000121. 005 ПЗ ют
Изм. Лист № докум. Подпись Дата
51

You might also like