Розробка гри "2048" з використанням мови Python

Аналіз предметної області та відомих реалізацій гри 2048. Універсальна мова моделювання UML в процесі проектування гри. Розробка алгоритмів функціонування модулів гри "2048". Оператори мови програмування Python. Особливості середовища Visual Studio.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 17.02.2021
Размер файла 1,2 M

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

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

Размещено на http://www.allbest.ru/

Вінницький національний технічний університет

(повне найменування вищого навчального закладу)

Кафедра комп'ютерних наук

КУРСОВА РОБОТА

з дисципліни «Об'єктно-орієнтоване програмування»

на тему: Розробка гри «2048» з використанням мови Python

Студента ІІ курсу 1 КН-20 МС групи

напряму підготовки 122 - Комп'ютерні науки

Янковський Є.В.

Керівник к.т.н.,ст.в. Петришин С.І.

Міністерство освіти і науки України

Вінницький національний технічний університет

Факультет інформаційних технологій та комп'ютерної інженерії

Кафедра комп'ютерних наук

ЗАТВЕРДЖУЮ

Зав. каф. КН, д.т.н., проф.

____________ С. І. Перевознік

«__» _____________ 20__ р.

ІНДИВІДУАЛЬНЕ ЗАВДАННЯ

на курсову роботу з дисципліни « Алгоритмізація та програмування »

студента групи __1 КН-20МС__Янковського Є.В.__

1. Тема курсової роботи «Розробка гри «2048» з використанням мови Python»_затверджена на засіданні кафедри комп'ютерних наук, протокол №_5_від «13» жовтня 2020 р.

2. Термін здачі студентом зазначеної роботи: «26» січня 2021 р.

3. Вхідні дані до роботи: використання принципів об'єктно-орієнтованого проектування та програмування, концепції мови UML.

4. Зміст пояснювальної записки: Вступ; Аналіз предметної області: Постановка задачі; UML-діаграми програмного забезпечення; Алгоритм функцінування програмного забезпечення; Опис роботи програми; Аналіз результатів; Висновки; Список використаних джерел; Додатки.

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

6. Дата видачі завдання: «15» вересня 2020 р.

Завдання видав _____Петришин С. І._____ ____________

(ПІП керівника курсової роботи) (підпис)

Завдання прийняв до виконання __Янковський Є.В.__ ____________

(ПІП студента) (підпис)

Анотація

В даній курсовій роботі було спроектовано, реалізовано та проведено тестування гри «2048». Також побудовано UML діаграми класів та блок-схеми алгоритмів модулів програми.

Програму написано об'єктно-орієнтованою мовою програмування Python 3.7.5 з використанням середовища «Visual Studio 2019» корпорації Microsoft.

Annotation

In this course work, the game "2048"was designed, implemented and tested. UML class diagrams and flowcharts of algorithms for program modules are also constructed.

The program is written in the Object-Oriented Programming language Python 3.7.5 using the "Visual Studio 2019" environment of Microsoft Corporation.

Зміст

програмування гра проектування мова

  • Вступ
  • 1. Аналіз предметної області та відомих реалізацій гри 2048
    • 1.1 Аналіз гри «2048»
    • 1.2 Огляд відомих реалізацій гри «2048»
    • 1.3. Постановка задачі на розробку програмного забезпечення
  • 2. Об'єктно-орієнтоване проектування гри 2048
    • 2.1 Універсальна мова моделювання UML в процесі проектування гри «2048»
    • 2.2 Розробка загальної структурної схеми функціонування гри «2048»
    • 2.3 Моделювання гри «2048» з використанням мови UML
    • 2.4 Розробка алгоритмів функціонування гри «2048»
    • 2.5 Розробка алгоритмів функціонування основних модулів гри «2048»
      • 3. Програмна реалізація та тестування гри 2048
    • 3.1 Обґрунтування вибору мови програмування
    • 3.2 Основні оператори мови програмування Python
    • 3.3 Особливості середовища Visual Studio
    • 3.4 Програмна реалізація гри «2048»
    • 3.5 Тестування розробленої гри «2048»
  • Висновки
  • Список використаних джерел
  • Додаток А
  • Додаток Б
  • Додаток В

Вступ

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

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

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

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

