Розробка гри 'Jump way'

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Украинский
    ,
    Формат файла:
    MS Word
    590,53 Кб
  • Опубликовано:
    2017-01-09
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Розробка гри 'Jump way'

ЗМІСТ

ВСТУП

1. АНАЛІЗ ПРЕДМЕТНОЇ ОБЛАСТІ

.1 Предметна область

1.2 Огляд існуючих аналогів

1.3 Обґрунтування вибору мови програмування

1.4 Розробка технічного завдання на роботу

1.5 Висновки

2. ПРОЕКТУВАННЯ МЕТОДІВ ТА ЗАСОБІВ ГРИ «JUMP WAY»

2.1 Проектування UML-діаграм класів

2.2 Проектування UML - діаграм послідовностей

2.3 Проектування блок - схеми алгоритму програми

2.4 Проектування користувацького інтерфейсу

2.5 Висновки

3. ПРОГРАМНА РЕАЛІЗАЦІЯ ГРИ «JUMP WAY»

3.1 Процес розробки користувацького інтерфейсу

3.2 Програмна реалізація гри

3.3 Інструкція користувача

3.4 Висновки

ВИСНОВКИ

ПЕРЕЛІК ПОСИЛАНЬ

ДОДАТКИ

ВСТУП

В даній курсовій роботі буде розроблено та створено «Jump way».

Актуальність даної розробки полягає в створенні нового покращеного варіанту гри, в якому враховуються недоліки аналогів. Гра має яскравий інтерфейс і зрозумілий геймплей, тому цікава для гравців різних вікових категорій.

Програмний додаток розроблений також в навчальних цілях, оскільки для його створення було опрацьовано теоретичний матеріал, створено UML - діаграми класів та блок - схему алгоритму, а також гру було реалізовано програмно, що дало змогу покращити навички програмування в середовищі для створення ігор Unity3D.

Гра «Jump way» поєднала в собі сучасні методи побудови 2D ігор.

1. АНАЛІЗ ПРЕДМЕТНОЇ ОБЛАСТІ

В даному розділі буде розглянута предметна область гри «Jump way», коротко описані правила гри, розглянуті переваги і недоліки гри, обґрунтовано мову і засіб програмування, а також сформульоване технічне завдання для написання гри.

1.1    Предметна область

«Jump way» проста і весела гра, розрахована на одного гравця. У користувача є один куб, який потрібно спустити якомога нижче. Для того щоб його спустити донизу, потрібно пригати по платформах. Переміщення відбувається за допомогою кліку по кубові. В грі представлений простий, але привабливий інтерфейс.

Гра розпочинається кліком мишки у певну область.

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

Також у даній грі присутній лічильник успіхів гравця, тобто його очки.

Вони записують безпосередньо за 1 гру, тобто ті які користувач набрав за 1 спробу, і ті які було зароблено за весь час гри.

Гра має велику популярність серед інтернет користувачів тому її реалізація є доречною.

1.2    Існуючі реалізації гри

Оскільки, гра «Jump way» була створена для телефонів в 2D графіці то для комп'ютерів такої самої реалізації немає тому буде розглянуто приклади з подібними іграми до «Jump way».

Одним з представників таких видів ігор є гра «Doodle Jump» (рис 1.1).

Рисунок 1.1 - Вигляд вікна гри «Doodle Jump»

Дана гра знаходиться на сайті https://play.google.com. Ця гра не потребує реєстрації на сайті в неї не погана графіка що дозволяє її бути популярною серед користувачів. Але основними мінусами даної гри ї те що в неї немає мережевої реалізації, немає списку рекордів що є поганим для сучасних ігор.

Іншим аналогом є гра «Jelly Jump» яка знаходиться на сайті https://play.google.com (рис 1.2).

Рисунок 1.2 - Вигляд вікна гри «Jelly Jump»

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

Ще одним представником є гра «Beat Stomper» (рис 1.3).

Рисунок 1.3 - Вигляд вікна гри «Beat Jump»

Реалізація даної гри є доволі сучасна вона реалізована в 2D графіці в ній текстури доволі високої якості. Але недоліків в ній набагато більше серед них, немає рівнів проходження, мережевої реалізації, таблиці рекордів.

Однією з популярних на сайтах гра є «Happy jump» яка знаходиться на сайті https://play.google.com/store (рис. 1.4).