Метою курсової роботи є розробка гри «2048».

1. Аналіз предметної області та відомих реалізацій гри 2048

1.1 Аналіз гри «2048»

Гра «2048»[4] є числовою головоломкою з полем у формі квадрата 4x4 клітинки. Метою гри є, складаючи плитки з числами, отримати плитку номіналу «2048», звідки й назва (але при бажанні можна продовжити далі).

Гра починається на квадратному полі з 16-и клітинок, де дві клітинки зайняті плитками номіналом «2» і «4». Кожну плитку можна перемістити по горизонталі чи вертикалі. Щоразу як гравець переміщує плитку, на полі з'являється додаткова плитка номіналу «2» або «4». Дві плитки одного номіналу, будучи поміщеними на одну клітинку, зливаються в одну, номінал якої дорівнює сумі злитих. Якщо в одній ліній після руху поряд стоять понад дві плитки одного номіналу, то вони зливаються автоматично. Кожному номіналу відповідає свій колір, що більший номінал, то «гарячіший» колір.

За кожне злиття ігрові очки збільшуються на номінал новоутвореної плитки. Метою є отримати плитку «2048», після чого дозволяється продовжити. Гра закінчується, якщо після чергового переміщення неможливо виконати жодне злиття плиток.

Загальний вигляд гри показано на рисунку 1.1:

Рисунок 1.1 Загальний вигляд гри «2048»

1.2 Огляд відомих реалізацій гри «2048»

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

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

Рисунок 1.2 Класична версія гри «2048»

Серед клонів та модифікацій найпоширенішими є такі версії даної гри:

- «-512»(рис. 1.3) - ігрове поле 6x6 в якому з'являються як додатні так і від'ємні елементи, а головним завданням є класти число -512;

Рисунок 1.3 Версія «-512»

- «Квантовий 2048»(рис. 1.4) - нагадує класичну версію, але крім звичайних чисел, можуть з'являтись числа, що можуть приймати два значення;

Рисунок 1.4 Версія «Квантовий 2048»

- «Тетрісний 2048»(рис. 1.5) - гра схожа на тетріс, де згори до низу падають елементи і якщо вони рівні то об'єднуються;

Рисунок 1.5 «Тетрісний 2048»

- «Шестикутний 2048»(рис. 1.6) - замість квадратного поля використовується шестикутне поле й можливість переміщувати елементи в шістьох напрямках;

Рисунок 1.5 «Шестикутний 2048»

- «4096»(рис. 1.6) - головна ціль зібрати число «4096»;

Рисунок 1.6 «4096»

- «Фібоначчі 2584»(рис. 1.7) - об'єднання чисел відбувається відповідно до послідовності Фібоначчі 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144 …, тобто кожен наступний елемент дорівнює сумі двох попередніх;

Рисунок 1.7 «Фібоначчі 2584»

- «2048-3D»(рис. 1.8) - складати числа одразу на трьох ігрових полях.

Рисунок 1.8 «2048-3D»

Отже, сьогодні існує багато модифікацій гри «2048», однак у них є один недолік: гра виводить найкращий результат, але не виводить ім'я найкращого гравця, оскільки дана функція в ній не реалізована.

В даній курсовій цей недолік виправлено і гра забезпечує введення ім'я гравця і виведення ім'я найкращого гравця.

1.3 Постановка задачі на розробку програмного забезпечення

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

Сама гра повинна включати в себе: початковий інтерфейс, інтерфейс ігрового поля і кінцевий інтерфейс.

Колаж початкового інтерфейсу показано на рисунку 1.9:

Рисунок 1.9 Колаж початкового інтерфейсу

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

Колаж ігрового поля показано на рисунку 1.10:

Рисунок 1.10 Колаж інтерфейсу ігрового поля

Інтерфейс ігрового поля повинен виводити: ігрове поле гри, поточний рахунок гравця, а також ім'я найкращого гравця та його результат. В інтерфейсі ігрового поля запускається ігровий цикл в якому повинні виконуватись наступні активності:

- в ігрове поле заноситься два елементи;

- очікується дія від гравця;

- якщо натиснуто стрілочку елементи зміщуються за напрямком натиснутої стрілочки;

- якщо елементи здвинулись то в поле на випадкову позицію заноситься новий елемент;

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

- якщо в ігровому полі є порожні місця або, якщо є можливі об'єднання, тоді ігровий цикл продовжується;

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

Колаж кінцевого інтерфейсу показано на рисунку 1.11:

Рисунок 1.11 Колаж кінцевого інтерфейсу

Кінцевий інтерфейс виводить рахунок гравця і в залежності від того побив він рекорд гри чи ні виводиться також текст «New record!». В інтерфейсі також повинно бути реалізовано два способи початку нової гри: або з поточним ім'ям, тоді з'явиться інтерфейс ігрового поля і запуститься ігровий цикл, або гравець хоче змінити ім'я і тоді з'явиться початковий інтерфейс для введення нового ім'я гравця.

2. Об'єктно-орієнтоване проектування гри 2048

2.1 Універсальна мова моделювання UML в процесі проектування гри «2048»

В процесі проектування гри «2048» використано універсальну мову програмування UML.

UML (англ. Unified Modeling Language)[3] -- уніфікована мова моделювання, що використовується у парадигмі об'єктно-орієнтованого програмування. Є невід'ємною частиною уніфікованого процесу розробки програмного забезпечення. UML є мовою широкого профілю, стандарт, що використовує графічні позначення для створення абстрактної моделі системи, яка називається UML-моделлю. UML, як мова таблиць, була створена для визначення, візуалізації, проектування й документування, в основному, програмних систем. UML об'єктно-орієнтована мова, в результаті чого методи опису результатів аналізу і проектування семантично близькі до методів програмування на сучасних об'єктно-орієнтованих мовах.

Головними в розробці UML були наступні цілі:

- надати користувачам готовий до використання виразну мову візуального моделювання, що дозволяє розробляти осмислені моделі та обмінюватися ними;

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

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

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

В курсовій роботі будуть розроблені UML діаграми класів, usecase та діяльності. Дані діаграми дозволять зрозуміти будову та принцип роботи розробленої гри «2048» без перегляду коду.

На діаграмі класів будуть наведені різноманітні класи, які утворюють систему і їх взаємозв'язки. Діаграми класів називають «статичними діаграмами», оскільки на них показано класи разом з методами і полями, а також статичний взаємозв'язок між ними: те, яким класам «відомо» про існування яких класів, і те, які класи «є частиною» інших класів, -- але не показано методи, які при цьому викликаються. В діаграмі класів буде наведено класи, що входять до складу гри «2048», а також яка їхня будова і зв'язки між ними.

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

Прецеденти (usecase) - це докладні процедурні описи варіантів використання системи всіма зацікавленими особами, а також зовнішніми системами, тобто всіма, хто (або що) може розглядатися як актори, інакше - дійові особи. По суті, прецеденти - це свого роду алгоритми роботи з системою з точки зору зовнішнього світу. Прецеденти є основою функціональних вимог до системи. Вони дозволяють описувати межі проектованої системи, її інтерфейс, а потім виступають в якості основи для тестування системи замовником за допомогою приймальних тестів. Usecase демонструватиме поводження гри «2048» в залежності від виконання користувачем усіх можливих дій доступних в грі.

2.2 Розробка загальної структурної схеми функціонування гри «2048»

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

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

Розроблена загальна структурна схема функціонування гри «Битва капітанів» зображена на рисунку 2.1.

Рисунок 2.1 Загальна структурна схема гри «2048»

2.3 Моделювання гри «2048» з використанням мови UML

Моделювання гри у даній курсовій роботі полягає у створенні та аналізі перебігу гри, структури модульних компонентів системи та програмній реалізації модулів гри «2048».

Розроблена діаграма класів зображена на рисунку 2.2. На ній можна побачити основні класи, що використовуються в програмі, а також їх поля і методи. Також видно зв'язки наслідування між класами. Серед найбільш помітних класів є класів є Main, Map_logic і Intro_user_interface, що складаються лише з методів.

Рисунок 2.2 Діаграма класів гри

Діаграму активності показано на рисунку 2.3. На даній діаграмі показано порядок виконання програми залежно від етапу та умови виконання програми. Також показано, які команди в кожному інтерфейсі програми і які умови повинні виконуватись для переходу між ними.

Рисунок 2.3 Діаграма активності гри «2048»

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