Дана гра створена в 2D графіці, але це не заважає її стати однією з найпопулярніших ігор в своєму класі. Основними перевагами гри є наявність сюжету і місій в грі що дозволяє не захоплюватись, магазин у якому на ігрові монети можна змінити вигляд головного героя - карамельку, але незважаючи на всі позитивні риси гра має ряд недоліків серед яких відсутність мережевої реалізації, реклама яка з’являється посеред гри і відсутність рекордів і лідерів гри.

Рисунок 1.4 - Вигляд вікна гри «Happy Jump»

Ще одним представником аркад є гра «Go Up» з сайту https://play.google.com/store/apps/details?id=com.ketchapp.up (рис.1.5).

Рисунок 1.5 - Вигляд вікна гри «Go Up»

Ця гра є дуже вдалим варіантом гри яка існує на телефонах. В ній зрозуміле управління і чудова 2D графіка. Основними недоліками в ній є те що немає рейтингу користувачів і відсутність мережевої реалізації.

.3 Обґрунтування вибору мови програмування

програмування гра інтерфейс користувач

Для написання гри «Jump way» було обрано мову C#, оскільки наявні практичні навички в розробці додатків цією мовою програмування. C# - об’єктно-орієнтована мова високого рівня. Перевагою цієї мови програмування для створення гри є те, що вона об'єднує переваги інших поширених мов програмування і має ряд власних особливостей:

-       підтримка інкапсуляції, наслідування і поліморфізму;

-       підтримка компонентів;

-       використання «збору сміття»;

–       чітка типізація змінних;

–       автоматична ініціалізація змінних;

-       використання обробки виключень;

-       можливість перевантаження операторів.

В якості середовища програмування було обрано Unity. Unity3D - популярне середовище для створення ігор, що має безліч потужних і зручних інструментів.

Першою перевагою є можливість писати скрипти на мові C#, оскільки саме ця мова програмування була обрана для написання гри. Серед інших основних переваг Unity3D можна відзначити наступні:

-       можливість створення 2D ігор;

-       вбудована підтримка мережі;

-       підтримка імпорту великої кількості форматів;

-       можливість тестування гри безпосередньо в редакторі.5.4 отримав нову і вдосконалену мультиплеєрну систему з більш гнучкою і потужною системою, ніж ті, що були впроваджені в більш ранніх версіях Unity.

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

Отже, C# і Unity 3D - найкращий вбір для написання гри «Jump way», оскільки ця мова програмування має перелік переваг, яких немає у інших високорівневих мовах програмування, які є попередниками мови C#.

1.4 Постановка задачі

Завданням проекту є написання гри яка має назву «Jump way».

Гра буде створена на платформі Unity 5 з використанням мови програмування C# для покращення навиків програмування і вивчення методів розробки комп'ютерної гри. Розробити інтерфейс гри за допомогою платформи Unity 5. Управління здійснюватиметься за допомогою комп’ютерної мишки.

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

При невдачі в проходженні гри вивести відповідний текст з можливістю почати спочатку.

«Jump way» - це аркадна гра (Arcade game) - дії якої відбуваються у вигаданому автором світі.

Мета гри - набрати якомога більшу кількість очок, які відповідають кількості платформ на яку гравець зумів перемістити свій куб. Збір ігрової валюти - алмазів.

Для зручності проходження гри поставленні наступні задачі:

         зупинка гри, з виходом в головне меню в будь-який момент гри;

         створення платформ ;

         зміна зовнішнього вигляду головного персонажу гри - куба;

         додати музичний супровід;

         створити можливість виключення музики і звуків.

Для запуску програми апаратне забезпечення повинно відповідати мінімальним вимогам:

-       комп’ютер серії IBM PC з частотою 233 МГц і вище;

-       64МБ оперативної пам’яті;

-       графічний адаптер SVGA (Super Video Graphic Adapter);

-       відеокарта об’ємом пам’яті не менше 4МБ;

-       клавіатура;

-       ОС Windows Vista/7/ХР;

Розмір дискового простору, що займає програма: 15 704 байт. Розмір оперативної пам’яті, що займає програма: 3 500 КБайт.

.5 Висновки

Предметна область розробки - гра «Jump way». Дана гра розрахована для одного гравця. Головна ціль - перемістити куб на платформу яка з’являтиметься нижче тієї на якій знаходиться куб.

Отже, основне завдання - розробити власну з урахуванням плюсів і мінусів аналогів з простим, зрозумілим інтерфейсом.

В якості мови програмування було обрано об’єктно-орієнтовану мову високого рівня C#, а середовища програмування - інструмент для створення ігор Unity 3D, оскільки їх особливості добре підходять для розробки обраної гри.

2. ПРОЕКТУВАННЯ МЕТОДІВ ТА ЗАСОБІВ ГРИ «JUMP WAY»

В даному розділі створено UML-діаграми класів, UML-діаграму послідовностей класів, та користувацький інтерфейс.

2.1    Проектування UML-діаграм класів

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

У UML атрибути показуються щонайменше назвою, також може бути показано їх тип, початкове значення і інші властивості. Крім того, атрибути може бути показано з областю видимості атрибута: «+» (public), «#» (protected) та «-» (private).

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

Для того, щоб перейти до програмної реалізації гри, необхідно створити UML діаграми класів.

Розглянемо UML-діаграму класу DetectClicks (Рис.2.1). З даної діаграми видно що область видимості майже усіх атрибутів «+», тобто public, лише один атрибут має видимість «-».

Клас має велику кількість методів, метод Update () відповідає за включення всіх компонентів: взаємодія з об’єктами, камера, освітлення. Методи delCubes () i CubeToBlock () відповідають за переміщення та видалення використаних кубів.

Рисунок 2.1 - Діаграма класу DetectClicks

Далі наведемо діаграму класу CubeJump (Рис.2.2). В даній діаграмі описано головну дій гри, а саме прижок куба з однієї платформи на іншу. Видимість більшості атрибутів «-», тобто private. Всі методи даного класу також private.

Методи PressCube(), OnMouseUp(), OnMouseDown() відповідають за властивоті куба при клікові по ньому та набуття наступних дій, скорість його руху. Метод PlayerLose() відповідає за перевірку програшу, тобто перевірку позиції кубу у просторі.

Рисунок 2.2 - Вигляд діаграми класу CubeJump

Далі покажемо наступний клас SpawnBlocks (Рис 2.3). В цій діаграмі показано що клас SpawnBlocks має більшість private, лише декілька public значень. Метод SpawnBlock () відповідає за своєчасне створення нових платформ для подальших дій. Метод RandScale () задає різні розміри створених платформ, для ускладнення гри.

Рисунок 2.3 - Вигляд діаграми класу SpawnBlock

Наступним буде розглянуто діаграма класу Score (Рис2.4).

Рисунок 2.4 - Вигляд діаграми класу Score.

Дана діаграма показує, що клас Score має дві змінні private, та одну public.

Даний клас відповідає за лічильник набраних балів.

.2 Проектування UML - діаграм послідовностей

Діаграма послідовностей відноситься до діаграм взаємодії UML, що описує поведінкові аспекти системи, але відображає часові особливості передачі і прийому повідомлень об'єктами.

На діаграмі послідовності зображаються виключно ті об'єкти, які безпосередньо беруть участь у взаємодії і не показуються можливі статичні асоціації з іншими об'єктами. Для діаграми послідовності ключовим моментом є саме динаміка взаємодії об'єктів в часі.

2.3 Проектування блок - схеми алгоритму програми

Блок-схема алгоритму - це графічне представлення логічної структури алгоритму, де кожний етап обробки інформації зображується у вигляді геометричних фігур (блоків).

Існують правила зображення блок-схем алгоритмів. Кожен алгоритм має початок та кінець. Кожна команда алгоритму представляється у вигляді геометричних фігур, які мають певну конфігурацію, в залежності від характеру дій, що будуть виконуватись. Геометричні фігури з’єднуються між собою лініями або стрілками, які вказують порядок виконання дій

Рисунок 2.6 - Блок-схема алгоритму визначення переможця

Переможця у даній грі немає, гра триває до тих пір, поки гравець не потрапить на нижчу платформу.

2.4 Проектування користувацького інтерфейсу

Для реалізації гри в Unity необхідно створити головну сцену.

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

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