Рисунок 2.4 «usecase» - діаграма гри «2048»

2.4 Розробка алгоритмів функціонування гри «2048»

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

При натисненні на кнопку управління «Закрити» додаток закриється.

При натисненні клавіші «Enter» з'являється інтерфейс ігрового поля.

В інтерфейсі ігрового поля запускається ігровий цикл під час якого триває гра.

При натисненні на кнопку управління «Закрити» додаток закриється.

Якщо ігровий цикл закінчується з'являється кінцевий інтерфейс в якому виводиться результат гравця.

При натисненні на клавішу «Space» з'являється інтерфейс ігрового поля і починається нова гра з поточним ім'ям гравця.

При натисненні на клавішу «Enter» з'являється початковий інтерфейс для введення нового ім'я гравця.

При натисненні на кнопку управління «Закрити» додаток закриється.

Розроблена схема загального алгоритму функціонування програми зображена на рисунку 2.5.

Рисунок 2.5 Схема загального алгоритму функціонування програми

2.5 Розробка алгоритмів функціонування основних модулів гри «2048»

Після запуску додатку запускається головний модуль управління компонентами.

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

Фрагмент з розробленої схеми алгоритму функціонування основного модуля програми зображена на рисунку 2.6.

Рисунок 2.6 Фрагмент алгоритму функціонування основного модуля програми

3. Програмна реалізація та тестування гри 2048

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

Python[2] - високорівнева, інтерпретована, об'єктно-орієнтована мова програмування зі строго динамічною типізацією.

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

Java -- високорівнева, об'єктно-орієнтована мова програмування в якій кожна програма компілюється в байт-код і при виконанні інтерпретується віртуальною машиною для відповідної платформи.

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

C# - об'єктно-орієнтована мова програмування з статичною типізацією, що належить до мов з C-подібним синтаксисом, найбільш близька до мов C++ і Java.

Перейнявши багато від своїх попередників-мов C++, Delphi, Модула, Smalltalk і, особливо, Java -- С#, спираючись на практику їх використання, виключає деякі моделі, що зарекомендували себе як проблематичні при розробці програмних систем, наприклад, C# на відміну від C++ не підтримує множинне спадкування класів.

Таблиця 3.1

Порівняльна характеристика мов програмування

Властивість

C#

Java

Python

Управління пам'яттю

Динамічний розподіл,

автоматичний збирач сміття

Ручний розподіл,

автоматичний збирач сміття

Динамічний розподіл, динамічне взвільнення

Довжина коду

Більші рядки ніж в Python

На 40% більше коду ніж в C#

В 3-5 разів коротший код ніж Java

Типізація

Статична

Статична

Динамічна

Компіляція

Машинний код

Байткод, інтерпретація на JVM

Інтерпретація інтерпретатором Python

Переносимість

Платформозалежність

Платформонезалежність

Платормонезалежність

Багатопоточність

Присутня

Присутня

Присутня

Синтаксис

{} - визначення блоку

; - кінець команди

{} - визначення блоку

; - кінець команди

Використовуються лише відступи

Для розробки гри було використано мову програмування Python. Серед основних її переваг можна назвати такі:

- чистий синтаксис (для виділення блоків слід використовувати відступи);

- переносність програм (що властиве більшості інтерпретованих мов);

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