Наступним кроком став імпорт зображень, які будуть фоном та героями. Для того, щоб імпортувати зображення потрібно додати його до папки Assets, яка знаходиться у розділі Project, а потім просто перетягнути на місце на сцені, де воно має розташовуватись. У разі, якщо необхідно розташувати зображення одне за одним чи повернути їх, необхідно змінити налаштування у розділі Transform вкладки Inspector. Щоб об’єкти могли взаємодіяти і рухатись, до них необхідно додати Collider та Rigidbody2D, які знаходяться у розділі «Add Component => Physics2D». Після цього можна переходити до програмної частини.

Для створення головного меню можна використати UI (User Interface) System. Дана система дозволяє створювати яскраве меню, яке створюється не на основі коду, а за допомогою інструментів візуальної розробки.

Для початку потрібно полотно, на якому будуть розміщені елементи. Для цього переходимо в меню "GameObject => UI => Canvas". Далі необхідно працювати з Canvas. У вкладці інспектор в розділі Render Mode обираємо параметр Screen Space - Overlay. У даному режимі полотно масштабується за розмірами екрану і відображається без зв'язку зі сценою або камерою. У разі зміни розміру вікна, полотно буде розтягнуто під розміри екрана. Полотно буде малюватися поверх всіх інших графічних елементів.


В даному розділі було спроектовано UML - діаграми класів та їх залежностей. В даних діаграмах зображуються класи (до яких входять методи та атрибути) та їх зв’язок. UML-діаграми класів застосовуються при прямому та зворотному проектуванні. Також було спроектовано UML-діаграму послідовностей класів, та блок-схему алгоритму здійснення ходу.

Блок - схеми та UML-діаграми послідовностей допомагають відобразити послідовність дій у програмі. В розділі також розроблено користувацький інтерфейс програми.

3. ПРОГРАМНА РЕАЛІЗАЦІЯ ГРИ «JUMP WAY»

На основі спроектованих методів та засобів гри «Jump way» розробимо програмну реалізацію гри, опишемо створений інтерфейс користувача та інструкцію роботи з програмою.

.1 Процес розробки користувацького інтерфейсу

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

Наступним кроком став імпорт зображень, які будуть фоном та героями. Для того, щоб імпортувати зображення потрібно додати його до папки Assets, яка знаходиться у розділі Project, а потім просто перетягнути на місце на сцені, де воно має розташовуватись. У разі, якщо необхідно розташувати зображення одне за одним чи повернути їх, необхідно змінити налаштування у розділі Transform вкладки Inspector. Щоб об’єкти могли взаємодіяти і рухатись, до них необхідно додати Collider та Rigidbody2D, які знаходяться у розділі «Add Component => Physics2D». Після цього можна переходити до програмної частини.

Для створення головного меню можна використати UI (User Interface) System. Дана система дозволяє створювати яскраве меню, яке створюється не на основі коду, а за допомогою інструментів візуальної розробки.

Для початку потрібно накинути сценарій на камеру:

private void Awake()

{_Camera = GetComponentInChildren<Camera>();

}void FixedUpdate()

{();();

}

Даний клас ініціалізує камеру.

.2 Програмна реалізація гри

Створення програми починається із розробки інтерфейсу. Після цього за об’єктами закріпляються сценарій, в яких описується логіка гри.

Гравець повинен натиснути в певну область поля гри.bool clicked;Update ()

{(clicked && dirLight.intensity != 0).intensity -= 0.03f;(clicked && dirLight_2.intensity >= 1.05f).intensity -= 0.025f;

}OnMouseDown ()

{= true; // Works only ones.gameObject.SetActive (false);.gameObject.SetActive (true);.text = "0";.GetComponent <Scrollobjectg> ().speed = -10f;.GetComponent <Scrollobjectg> ().checkPos = -130f;_cube.GetComponent <Animation> ().Play ("StartGameCube");(CubeToBlock ());_cube.transform.localScale = new Vector3 (1f, 1f, 1f);_anim.Play ();

Після старту гри, натиском кнопки миші куб стає на певну позицію, і з’явиться нова платформа довільного розміру, на довільній позиції у просторі. В разі попадання кубу на потрібну платформу повинна з’явитись нова платформа, і видалитись попередня.GameObject block, allCubes;GameObject blockInst;Vector3 blockPos;float speed = 7f;bool onPlace;Start ()

{();

}Update ()

{(blockInst.transform.position != blockPos && !onPlace).transform.position = Vector3.MoveTowards (blockInst.transform.position, blockPos, Time.deltaTime * speed);if (blockInst.transform.position == blockPos)= true;(CubeJump.jump && CubeJump.nextBlock)

{();= false;

}

}RandScale () {rand;(Random.Range (0, 100) > 80)= Random.Range (1.2f, 2f);= Random.Range (1.2f, 1.5f);rand;

}spawn ()

{= new Vector3 (Random.Range (0.7f, 1.7f), -Random.Range (0.6f, 3.2f), -5.8f);= Instantiate (block, new Vector3 (9f, -5f, -5.8f), Quaternion.identity) as GameObject;.transform.localScale = new Vector3 (RandScale (), blockInst.transform.localScale.y, blockInst.transform.localScale.z);.transform.parent = allCubes.transform;

}

}OnTriggerEnter (Collider other)

{(other.tag == "Cube")(other.gameObject);

}

}(!lose) {= true;_blocks++;("Next One");

}

}

}

Після того, як користувач почне гру, йому потрібно визначити силу яка надається кубу шляхом затиснення лівої кнопки мишки. Якщо відпустити кнопку, куб набуде певної сили і полетить в обраному напрямі з обраною швидкістю. Це здійснюється таким чином:Start ()

{(CanJump ());

}FixedUpdate ()

{(animate && mainCube.transform.localScale.y > 0.4f)(-scratch_speed);if (!animate && mainCube != null)

{(mainCube.transform.localScale.y < 1f)(scratch_speed * 3f);if (mainCube.transform.localScale.y != 1f).transform.localScale = new Vector3 (1f, 1f, 1f);

}(mainCube != null)

{(mainCube.transform.position.y < -7.5f)

{(mainCube, 0.5f);("Player Lose");= true;

}

}(lose)();

}PlayerLose ()

{.GetComponent <Scrollobjectg> ().speed = 5f;.GetComponent <Scrollobjectg> ().checkPos = 0;(!lose_buttons.activeSelf)_buttons.SetActive (true);_buttons.GetComponent <Scrollobjectg> ().checkPos = 70;

}OnMouseDown () {(nextBlock && mainCube.GetComponent <Rigidbody> ())

{= true;= Time.time;= mainCube.transform.localPosition.y;

}

}OnMouseUp () {(nextBlock && mainCube.GetComponent <Rigidbody> ())

{= false;

//Jump= true;force, diff;= Time.time - startTime;(diff < 3f)= 190 * diff;= 280f;(force < 60)= 60;.GetComponent <Rigidbody> ().AddRelativeForce (mainCube.transform.up * force);.GetComponent <Rigidbody> ().AddRelativeForce (mainCube.transform.right * -force);(checkCubePos ());= false;

}

}PressCube (float force )

{.transform.localPosition += new Vector3 (0f, force * Time.deltaTime, 0f);.transform.localScale += new Vector3 (0f, force * Time.deltaTime, 0f);

}checkCubePos ()

{return new WaitForSeconds (1.5f);(yPosCube == mainCube.transform.localPosition.y)

{("Player Lose ");= true;

}{(!mainCube.GetComponent <Rigidbody> ().IsSleeping ())

{return new WaitForSeconds (0.05f);(mainCube == null);

}(!lose) {= true;_blocks++;("Next One");.transform.localPosition = new Vector3 (1.8f, mainCube.transform.localPosition.y, mainCube.transform.localPosition.z);.transform.eulerAngles = new Vector3 (0f, mainCube.transform.eulerAngles.y, 0f);

}

}CanJump () {(!mainCube.GetComponent <Rigidbody> ())return new WaitForSeconds (0.05f);return new WaitForSeconds (1f);= true;

}

}

}

{return new WaitForSeconds (1.5f);(yPosCube == mainCube.transform.localPosition.y)

{("Player Lose ");= true;Start ()

{(gameObject, 1f);

}

// Update is called once per frameUpdate ()

{.position += new Vector3 (0, 0.2f, 0);

}

}float speed = 5f, checkPos = 0f;RectTransform rec;Start()

{= GetComponent <RectTransform> ();

}Update()

{(rec.offsetMin.y != checkPos)

{.offsetMin += new Vector2 (rec.offsetMin.x, speed);.offsetMax += new Vector2 (rec.offsetMax.x, speed);

}

}

}OnMouseUpAsButton () {(gameObject.name) {"Restart":.LoadScene ("main");;

}

}

}