- можливість використання Python в діалоговому режимі (дуже корисне для експериментування та розв'язання простих задач);

- стандартний дистрибутив має просте, але разом із тим досить потужне середовище розробки, яке зветься IDLE і яке написане мовою Python;

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

- відкритий код (можливість редагувати його іншими користувачами).

3.2 Основні оператори мови програмування Python

Основні оператори в ООП[6]:

- this - це спеціальна локальна змінна (всередині методів), яка дозволяє об'єкту звертатися зі своїх методів до власних атрибутів. У більшості мов ця змінна називається this, але трапляються й винятки (наприклад, self)

- constructor - це спеціальний метод, який автоматично викликається при створенні об'єкта. Конструктор може приймати будь-які аргументи, як і будь-який інший метод. У кожній мові конструктор позначається своїм ім'ям. Десь це спеціально зарезервовані імена типу __construct або __init__, а десь ім'я конструктора має збігатися з ім'ям класу. Призначення конструкторів - провести первинну ініціалізацію об'єкта, заповнити потрібні поля.

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

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

Класи можуть мати методами, яким не потрібно стан і, як наслідок, створення об'єкта. У цьому випадку метод роблять статичним.

3.3 Особливості середовища Visual Studio

Розробка гри виконувалась в середовищі розробки Visual Studio 2019.

Visual Studio[5] - лінійка продуктів компанії Microsoft, шо включає в себе інтегроване середовище розробки програмних продуктів і ряд інших інструментальних засобів. Дане середовище дозволяє розробляти як консольні додатки, так і ігри з використанням графічного інтерфейсу, а також веб-додатки, веб-сайти, веб-застосунки для різних платформ.

В Visual Studio будь-яка программа замикається у проект. Проект - це як папка для файлів. Вона має певні властивості (платформа та мова, для якої створено цей проект) і може містити файли з вихідним кодом програми, який необхідно скомпілювати у виконуваний файл. Проекти можуть об'єднуватися у рішення (Solution). В останні версії Visual Studio під час першого запуску середовище розробки дає запит, яку мову програмування ви вибираєте.

Істотною перевагою середовища розробки слід вважати можливість практичної реалізації принципу "будь-яка сутність є об'єктом" в гетерогенної програмному середовищі.

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

3.4 Програмна реалізація гри «2048»

Для реалізації гри використано наступні класи:

- Main;

- Logic;

- Map_logic;

- Interface;

- User_interface;

- Intro_user_interface.

Методи класу Main:

- init(self);

- game_loop(self, delta).

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

Поля класу Logic:

- __mas.

Поле __mas призначене для зберігання ігрового поля гри, дане поле є інкапсульоване.

Властивості класу Logic:

- mas(self);

- mas(self, value).

Властивості mas призначені для надання доступу до поля __mas. Властивість без параметра призначена для читання поля, а властивість з параметром - присвоєння полю значення.

Методи класу Logic:

- start(self, methodToRun, methodToRun1, methodToRun2, mas);

- get_index_from_number(self, num);

- insert_2_or_4(self, mas, x, y);

- get_empty_list(self, mas);

- is_zero_in_mas(self, mas);

- can_move(self, mas).

Метод start призначений для заповнення масиву двома випадковими числами при старті гри. Метод get_index_from_number повертає координати x і y з переданого в нього числа. Метод insert_2_or_4 вставляє в масив по координатах x і y випадкове число 2 або 4. Метод get_empty_list заносить в нульову комірку масиву відповідним числом. Метод is_zero_in_mas перевіряє чи є в масиві нульові комірки. Метод can_move перевіряє чи є можливість здвигу масиву.

Методи класу Map_logic:

- move_left(self, mas);

- move_right(self, mas);

- move_up(self, mas);

- move_down(self, mas).

Метод move_left виконує здвиг елементів масиву вліво. Метод move_right виконує здвиг елементів масиву вправо. Метод move_up виконує здвиг елементів масиву вгору. Метод move_down виконує здвиг елементів масиву вниз.

Поля класу Interface:

- __WHITE;

- __GRAY;

- __BLACK;

- __COLOR_TEXT;

- __COLORS;

- __BLOCKS;

- __SIZE_BLOCK;

- __MARGIN;

- __WIDTH;

- __HEIGTH;

- __TITLE_RECT.

Поле __WHITE задає білий колір, поле __GRAY - сірий колір, поле __BLACK - чорний колір, поле __COLOR_TEXT - словник число:колір, поле __BLOCKS - кількість блоків, поле __SIZE_BLOCK - розмір блоку, поле __MARGIN - відступ, поле __WIDTH - висоту вікна, поле __HEIGTH - ширину вікна, поле __TITLE_RECT - розмір області виведення інформації користувачу, дані поля є інкапсульованими.

Властивості класу Interface:

- WHITE(self);

- GRAY(self);

- BLACK(self);

- COLOR_TEXT(self);

- COLORS(self);

- BLOCKS(self);

- SIZE_BLOCK(self);

- MARGIN(self);

- WIDTH(self);

- HEIGTH(self);

- TITLE_RECT(self).

Властивість WHITE повертає значення __WHITE, властивість GRAY - значення __GRAY. властивість BLACK - значення __BLACK, властивість COLOR_TEXT - значення __COLOR_TEXT, властивість COLORS - значення __COLORS, властивість BLOCKS - значення __BLOCKS, властивість SIZE_BLOCK - значення __SIZE_BLOCK, властивість MARGIN - значення __MARGIN, властивість WIDTH - значення __WIDTH, властивість HEIGTH - значення __HEIGTH, властивість TITLE_RECT - значення __TITLE_RECT.

Поля класу User_interface:

- __user_name;

- __score.

Поле __user_name зберігає ім'я гравця, поле __score - рахунок гравця, поля є інкапсулюваними.

Властивості класу User_interface:

- user_name(self);

- user_name(self, value);

- score(self);

- score(self, value).

Властивості user_name призначені для доступу до поля __user_name, властивості score - до поля __score. Властивості без параметрів призначені для читання полів, властивості з параметрами - присвоєння значень полям.

Методи класу User_interface:

- draw_top_gamers(self, screen, COLOR_TEXT, GAMERS_DB);

- draw_interface(self, screen, WHITE, TITLE_RECT, BLOCKS, BLACK, SIZE_BLOCK, MARGIN, COLORS, mas, COLOR_TEXT, score, methodToRun, GAMERS_DB, delta = 0).

Метод draw_top_gamers призначений для виведення найкращого результату й ім'я найкращого гравця. Метод draw_interface малює інтерфейс ігрового циклу.

Методи класу Intro_user_interface:

- draw_intro(self, screen, WHITE, BLACK);

- draw_game_over(self, screen, WHITE, BLACK, score, GAMERS_DB, user_name).

Метод draw_intro малює початковий інтерфейс гри, метод draw_game_over - кінцевий інтерфейс гри.

3.5 Тестування розробленої гри «2048»

Робота програми починається з запуску виконавчого файлу PythonApplication1.exe. Після завантаження програми запускається початковий інтерфейс, що пропонує нам ввести ім'я гравця, рисунок 3.1:

Рисунок 3.1 Копія початковий інтерфейс

Після введення ім'я(за умовою воно має бути більше двох символів) нажимаємо Enter і ми переходимо до інтерфейсу ігрового циклу, рисунок 3.2:

Рисунок 3.2 Інтерфейс ігрового циклу

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

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

Рисунок 3.3 Всі елементи зайняті, але гра не закінчується

При виведенні кінцевого інтерфейсу можливі дві умови: гравець побив найкращий результат або не побив найкращий результат. Якщо гравець побив найкращий результат виводиться інтерфейс на рисунку 3.4.а, інакше - на рисунку 3.4.б:

(а) (б)

Рисунок 3.4 Гравець побив найкращий результат (а) та гравець не побив найкращий результат (б)

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

Висновки

У ході виконання курсової роботи було розроблено гру «2048», що дозволяє гарно та корисно провести час. Гра розроблена в якості десктопного додатку.

У першому розділі проаналізовано предметну область, описано відомі реалізації гри «2048».

У другому розділі було розроблено UML діаграму класів, що дозволяє побачити всі класи та зв'язки між ними, і діаграму діяльності, що дозволяє побачити взаємодію з користувачем. Також було розроблено схему загального алгоритму функціонування і схему алгоритму функціонування основного модуля гри «2048».

Тестування гри «2048» підтвердило правильність її роботи.

Список використаних джерел

1. Розробка відеогри [Електронний ресурс]. Режим доступу до ресурсу: https://uk.wikipedia.org/wiki/Розробка_відеогри.

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

3. UML Diagrams [Електронний ресурс]. режим доступа: https://uk.wikipedia.org/wiki/Unified_Modeling_Language.

4. 2048 (гра) [Електронний ресурс]. Режим доступу до ресурсу: https://uk.wikipedia.org/wiki/2048_(гра).

5. Microsoft Visual Studio [Електронний ресурс]. Режим доступу до ресурсу: https://ru.wikipedia.org/wiki/Microsoft_Visual_Studio.

6. Основні принципи ООП [Електронний ресурс]. Режим доступу до ресурсу: https://proglib.io/p/python-oop/.

Додаток А

ЛІСТИНГ ПРОГРАМНОЇ РЕАЛІЗАЦІЇ ОСНОВНИХ МОДУЛІВ ПРОГРАМИ «2048»

import random

import pygame

import sys

import re

from map_logic import Map_logic

from intro_user_interface import Intro_user_interface

map_logic:Map_logic = Map_logic()

intro_user_interface:Intro_user_interface = Intro_user_interface()

class Main:

def init(self):

map_logic.mas = [

[0, 0, 0, 0],

[0, 0, 0, 0],

[0, 0, 0, 0],

[0, 0, 0, 0],

]

intro_user_interface.score = 0

def game_loop(self, delta):

intro_user_interface.draw_interface(screen,

intro_user_interface.WHITE,

intro_user_interface.TITLE_RECT,

intro_user_interface.BLOCKS,

intro_user_interface.BLACK,

intro_user_interface.SIZE_BLOCK,

intro_user_interface.MARGIN,

intro_user_interface.COLORS,

map_logic.mas,

intro_user_interface.COLOR_TEXT,

intro_user_interface.score,

intro_user_interface.draw_top_gamers,

GAMERS_DB,

delta)

pygame.display.update()

is_mas_move:bool = False

while map_logic.is_zero_in_mas(map_logic.mas) or map_logic.can_move(map_logic.mas):

for event in pygame.event.get():

if event.type == pygame.QUIT:

pygame.quit()

sys.exit(0)

elif event.type == pygame.KEYDOWN:

delta = 0

if event.key == pygame.K_LEFT:

map_logic.mas, delta, is_mas_move = map_logic.move_left(map_logic.mas)

elif event.key == pygame.K_RIGHT:

map_logic.mas, delta, is_mas_move = map_logic.move_right(map_logic.mas)

elif event.key == pygame.K_UP:

map_logic.mas, delta, is_mas_move = map_logic.move_up(map_logic.mas)

elif event.key == pygame.K_DOWN:

map_logic.mas, delta, is_mas_move = map_logic.move_down(map_logic.mas)

intro_user_interface.score += delta

if map_logic.is_zero_in_mas(map_logic.mas) and is_mas_move:

empty:int = map_logic.get_empty_list(map_logic.mas)

random.shuffle(empty)

random_num:int = empty.pop()

x, y = map_logic.get_index_from_number(random_num)

map_logic.mas = map_logic.insert_2_or_4(map_logic.mas, x, y) intro_user_interface.draw_interface(screen,

intro_user_interface.WHITE,

intro_user_interface.TITLE_RECT,

intro_user_interface.BLOCKS,

intro_user_interface.BLACK,

intro_user_interface.SIZE_BLOCK,

intro_user_interface.MARGIN,

intro_user_interface.COLORS,

map_logic.mas,

intro_user_interface.COLOR_TEXT,

intro_user_interface.score,

intro_user_interface.draw_top_gamers,

GAMERS_DB,

delta)

pygame.display.update()

x:int

y:int

delta:int = 0

GAMERS_DB:str

intro_user_interface.score = 0

with open("TextFile1.txt", "r") as file:

GAMERS_DB = file.read()

pygame.init()

screen = pygame.display.set_mode((intro_user_interface.WIDTH, intro_user_interface.HEIGTH))

pygame.display.set_caption("2048")

main:Main = Main()

while True:

map_logic.start(map_logic.get_empty_list,

map_logic.get_index_from_number,

map_logic.insert_2_or_4,

map_logic.mas)

if intro_user_interface.user_name == '':

intro_user_interface.user_name = intro_user_interface.draw_intro(screen, intro_user_interface.WHITE, intro_user_interface.BLACK)

main.game_loop(delta)

intro_user_interface.user_name = intro_user_interface.draw_game_over(screen,

intro_user_interface.WHITE,

intro_user_interface.BLACK,

intro_user_interface.score,

GAMERS_DB,

intro_user_interface.user_name)

with open("TextFile1.txt", "r") as file:

GAMERS_DB = file.read()

main.init()

Додаток Б

ІНСТРУКЦІЯ КОРИСТУВАЧА ПРОГРАМИ «2048»

Для того, щоб запустити гру потрібно:

1. Відкрити середовище програмування Visual Studio, відкрити проект та натиснути кнопку Пуск(рисунок Б.1):

Рисунок Б.1 Запуск гри на виконання

2. Ввести ім'я та натиснути Enter(рисунок Б.2):

Рисунок Б.2 Початковий інтерфейс

3. Після цього з'явиться ігрове поле гри(рисунок Б.3):

Рисунок Б.3 Ігрове поле

4. Для того, щоб переміщати елементи потрібно натискати відповідні клавіші курсору: Вгору - здвиг вгору, Вниз - здвиг вниз, Вліво - здвиг вліво, Вправо - здвиг вправо, якщо сусідні елементи в напрямку здвигу однакові, тоді вони об'єднуються(рисунок Б.4):

Рисунок Б.4 Приклад здвигу елементів на ігровому полі

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

Рисунок Б.5 Кінцевий інтерфейс

Додаток В

ГРАФІЧНА ЧАСТИНА

Загальна структурна схема гри «2048»

Діаграма класів гри «2048»

Діаграма прецедентів гри «2048»

Діаграма діяльності гри «2048»

Початковий інтерфейс гри «2048»

Інтерфейс ігрового поля гри «2048»

Кінцевий інтерфейс, якщо побито рекорд

Кінцевий інтерфейс, якщо рекорд не побито

Размещено на Allbest.ru


Подобные документы

  • Об'єктно-орієнтована мова Python - сучасна мова програмування, проста у вивченні та використанні. Наявність повної стандартної бібліотеки. Середовища програмування на Python. Механізм функціонування інтерпретатора. Колекції даних, комбіновані оператори.

    презентация [753,2 K], добавлен 06.02.2014

  • Аналіз особливостей мови програмування Java та середовища Android Studio. Розробка програмного забезпечення для якісного та ефективного вивчення іноземних слів. Побудова базових алгоритмів і структури даних. Вибір мови програмування, реалізація програми.

    курсовая работа [335,3 K], добавлен 11.01.2015

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

    курсовая работа [1,2 M], добавлен 16.05.2021

  • Аналіз навігаційних технологій у сучасних AVL системах. Структура системи і вимоги до апаратного забезпечення, розробка алгоритмів функціонування окремих програмних модулів. Вибір мови програмування і СУБД. Тестовий варіант програмного забезпечення.

    дипломная работа [1,8 M], добавлен 17.12.2015

  • Розробка та схема алгоритму проектованої гри. Особливості мови програмування та середовища "Microsoft Visual Studio C++ 2008 Express Edition". Лістинг програми та загальний опис її роботи, аналіз отриманих результатів та оцінка практичної ефективності.

    курсовая работа [762,8 K], добавлен 03.05.2015

  • Етапи розробки системи моделювання позаштатних ситуацій у виробничому процесі, яка реалізована за допомогою технологій National Instruments з використанням пакету графічної мови програмування Labview. Обладнання для вирощування монокристалічного кремнію.

    дипломная работа [2,4 M], добавлен 25.10.2012

  • Характеристика мови програмування VBA (Visual Basic for Application): можливості й засоби. Використання редактора Visual Basic. Створення та виконання VBA-програм. Типи даних, змінні й константи, операції й вирази. Керуючі оператори, процедури й функції.

    реферат [29,9 K], добавлен 28.06.2011

  • Розробка програми для моделювання роботи алгоритму Дейкстри мовою C# з використанням об’єктно-орієнтованих принципів програмування. Алгоритм побудови робочого поля. Програмування графічного інтерфейсу користувача. Тестування програмного забезпечення.

    курсовая работа [991,4 K], добавлен 06.08.2013

  • Розробка бази даних для меблевої фірми. Обстеження і аналіз предметної області та побудова концептуальної, логічної та фізичної моделі цієї бази даних. Використання мови програмування Visual Basic при написанні програмного коду, що обслуговує базу даних.

    курсовая работа [1,4 M], добавлен 24.10.2010

  • Характеристика предметної області: FTP-server для ОС Windows. Шляхи встановлення FTP-серверу в ОС Windows. Опис мови та середовища програмування, компонентів та функцій програми. Аналіз реалізованої програми FTP-клієнта. Тестовий запуск та опис програми.

    курсовая работа [1,7 M], добавлен 22.06.2017

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.