Після вдалих спроб, користувач набирає певні очки які дорівнюють кількості вдалих прижків. Ми використаємо лічильник загальної кількості очків за весь процес гри, і за окремо взяту гру.Text record;Text txt;bool gameStart;Start ()

{.text = "TOP: " + PlayerPrefs.GetInt ("Record").ToString ();= GetComponent <Text> ();.count_blocks = 0;

}Update ()

{(txt.text == "0")= true;(gameStart)

{.text = CubeJump.count_blocks.ToString ();(PlayerPrefs.GetInt ("Record") < CubeJump.count_blocks)

{.SetInt ("Record", CubeJump.count_blocks);.text = "TOP: " + PlayerPrefs.GetInt ("Record").ToString ();

}

}

}

}

3.3 Інструкція користувача

Для запуску гри необхідно відкрити виконуваний файл програми «Jump way». Після цього користувач побачить вікно, на якому пропонується обрати дозвіл екрану та якість графіки.

Рисунок 3.1 - Вигляд вікна налаштувань програми

Якщо натиснути на кнопку «Quit», програма завершить свою роботу.

Рисунок 3.2 - Вигляд головного меню програми

Рисунок 3.3 - Вигляд ігрової сцени програми

На сцені є лічильник успіхів гравця.

Рисунок 3.4 - Вигляд меню програшу

.4 Висновки

В даному розділі було описано практичну реалізацію гри «Jump Way». Гра створена на об’єктно-орієнтованій мові програмування високого рівня С#, а в якості середовища програмування було обрано потужний інструмент для створення ігор Unity3D.

За допомогою інструментів Unity3D було розроблено яскравий інтерфейс та зручне меню. В даному розділі також було описано програмну реалізацію основних можливостей.

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

ВИСНОВКИ

Завданням даної курсової роботи є розробка гри «Jump Way».

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

Для полегшення програмної реалізації гри було спроектовано UML - діаграми класів та залежностей, а також для того, щоб краще розуміти послідовність дій в класах, було розроблено UML - діаграму послідовностей, спроектовано блок - схему алгоритму здійснення ходу.

Також було програмно реалізовано гру, створено користувацький інтерфейс. В якості мови програмування було обрано об’єктно - орієнтовану мову високого рівня C#, а середовищем програмування було обрано Unity3D, оскільки воно має багато інструментів, за допомогою яких простіше створити обрану гру.

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

ПЕРЕЛІК ПОСИЛАНЬ

.        https://play.google.com/store/apps/details?id=com.lima.doodlejump&hl=ru

.        https://play.google.com/store/apps/details?id=com.ketchapp.jellyjump&hl=ru.html

.        https://play.google.com/store/apps/details?id=com.noodlecake.happyjump&hl=ru

.        https://play.google.com/store/apps/details?id=com.ketchapp.up

.        Шилдт, Г.C# 3.0: руководство для начинающих [Текст]: учебное пособие/ Ш. Герберт. - 2-е изд. - М.: ООО "И.Д. Вильямс", 2009. - 688 с.

.        Елементи UML [Електронний ресурс] / Режим доступу: https://docs.kde.org/ trunk4/uk/kdesdk/umbrello/uml-elements.html#sequence-diagram

.        Грейди Буч, Джеймс Рамбо, Айвар Джекобсон. Язык UML. Руководство пользователя = The Unified Modeling Language user guide. - 2-е изд. - М., СПб.: ДМК Пресс, Питер, 2004. - 432 с.

.        Блок-схема [Електронний ресурс] / Режим доступу: https://uk. wikipedia.org/ wiki/Блок-схема.

9.      Э. Стиллмен, Д. Грин. Изучаем C#. Санкт - Петербург, 2012.

.        Михаил Фленов Библия C#/ Михаил Фленов - БХВ-Петербург, 2011.

11.    Бадд Т. Объектно-ориентированное программирование в действии: Пер. с англ./Тимоти Бадд. - СПб.: Питер, 2003.

12.    Страуструп Б. Язык программирования C++ / Страуструп Б. - Бином, 2011.

ДОДАТКИ


Додаток А(обов’язковий)

Лістинг програмиUnityEngine;System.Collections;class CubeJump: MonoBehaviour {static bool jump, nextBlock;GameObject mainCube, buttons, lose_buttons;bool animate, lose;float scratch_speed = 0.5f, startTime, yPosCube;static int count_blocks;Start () {(CanJump ());

}FixedUpdate () {(animate && mainCube.transform.localScale.y > 0.4f)(-scratch_speed);if (!animate && mainCube != null) {(mainCube.transform.localScale.y < 1f)(scratch_speed * 3f);if (mainCube.transform.localScale.y != 1f).transform.localScale = new Vector3 (1f, 1f, 1f);

}(mainCube != null) {(mainCube.transform.position.y < -7.5f) {(mainCube, 0.5f);("Player Lose");= true;

}

}(lose)();

}PlayerLose () {.GetComponent <Scrollobjectg> ().speed = 5f;.GetComponent <Scrollobjectg> ().checkPos = 0;(!lose_buttons.activeSelf)_buttons.SetActive (true);_buttons.GetComponent <Scrollobjectg> ().checkPos = 70;

}

}OnMouseUp () {(nextBlock && mainCube.GetComponent <Rigidbody> ()) {= false;

//Jump= true;force, diff;= Time.time - startTime;(diff < 3f)= 190 * diff;= 280f;(force < 60)= 60;.GetComponent <Rigidbody> ().AddRelativeForce (mainCube.transform.up * force);.GetComponent <Rigidbody> ().AddRelativeForce (mainCube.transform.right * -force);(checkCubePos ());= false;

}

}PressCube (float force ) {.transform.localPosition += new Vector3 (0f, force * Time.deltaTime, 0f);.transform.localScale += new Vector3 (0f, force * Time.deltaTime, 0f);

}checkCubePos () {return new WaitForSeconds (1.5f);(yPosCube == mainCube.transform.localPosition.y) {("Player Lose ");= true;

}{(!mainCube.GetComponent <Rigidbody> ().IsSleeping ()) {return new WaitForSeconds (0.05f);(mainCube == null);

}(!lose) {= true;_blocks++;("Next One");.transform.localPosition = new Vector3 (1.8f, mainCube.transform.localPosition.y, mainCube.transform.localPosition.z);.transform.eulerAngles = new Vector3 (0f, mainCube.transform.eulerAngles.y, 0f);

}

}

}CanJump () {(!mainCube.GetComponent <Rigidbody> ())return new WaitForSeconds (0.05f);return new WaitForSeconds (1f);= true;

}

}UnityEngine;UnityEngine.UI;System.Collections;class Detectclicks: MonoBehaviour {GameObject [] cubes;GameObject buttons, m_cube, spawn_blocks;Text playTxt, gameName, record;Animation cubes_anim, block;Light dirLight, dirLight_2;bool clicked;Update () {(clicked && dirLight.intensity != 0).intensity -= 0.03f;(clicked && dirLight_2.intensity >= 1.05f).intensity -= 0.025f;

}OnMouseDown ()

{(!clicked) {(Delcubes ());= true; // Works only ones.gameObject.SetActive (false);.gameObject.SetActive (true);.text = "0";.GetComponent <Scrollobjectg> ().speed = -10f;.GetComponent <Scrollobjectg> ().checkPos = -130f;_cube.GetComponent <Animation> ().Play ("StartGameCube");(CubeToBlock ());_cube.transform.localScale = new Vector3 (1f, 1f, 1f);_anim.Play ();

}

}Delcubes () {(int i = 0; i < 3; i++) {return new WaitForSeconds (0.3f);[i].GetComponent <FallCube> ().enabled = true;

}_blocks.GetComponent <SpawnBlocks> ().enabled = true;

}CubeToBlock () {return new WaitForSeconds (m_cube.GetComponent <Animation> ().clip.length + 0.5f);.Play ();

//add rigid component_cube.AddComponent <Rigidbody> ();

}

}UnityEngine;UnityEngine.UI;System.Collections;class Score: MonoBehaviour {Text record;Text txt;bool gameStart;Start () {.text = "TOP: " + PlayerPrefs.GetInt ("Record").ToString ();= GetComponent <Text> ();.count_blocks = 0;

}Update () {(txt.text == "0")= true;(gameStart) {.text = CubeJump.count_blocks.ToString ();(PlayerPrefs.GetInt ("Record") < CubeJump.count_blocks) {.SetInt ("Record", CubeJump.count_blocks);.text = "TOP: " + PlayerPrefs.GetInt ("Record").ToString ();

}

}

}

}UnityEngine;System.Collections;class SpawnBlocks: MonoBehaviour {GameObject block, allCubes;GameObject blockInst;Vector3 blockPos;float speed = 7f;bool onPlace;Start () {();

}Update () {(blockInst.transform.position != blockPos && !onPlace).transform.position = Vector3.MoveTowards (blockInst.transform.position, blockPos, Time.deltaTime * speed);if (blockInst.transform.position == blockPos)= true;(CubeJump.jump && CubeJump.nextBlock) {();= false;

}

}RandScale () {rand;(Random.Range (0, 100) > 80)= Random.Range (1.2f, 2f);= Random.Range (1.2f, 1.5f);rand;

}spawn () {= new Vector3 (Random.Range (0.7f, 1.7f), -Random.Range (0.6f, 3.2f), -5.8f);= Instantiate (block, new Vector3 (9f, -5f, -5.8f), Quaternion.identity) as GameObject;.transform.localScale = new Vector3 (RandScale (), blockInst.transform.localScale.y, blockInst.transform.localScale.z);.transform.parent = allCubes.transform;

}

}UnityEngine;System.Collections;class MovesCube: MonoBehaviour {bool moved = true;Vector3 target;Start () {= new Vector3 (-4.66f, 4.02f, 0.16f);

}Update () {(CubeJump.nextBlock) {(transform.position != target).position = Vector3.MoveTowards (transform.position, target, Time.deltaTime * 5f);if (transform.position == target && !moved) {= new Vector3 (transform.position.x - 5f, transform.position.y + 5f, transform.position.z);.jump = false;= true;

}(CubeJump.jump)= false;

}

}

}UnityEngine;System.Collections;class DeleteBlocks: MonoBehaviour {OnTriggerEnter (Collider other) {(other.tag == "Cube")(other.gameObject);

}

}UnityEngine;UnityEngine.SceneManagement;System.Collections;class BUTTONS: MonoBehaviour

{OnMouseDown()

{.localScale = new Vector3(1.1f, 1.1f, 1.1f);

}OnMouseUp()

{.localScale = new Vector3 (1f, 1f, 1f);

}OnMouseUpAsButton () {(gameObject.name) {"Restart":.LoadScene ("main");;"FaceBook":.OpenURL ("https://facebook.com");;

}

}

}UnityEngine;System.Collections;class FallCube: MonoBehaviour {Start () {(gameObject, 1f);

}Update () {.position += new Vector3 (0, 0.2f, 0);

}

}UnityEngine;System.Collections;class Scrollobjectg: MonoBehaviour {float speed = 5f, checkPos = 0f;RectTransform rec;Start()

{= GetComponent <RectTransform> ();

}Update() {(rec.offsetMin.y != checkPos) {.offsetMin += new Vector2 (rec.offsetMin.x, speed);.offsetMax += new Vector2 (rec.offsetMax.x, speed);

}

}

}UnityEngine;System.Collections;class SpawnStar: MonoBehaviour {GameObject star;Start () {(spawn ());

}spawn () {(true) {pos = Camera.main.ScreenToWorldPoint (new Vector3 (Random.Range (0, Screen.width), Random.Range (0, Screen.height), Camera.main.farClipPlane / 2));(star, pos, Quaternion.identity);return new WaitForSeconds (5.01f);

}

}

}UnityEngine;System.Collections;class StarAnimation: MonoBehaviour {SpriteRenderer star;Start () {= GetComponent <SpriteRenderer> ();(gameObject, 5f);

}Update () {.color = new Color (star.color.r, star.color.g, star.color.b, Mathf.PingPong (Time.time / 2.5f, 1.0f));

}

}UnityEngine;UnityEngine.UI;System.Collections;class textFade: MonoBehaviour {Text txt;Outline oLine;Start () {= GetComponent<Text> ();= GetComponent<Outline> ();

}Update () {.color = new Color (txt.color.r, txt.color.g, txt.color.b, Mathf.PingPong (Time.time / 2.5f, 1.0f));.effectColor = new Color (oLine.effectColor.r, oLine.effectColor.g, oLine.effectColor.b, txt.color.a - 0.3f);

}

}

Похожие работы на - Розробка гри 'Jump way'

 

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