Розробка системи гри "Breakout"

Проектування структури аркадної гри "Breakout". Розробка алгоритмів функціонування головних її модулів. Програмна реалізація гри. Обґрунтування мови програмування. Основні оператори мови Python. Особливості середовища, в якому розробляється система.

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

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

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

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

Зміст

  • Вступ
  • 1. Аналіз предметної області гри "BREAKOUT"

1.1 Теорія про предметну область гри "BREAKOUT"

  • 1.2 Постановка задачі розробки системи гри
  • 2. Проектування системи гри "BREAKOUT"
    • 2.1 Розробка структури гри "BREAKOUT"
    • 2.2 Розробка алгоритму функціонування гри "BREAKOUT"

2.3 Розробка алгоритмів функціювання основних модулів системи гри "BREAKOUT"

  • 3. Програмна реалізація системи гри "BREAKOUT"
    • 3.1 Обґрунтування мови програмування Python
    • 3.2 Основні оператори мови програмування Python
    • 3.3 Особливості середовища, в якому буде розроблятися система
    • 3.4 Реалізація системи гри "BREAKOUT"
    • 3.5 Тестування розробленої системи гри "BREAKOUT"
  • Висновки
  • Список використаних джерел
  • Додатки

Вступ

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

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

1950-і. Світанок телевізорів, 3D фільмів і рок-н-ролу. Відео-ігри були винайдені в 1950-их на дуже великих комп'ютерах. Першими програмістами відео-ігор були студенти в лабораторіях великих університетів, таких як MIT і співробітники з військових об'єктів в Брукхеевской Національної Лабораторії. Ранні гри, такі як OXO (1952), Spacewar! (1962), і Colossal Cave (1976) були дуже простими і не мали графіки. Вони виводилися на екран на дуже маленьких чорних і білих осцилографічних екранах.

Після гри Spacewar! в університеті комп'ютерної лабораторії Юти, майбутні засновники Atari Тед Дебні і Нолан Бушнелл були натхненні створити Computer Space, першу аркаду в 1971.

Ранні аркади такі як Asteroids, Battlezone і Star Castle, де використовувалася векторна графіка (зображення побудовано з ліній). Після пішла растрова графіка (зображення побудовано з маленьких кольорових квадратів - пікселів). Персонажі, як Pac-Man (Namco, 1980) and Donkey Kong (Nintendo, 1982) стали культовими. На початку 1980-их три стилю ігрових автоматів домінували: стійки (схожі на автомати поповнення рахунку), столики (як більярдні) та кабінки.

У середині 1980-их, аркади почали виникати повсюди і відео-ігри захопили світ. З'явилися найрізноманітніші ігрові жанри, а ігрові автомати ставали все більш продуманими і досконалими і з більш гарною графікою.

У підсумку багато аркади починали нагадувати міні-поїздки, наприклад на конях. Все це відбувалося в кабінах, які поверталися і нахилялися для досягнення потрібного ефекту. Самою ретельно продуманої з цих аркад була Virtual World's BattleTech Centers: стим-панк гра в якій 8 гравців боролися в величезних роботах.

Ці ретельно продумані аркади вимагали великої площі і тих підтримка була чертовськи дорогою. В кінці 1990-их домашні системи почали конкурувати і в кінцевому рахунку виграли. Багато творців аркад збанкрутували. Відео-ігри стали більш прибутковими. Разом з аркадами перестали бути потрібними і ігрові автомати, які перейшли в руки колекціонерів. Золотий вік аркад був закінчений.

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

Отже, ігри займають певну частину нашого життя.

На сьогодні гра "Breakout" є доволі застарілою. Розроблена на такі платформи як Android, IOS, Adobe Flash та Java. Також має різні версії.

1. Аналіз предметної області гри "BREAKOUT"

1.1 Теорія про предметну область гри "BREAKOUT"

В цій курсовій роботі описується гра Breakout. Гра Breakout являє собою 2-D аркада.

Breakout - аркадна гра, схожа на "Pong", створена фірмою Atari в 1976 році. У 1978 році було продовження - Super Breakout. Найбільш відомим клоном гри є "Арканоїд".

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

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

Існують також ще дві інші гри з ракеткою під назвами Super Breakout, Breakout 2000.

Історія та правила гри: На початку гри Breakout містить вісім рядків цеглин, по два рядки одного кольору. Порядок квітів ігри від низу до верху: жовтий, зелений, оранжевий і червоний. За допомогою єдиного м'яча гравець повинен збити максимальну кількість цегли, використовуючи стіни і / або керовану ракетку внизу щоб рикошетом направляти м'яч у цеглини і знищувати їх. Жовті цеглини приносять одне очко кожен, зелені - три очки, помаранчеві - п'ять, а самі верхні, червоні цеглини, приносять сім очок кожен. Завдання ускладнюється тим, що ракетка коротшає наполовину свого розміру після того, як м'яч пробиває червону рядок і вдаряється в верхній край. Крім того, швидкість м'яча збільшується в особливі моменти гри: після чотирьох влучень, після дванадцяти влучень і після першого зіткнення м'яча з помаранчевої і червоної рядками.

Максимальна кількість очок, які може набрати гравець, становить 896. Для цього потрібно пройти два екрани цегли по 448 очок кожен. Після очищення другого екрану м'яч в грі відскакує від порожніх стін поки гравцеві, нарешті, не набридне. Додаткових екранів немає.

Однак, існує секретний спосіб перевищити обмеження в 896 очок - грати в гру в режимі двох гравців. Якщо перший гравець проходить перший екран, витративши два м'ячі з трьох можливих, а потім відразу ж дозволяє м'ячу потонути внизу екрану, його другий екран стає третім екраном у другого гравця, що дає можливість другому гравцеві набрати максимум 1344 очка (в тому випадку, якщо він зможе грати своїм третім м'ячем досить довго). Після очищення третього екрану гра закінчується.

На рисунку 1. 1 зображено фрагмент гри "Breakout"

Рисунок 1.1 - Фрагменти гри Breakout

У грі Super Breakout з'явилися три інших, більш просунутих режими гри, з яких може вибирати гравець:

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

Яма влаштований так само як і в грі Breakout - одна ракетка і один м'яч.

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

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

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

На рисунку 1. 2 зображено фрагмент гри " Super Breakout".

Рисунок 1.2 - Фрагмент гри Super Breakout

Для невдалої ігрової консолі Atari Jaguar була заново розроблена гра Breakout 2000 - тривимірна версія класичної аркади, в яку можна грати одному або вдвох. Завдання в грі залишалася тією ж, але проходила вона на тривимірному ігровому полі. Всього потрібно було пройти десять різних фаз гри, кожна з яких складалася з п'яти ігрових полів. Кожне наступне поле було складніше попереднього, а кожна наступна Фаза ще більше збільшувала рівень складності і додавала можливостей в гру.

Так само, як в арканоїд, в грі були хороші і погані бонуси. Серед них багатоударні і багатоярусні цеглини. Рух м'яча було обмежено нижнім рівнем багатоярусних цегли, а після руйнування нижнього цегли на місце, що звільнилося провалюється цегла з більш високого ярусу. У грі також був режим двох гравців, який дозволяв двом людям (або людині і комп'ютеру) змагатися в одночасній грі. В даному режимі м'яч гравця міг потрапити на ігрове поле іншого гравця і розбивати там цеглу противника. За такі цеглини гравець отримував подвійні окуляри.

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

На рисунку 1. 3 зображено фрагмент гри "Breakout 2000".

Рисунок 1.3 - Фрагмент гри Breakout 2000

Макет гри зображено на рисунку 1.4.

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

1.2 Постановка задачі розробки системи гри

Задача: розробити систему гри "Breakout" засобами мови програмування Python. Розроблена система повинна реалізовувати такі функції: аркадна breakout алгоритм програмування

1. Головна сторінка представлена у вигляді головного вікна exe-файлу, з можливістю переходу на сторінку меню гри "Breakout".

2. Гра "Breakout" повинна реалізовувати можливість керування блоку гравця стрілками LEFT та RIGHT. Гра повинна запускатись кліком мишки по ігровій області меню. М'яч автоматично відтворюється разом з ракеткою. Після кожного удару швидкість руху м'яча повинна збільшуватись на 5 %. Фаза повинна завершитись, якщо гравець знищить всі цеглини ліву або праву границю ігрової області, при цьому одне очко має нараховуватись гравцю - переможцю. У режимі тренування табло з рахунком замінюється на табло з очками - кожну секунду гри гравцю повинне нараховуватись одне очко. У разі програшу результат гравця відправляється на обробку серверу. У разі побиття одного з десяти рекордів результат гравця повинен заноситись у базу даних та відображатись у таблиці рекордів на сторінці рекордів.

2. Проектування системи гри "BREAKOUT"

2.1 Розробка структури гри "BREAKOUT"

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

I. Модуль гри

II. Модуль фази

III. Модуль цеглин

IV. Модуль гравця

Модуль гри - основний модуль, так як в ньому містяться всі класи та функції програми.

Модуль фази - забезпечує відображення фази на якій відбувається всі події гри.

Модуль цеглини - відображує цеглини які гравець повинен знищити.

Модуль гравця призначений для управління ракеткою.

Схема взаємодії модулів системи зображена на рисунку 2.1.

2.2 Розробка алгоритму функціонування гри "BREAKOUT"

Основними кроками алгоритму функціювання системи гри "BREAKOUT" є:

1) Початок;

2) Відображення меню гри;

a) При натисненні на Почати грати відбувається запуск фази гри;

b) Вийти;

3) Після натиснення на Почати грати відбувається створення ігрових об'єктів(запуск з редактора), запуск музичного супроводу.

4) Процес гри;

a) При знищенні червоної цеглини гравець отримує 7 очок

b) При знищенні жовтої - 3 очка та збільшується швидкість м'яча

c) При знищенні зеленої - 3 очка та збільшення ракетки

5) Кінець. Схема алгоритму зображена на мал. 2.2.

Рисунок 2.2 - Схема алгоритму гри "BREAKOUT"

2.3 Розробка алгоритмів функціювання основних модулів системи гри "BREAKOUT"

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

Рисунок 2.3 - Схема алгоритму модуля гравця

Модуль фази. Містить клас та всі функції, які потрібні для відображення фази на екран.

Модуль гри. Головний модуль системи гри "BREAKOUT". Містить всі класи, які міститься в програмі, функцію перевірки рівня гри для завантаження відповідної фази, функцію запуску гри. Також в модулі знаходиться цикли перевірки зіткнення об'єктів на фазі та цикл перевірки для видалення об'єктів:

Зіткнувся м'яч з ракеткою - м'яч відбивається від ракетки, а якщо ні віднімається Life.

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

3. Програмна реалізація системи гри "BREAKOUT"

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

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

Однак при всіх позитивних сторонах С ++ бібліотеки, вони мають дуже різну, часто навіть архаїчну архітектуру.

JavaScript - мова програмування, що розвивається найбільш динамічно. Спочатку була орієнтована лише на веб-розробку, а саме на її клієнтську частину. Проте можливості мови розширюються з прийняттям нових стандартів EcmaScript. Так, на даний момент за допомогою JavaScript без труднощів розробляється і серверна частина веб-сайтів і додатків, а створення платформи Node. js дозволило створювати звичні програмні додатки. У JavaScript взагалі відсутня статична типізація, тобто в момент оголошення не вказується тип змінної, він присвоюється лише разом із присвоєнням або зміною значення, що полегшує роботу з несумісністю типів. Прийняття нових стандартів призвело до спрощення синтаксису JavaScript і додало класи, що робить JavaScript повноцінною об'єктно-орієнтованою мовою.

Python - інша мова програмування, що швидко розвивається. Мова має простий і зрозумілий синтаксис. Це значно спрощує процес розробки. Має динамічну типізацію та автоматичний контроль пам'яті та механізм обробки виключень. Найчастіше використовується для створення веб-додатків. Мова підтримується великою кількістю бібліотек, як, наприклад, Django. Використання бібліотек і низький поріг входження зробили Python однією з найбільш популярних мов програмування. У таблиці 3. 1 наведена порівняльна характеристика мов програмування.

Для проведення порівняльного аналізу було обрано 3 мови програмування - C++, JavaScript, Python.

Таблиця 3.1 - Порівняння мов програмування

Мова

Можливість

C++

JavaScript

Python

Імперативний

+

+

+

Об'єктно - орієнтований

+

+

+

Функціональний

±

+

±

Рефлексивний

±

+

+

Узагальнене програмування

+

+

+

Логічний

-

-

-

Декларативний

-

-

+

Розподілений

±

-

±

Мову програмування яку будемо використовувати є Python.

Незважаючи на ряд проблем історично притаманних Python, він продовжує залишатися провідним інструментом в ряді:

· Аналіз даних і машинне навчання (пакети scipy, scikit-learn, pandas, numpy визнані світовим ученим співтовариством).

· Введення в програмування (pygame, turtle добре допомагають мотивувати дітей починати кодувати).

· Швидке прототипування ідей в бізнесі за рахунок великої кількості готових бібліотек, низький поріг входження в мову і високої продуктивності програмістів, які пишуть на Python.

· Написання скриптів (сценаріїв) для автоматизації завдань.

Python за замовчуванням поставляється з усіма збірками unix-like систем і є відмінною заміною Bash у всіх сенсах

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

В Python відсутня можливість модифікувати вбудовані класи, такі, як int, str, float, list та інші, що, однак, дозволяє Python споживати менше оперативної пам'яті і швидше працювати. Ще однією причиною введення такого обмеження є необхідність узгодження з модулями розширення. Багато модулів (з метою оптимізації швидкодії) перетворять Python-об'єкти елементарних типів до відповідних Сі-типів замість маніпуляцій з ними за допомогою Сі-API.

Оператори дозволяють виконувати різні дії над змінними, константами і виразами.

· Арифметичні оператори: додавання +, віднімання -, множення *, ділення / і остача від ділення %.

· Логічні оператори: І &&, АБО ||, Нi!.

· Оператори порівняння: дорівнює ==, не дорівнює!=, більше >, більше рівне >=, менше < і менше рівне <=.

· Оператори вибору: if, else I switch.

Оператори вибору дозволяють прийняти програму рішення, ґрунтуючись на істинність або хибність умови. Якщо умова істинно (т. ч. дорівнює true) значить, оператор в тілі if виконується, після чого виконується наступний по порядку оператор. Якщо умова помилково (т. ч. дорівнює false) значить, оператор в тілі if не виконується (ігнорується або пропускається) і відразу ж виконується наступний по порядку оператор. Умова, що перевіряється може бути будь-яким логічним вираженням. Логічні вирази можуть бути утворені операціями рівності і відносини.

Оператор if else дозволяє визначити програмісту дію, коли умова істинна і коли умова помилкова. Тоді як if дозволяв визначити дію при істинній умові. Синтаксис оператора вибору if else:

Гілка If:

умова

else:

дії при помилковій умові

· Циклічні оператори: for, while, do while.

Цикл - це багаторазове виконання певних операторів. Тіло циклу буде виконуватися доти, поки умова буде істинною.

For:

(вираз 1, вираз 2, вираз 3)

{оператор або група операторів}

Оператор циклу while або цикл while - цикл, повторює одну і ту ж дію, поки умова продовження циклу while залишається істиною.

while (/*умова продовження циклу while*/):

дія

Умова продовження циклу має бути істинною true, як тільки умова стала хибною, виконується вихід з циклу. Також як і в умовних операторах вибору, фігурні скобочки можуть опускатися в тому випадку, якщо тіло циклу - це один оператор. Але як правило в циклі виконується декілька операторів, так як крім виконання корисної дії необхідно робити умову циклу while хибною, інакше цикл буде нескінченним, а це, в свою чергу, приведе до зациклення програми. Оператори continue і break.

Оператор continue використовується тільки в циклах. В операторах for, while, оператор continue виконує пропуск решти коду тіла циклу і переходить до наступної ітерації циклу.

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

3.3 Особливості середовища, в якому буде розроблятися система

PyCharm - інтегроване середовище розробки для мови програмування Python.

Надає засоби для аналізу коду, графічний зневаджувач, інструмент для запуску юніт-тестів і підтримує веб-розробку на Django. PyCharm розроблена чеською компанією JetBrains на основі IntelliJ IDEA.

PyCharm працює під операційними системами Windows, Mac OS X і Linux.

Можливості:

· Статичний аналіз коду, підсвічування синтаксису і помилок.

· Навігація серед проектів і сирцевого коду: відображення файлової структури проекту, швидкий перехід між файлами, класами, методами і використаннями методів.

· Рефакторинг: перейменування, витяг методу, введення змінної, введення константи, підняття і опускання методу тощо.

· Інструменти для веб-розробки з використанням фреймворку Django

· Вбудований зневаджувач для Python

· Вбудовані інструменти для юніт-тестування

· Розробка з використанням Google App Engine

· Підтримка систем контролю версій: загальний користувацький інтерфейс для Mercurial, Git, Subversion, Perforce і CVS з підтримкою списків змін та злиття.

Рисунок 3.1 - Вікно середовища розробки PyCharm

3.4 Реалізація системи гри "BREAKOUT"

Відображення(Рендеринг) цегли

Цеглини - це просто прямокутники. У Pygame є функція pygame.draw.rect (), яка отримує поверхня, колір і об'єкт Rect (ліву і верхню координату, ширину і висоту) і прямокутник. Якщо додатковий параметр ширини більше нуля, то він відображає контур. Якщо ширина дорівнює нулю (значення за замовчуванням), то малює суцільний прямокутник.

Варто зауважити, що клас Brick є підкласом GameObject і отримує все його властивості, але також має і колір, який обробляє самостійно (бо можуть існувати ігрові об'єкти, що мають кілька кольорів).

import pygame

from game_object import GameObject

classBrick(GameObject):

def__init__(self, x, y, w, h, color, special_effect=None): GameObject. __init__(self, x, y, w, h)

self. color = color

self. special_effect = special_effect

defdraw(self, surface):

pygame. draw. rect(surface, self. color, self. bounds)

Відображення (Ренднринг) м'яча

М'яч в Breakout - це просто круг. У Pygame є функція pygame. draw. circle (), яка отримує колір, центр, радіус і додатковий параметр ширини, який за замовчуванням дорівнює нулю. Якіу функції pygame. draw. rect (), якщо ширина дорівнює нулю, то малюється суцільнийкруг. Ball також є підкласом GameObject. Так як м'яч завжди рухається (у відмінності від цеглин), він також має швидкість, яка передається для обробки базової класу GameObject.

Клас Ball має невелику відмінність - параметри x і y позначають його центр, а параметри x і y, передані базовій грубі GameObject, є верхнім лівим кутом обмежувального прямокутника. Щоб перетворити центр в верхній лівий кут, достатньо виключити радіус.

import pygame

from game_object import GameObject

classBall(GameObject):

def__init__(self, x, y, r, color, speed):

GameObject.__init__(self, x - r, y - r, r * 2, r * 2, speed) self.radius=r self.diameter = r * 2 self. color = color defdraw(self, surface):

pygame.draw.circle(surface, self. color, self. center, self. radius)

Відображення(Рендеринг) ракетки

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

Ось як виглядає відповідний код:

import pygame

import config as c

from game_object import GameObject

classPaddle(GameObject):

def__init__(self, x, y, w, h, color, offset):

GameObject. __init__(self, x, y, w, h)

self. color = color

self. offset = offset

self. moving_left = False

self. moving_right = False

defdraw(self, surface):

pygame. draw. rect(surface, self. color, self. bounds)

Обробка натискань клавіш

Клас Game викликає зареєстровані обробники для кожної події клавіш і передає клавішу. Зауважте, що це не клас Paddle. У BREAKOUT єдиний об'єкт, який цікавлять подібні події - це ракетка. При натисканні або відпуску клавіші викликається його метод handle ().

Об'єкту Paddle не потрібно знати, чи була ця подія натискання або відпускання клавіші, тому що він керує поточним станом за допомогою пари булевих змінних: moving_left і moving_right. Якщо moving_left дорівнює True, то значить, була натиснута кнопка вліво, і таким подією буде віджимання клавіші, яке скине змінну. Те ж саме відноситься і до клавіші вправо. Логіка проста і полягає в перемиканні стану цих змінних у відповідь на будь-яку подію.

defhandle(self, key):

if key == pygame. K_LEFT:

self. moving_left = not self. moving_left

else:

self. moving_right = not self. moving_right

Обробка подій миші

У BREAKOUT є ігрове меню, з яким ми скоро зустрінемося. Кнопка меню управляє різними подіями миші, такими як рух і натискання кнопок (події mouse down і mouse up). У відповідь на ці події кнопка оновлює змінну внутрішнього стану.

Метод handle_mouse_event (), зареєстрований для отримання подій миші, перевіряє тип події і переадресує його до відповідного методу, обробляє цей тип події.

defhandle_mouse_event(self, type, pos):

if type == pygame. MOUSEMOTION:

self. handle_mouse_move(pos)

elif type == pygame. MOUSEBUTTONDOWN:

self. handle_mouse_down(pos)

elif type == pygame. MOUSEBUTTONUP:

self. handle_mouse_up(pos)

defhandle_mouse_move(self, pos):

if self. bounds. collidepoint(pos):

if self. state!= 'pressed':

self. state = 'hover'

else: self. state = 'normal'

defhandle_mouse_down(self, pos):

if self. bounds. collidepoint(pos):

self. state = 'pressed'

defhandle_mouse_up(self, pos):

if self. state == 'pressed':

self. on_click(self) self. state = 'hover'

Переміщення ракетки

Клас Paddle реагує на натискання клавіш зі стрілками, оновлюючи свої поля moving_left і moving_right. Сам рух відбувається в методі update (). Тут виконуються певні обчислення, якщо ракетка знаходиться близько до лівої чи правої межі екрану. Ми не хочемо, щоб ракетка виходила за межі екрану (з урахуванням заданого зсуву).

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

import pygame

import config as c

from game_object import GameObject

classPaddle(GameObject):

def__init__(self, x, y, w, h, color, offset): GameObject. __init__(self, x, y, w, h)

self. color = color

self. offset = offset

self. moving_left = False

self. moving_right = False

...

defupdate(self):

if self. moving_left:

dx = -(min(self. offset, self. left))

elif self. moving_right:

dx = min(self. offset, c. screen_width - self. right)

else:

return self. move(dx, 0)

Завдання вихідної швидкості м'яча

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

Коли м'яч створюється в методі create_ball (), він отримує швидкість з випадковим горизонтальним компонентом в проміжку від -2 до 2 і вертикальним компонентом, що задається в модулі config. py (за замовчуванням встановлено значення 3).

defcreate_ball(self):

speed = (random. randint(-2, 2), c. ball_speed)

self. ball = Ball(c. screen_width // 2,

c. screen_height // 2,

c. ball_radius,

c. ball_color,

speed)

self. objects. append(self. ball)

Розпізнавання колізій

В іграх об'єкти стикаються один з одним, і BREAKOUT не є винятком. В основному з об'єктами стикається м'яч. У методі handle_ball_collisions () є вбудована функція під назвою intersect (), яка використовується для перевірки того, вдарився м'яч про об'єкт, і того, де він зіткнувся з об'єктом. Вона повертає 'left', 'right', 'top', 'bottom' або None, якщо м'яч не зіткнувся з об'єктом.

defhandle_ball_collisions(self):

defintersect(obj, ball):

edges = dict(left=Rect(obj. left, obj. top, 1, obj. height), right=Rect(obj. right, obj. top, 1, obj. height), top=Rect(obj. left, obj. top, obj. width, 1),

bottom=Rect(obj. left, obj. bottom, obj. width, 1)) collisions = set(edge for edge, rect in edges. items()

if ball. bounds. colliderect(rect))

ifnot collisions:

returnNone

if len(collisions) == 1:

return list(collisions) [0]

if'top'in collisions:

if ball. centery >= obj. top:

return'top'

if ball. centerx < obj. left:

return'left'

else:

return'right'

if'bottom'in collisions:

if ball. centery >= obj. bottom:

return'bottom'

if ball. centerx < obj. left:

return'left'

else:

return'right'

Зіткнення м'яча з ракеткою

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

Але якщо він вдаряється об бічну частину ракетки, то відскакує в протилежну сторону (вліво або вправо) і продовжує рух вниз, поки не зіткнеться з підлогою. У коді використовується функція intersect ().

# Удар об ракетку

s = self. ball. speed

edge = intersect(self. paddle, self. ball)

if edge is not None:

self. sound_effects ['paddle_hit']. play()

if edge == 'top':

speed_x = s [0]speed_y = -s [1]

if self. paddle. moving_left:

speed_x -= 1

elif self. paddle. moving_left:

speed_x += 1

self. ball. speed = speed_x, speed_y

elif edge in ('left', 'right'):

self. ball. speed = (-s [0], s [1])

Зіткнення з підлогою

Коли ракетка пропускає м'яч на шляху вниз

(Або м'яч вдаряється об ракетку збоку), то м'яч продовжує падати і потім вдаряється об підлогу.

У цей момент гравець втрачає життя і м'яч створюється заново, щоб гра могла тривати.

Гра завершується, коли у гравця закінчуються життя.

# Удар об пол

if self. ball. top > c. screen_height:

self. lives -= 1

if self. lives == 0:

self. game_over = True

else:

self. create_ball()

Зіткнення з стелею і стінами

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

# Удар об потолок

if self. ball. top < 0:

self. ball. speed = (s [0], -s [1])

# Удар об стiну

if self. ball. left < 0 or self. ball. right > c. screen_width:

self. ball. speed = (-s [0], s [1])

Зіткнення з цеглою

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

Щоб визначити, що м'яч вдарився об цеглу, код перевіряє, чи перетинається яка-небудь цегла з м'ячем:

# Удар об цеглину

for brick in self. bricks:

edge = intersect(brick, self. ball)

if not edge:

continue

self. bricks. remove(brick)

self. objects. remove(brick)

self. score += self. points_per_brick

if edge in ('top', 'bottom'):

self. ball. speed = (s [0], -s [1])

else:

self. ball. speed = (-s [0], s [1])

У Breakout є просте меню з двома кнопками, 'PLAY' і 'QUIT'.

Меню відображається на початку гри і пропадає, коли гравець натискає на 'PLAY'.

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

створення кнопок

У Pygame немає вбудованої бібліотеки UI.

Є сторонні розширення, але для меню я вирішив створити свої кнопки.

Кнопка - це ігровий об'єкт, що має три стани: нормальне, виділене і нажате.

Нормальний стан - це коли миша не знаходиться над кнопкою,

а виділене стан - коли миша перебуває над кнопкою,

але ліва кнопка миші ще не натиснута.

Натиснутий стан - це коли миша перебуває над кнопкою і гравець натиснув на ліву кнопку миші.

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

Також кнопка отримує функцію on_click (за замовчуванням яка є порожньою лямбда-функцією), яка викликається при натисканні кнопки.

import pygame

from game_object import GameObject

from text_object import TextObject

import config as c

class Button(GameObject):

def __init__(self,

x,

y,

w,

h,

text,

on_click=lambda x: None,

padding=0):

super(). __init__(x, y, w, h)

self. state = 'normal'

self. on_click = on_click

self. text = TextObject(x + padding,

y + padding, lambda: text,

c. button_text_color,

c. font_name,

c. font_size)

def draw(self, surface):

pygame. draw. rect(surface,

self. back_color,

self. bounds)

self. text. draw(surface)

Кнопка обробляє власні події миші і змінює свій внутрішній стан на підставі цих подій.

Коли кнопка знаходиться в натиснутому стані і отримує подія MOUSEBUTTONUP,це означає, що гравець натиснув на кнопку, і викликається функція on_click ().

def handle_mouse_event(self, type, pos):

if type == pygame. MOUSEMOTION:

self. handle_mouse_move(pos)

elif type == pygame. MOUSEBUTTONDOWN:

self. handle_mouse_down(pos)

elif type == pygame. MOUSEBUTTONUP:

self. handle_mouse_up(pos)

def handle_mouse_move(self, pos):

if self. bounds. collidepoint(pos):

if self. state!= 'pressed':

self. state = 'hover'

else:

self. state = 'normal'

def handle_mouse_down(self, pos):

if self. bounds. collidepoint(pos):

self. state = 'pressed'

def handle_mouse_up(self, pos):

if self. state == 'pressed':

self. on_click(self)

self. state = 'hover'

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

@property

def back_color(self):

return dict(normal=c. button_normal_back_color,

hover=c. button_hover_back_color,

pressed=c. button_pressed_back_color) [self. state]

Створення меню

Функція create_menu () створює меню з двома кнопками з текстом 'PLAY' і 'QUIT'.

Вона має дві вбудовані функції, on_play () і on_quit (), які вона передає відповідній кнопці.

Кожна кнопка буде додано до списку objects (для відтворення), а також в поле menu_buttons.

def create_menu(self):

for i, (text, handler) in enumerate((('PLAY', on_play),

('QUIT', on_quit))):

b = Button(c. menu_offset_x,

c. menu_offset_y + (c. menu_button_h + 5) * i,

c. menu_button_w,

c. menu_button_h,

text,

handler,

padding=5)

self. objects. append(b)

self. menu_buttons. append(b)

self. mouse_handlers. append(b. handle_mouse_event)

При натисканні кнопки PLAY викликається функція on_play (),

видаляє кнопки зі списку objects, щоб вони більше не промальовується.

Крім того, значення булевих полів, які запускають початок гри - is_game_running і start_level - стають рівними True.

При натисканні кнопки QUIT is_game_running приймає значення False (фактично ставлячи гру на паузу),а game_over присвоюється значення True, що призводить до спрацьовування послідовності завершення гри.

def on_play(button):

for b in self. menu_buttons:

self. objects. remove(b)

self. is_game_running = True

self. start_level = True

def on_quit(button):

self. game_over = True

self. is_game_running = False

3.5 Тестування розробленої системи гри "BREAKOUT"

Почнемо тестування з меню гри.

Як ми бачимо з рисунка 3. 5 меню має дві кнопки: "Play", "Quit".

Рисунок 3.5 - Вікно меню гри "Breakout"

При натисканні Quit - програма закриється.

При натисканні Play завантажується фаза, ілюстрацію можемо бачити на рисунку 3. 6.

Рисунок 3.6 - Фаза гри

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

Для того, щоб вийти з гри потрібно натиснути Esc.

Взаємодія з ракеткою відбувається за рахунок натискання на клавіші:

Стрілки - рух ракетки.

На рисунку 3. 7 можемо бачити рух ракетки вправо та вліво.

Рисунок 3.7 - Рух ракетки вліво

Щоб пройти фазу потрібно знищити всі цеглини або досягти рекорду 93.

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

Рисунок 3.5 - Знищення м'ячом цеглин

Отже, гру "Breakout" успішно протестовано. В результаті тестування помилок під час функціонування не виявлено.

Висновки

В даній курсовій роботі розроблено гру "Breakout" - динамічну гру в жанрі 2D-арканоїд. Програму було розроблено з використанням мови програмування Python, програмного середовища Pycharm 2017. Система ігор складається з чотирьох модулів: модуль гри, модуль фази, модуль гравця та модуль цеглини. Було розроблено систему взаємодії модулів, створено алгоритми та програмні реалізації модулів системи. Було зроблено порівняльну характеристику мов програмування для виконання поставленого завдання та обрано одну з мов на основі певних критеріїв, було обрано середовище розробки. Було успішно проведене тестування програмної реалізації системи "Грa Breakout". Задача розробки простої в доступі і користуванні системи гри була виконана. Задача розробки і користування гри "Breakout" була виконана.

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

1. Wikipedia аркадна гра Breakout [Електронний ресурс]- Режим доступу: https://ru.wikipedia.org/wiki/Breakout_(%D0 %B8 %D0 %B3 %D1 %80 %D0 %B0).

2. Бібліотека середовища розробки на Pygame [Електронний ресурс]: https://www.pygame.org/news.

3. Історія розвитку комп'ютерних ігор [Електронний ресурс]:- http://mestectvo.com/zvnovost/483-kompistigr.html.

Додаток А. Лістинг програмної реалізації основних модулів системи гри "BREAKOUT"

Модуль гри:

(game. py)

importpygame

importsys

fromcollections importdefaultdict

classGame:

def__init__(self, caption, width, height, back_image_filename, frame_rate):

self. background_image = pygame. image. load(back_image_filename)

self. frame_rate = frame_rate

self. game_over = False

self. objects = []

pygame. mixer. pre_init(44100, 16, 2, 4096)

pygame. init()

pygame. font. init()

self. surface = pygame. display. set_mode((width, height))

pygame. display. set_caption(caption)

self. clock = pygame. time. Clock()

self. keydown_handlers = defaultdict(list)

self. keyup_handlers = defaultdict(list)

self. mouse_handlers = []

defupdate(self):

foro inself. objects:

o. update()

defdraw(self):

foro inself. objects:

o. draw(self. surface)

defhandle_events(self):

forevent inpygame. event. get():

ifevent. type == pygame. QUIT:

pygame. quit()

sys. exit()

elifevent. type == pygame. KEYDOWN:

forhandler inself. keydown_handlers [event. key]:

handler(event. key)

elifevent. type == pygame. KEYUP:

forhandler inself. keydown_handlers [event. key]:

handler(event. key)

elifevent. type in(pygame. MOUSEBUTTONDOWN, pygame. MOUSEBUTTONUP, pygame. MOUSEMOTION):

forhandler inself. mouse_handlers:

handler(event. type, event. pos)

defrun(self):

while notself. game_over:

self. surface. blit(self. background_image, (0, 0))

self. handle_events()

self. update()

self. draw()

pygame. display. update()

self. clock. tick(self. frame_rate)

(Breakout. py)

import random

from datetime import datetime, timedelta

import os

import time

import pygame

from pygame. rect import Rect

import config as c

from ball import Ball

from brick import Brick

from button import Button

from game import Game

from paddle import Paddle

from text_object import TextObject

import colors

special_effects = dict(

long_paddle=(colors. ORANGE,

lambda g: g. paddle. bounds. inflate_ip(c. paddle_width // 2, 0),

lambda g: g. paddle. bounds. inflate_ip(-c. paddle_width // 2, 0)),

slow_ball=(colors. AQUAMARINE2,

lambda g: g. change_ball_speed(-1),

lambda g: g. change_ball_speed(1)),

tripple_points=(colors. DARKSEAGREEN4,

lambda g: g. set_points_per_brick(3),

lambda g: g. set_points_per_brick(1)),

extra_life=(colors. GOLD1,

lambda g: g. add_life(),

lambda g: None))

assert os. path. isfile('sound_effects/brick_hit. wav')

class Breakout(Game):

def __init__(self):

Game. __init__(self, 'breakout', c. screen_width, c. screen_height, c. background_image, c. frame_rate)

self. sound_effects = {name: pygame. mixer. Sound(sound) for name, sound in c. sounds_effects. items()}

self. reset_effect = None

self. effect_start_time = None

self. score = 0

self. lives = c. initial_lives

self. start_level = False

self. paddle = None

self. bricks = None

self. ball = None

self. menu_buttons = []

self. is_game_running = False

self. create_objects()

self. points_per_brick = 1

def add_life(self):

self. lives += 1

def set_points_per_brick(self, points):

self. points_per_brick = points

def change_ball_speed(self, dy):

self. ball. speed = (self. ball. speed [0], self. ball. speed [1]+ dy)

def create_menu(self):

def on_play(button):

for b in self. menu_buttons:

self. objects. remove(b)

self. is_game_running = True

self. start_level = True

def on_quit(button):

self. game_over = True

self. is_game_running = False

self. game_over = True

for i, (text, click_handler) in enumerate((('PLAY', on_play), ('QUIT', on_quit))):

b = Button(c. menu_offset_x,

c. menu_offset_y + (c. menu_button_h + 5) * i,

c. menu_button_w,

c. menu_button_h,

text,

click_handler,

padding=5)

self. objects. append(b)

self. menu_buttons. append(b)

self. mouse_handlers. append(b. handle_mouse_event)

def create_objects(self):

self. create_bricks()

self. create_paddle()

self. create_ball()

self. create_labels()

self. create_menu()

def create_labels(self):

self. score_label = TextObject(c. score_offset,

c. status_offset_y,

lambda: f'SCORE: {self. score}',

c. text_color,

c. font_name,

c. font_size)

self. objects. append(self. score_label)

self. lives_label = TextObject(c. lives_offset,

c. status_offset_y,

lambda: f'LIVES: {self. lives}',

c. text_color,

c. font_name,

c. font_size)

self. objects. append(self. lives_label)

def create_ball(self):

speed = (random. randint(-2, 2), c. ball_speed)

self. ball = Ball(c. screen_width // 2,

c. screen_height // 2,

c. ball_radius,

c. ball_color,

speed)

self. objects. append(self. ball)

def create_paddle(self):

paddle = Paddle((c. screen_width - c. paddle_width) // 2,

c. screen_height - c. paddle_height * 2,

c. paddle_width,

c. paddle_height,

c. paddle_color,

c. paddle_speed)

self. keydown_handlers [pygame. K_LEFT]. append(paddle. handle)

self. keydown_handlers [pygame. K_RIGHT]. append(paddle. handle)

self. keyup_handlers [pygame. K_LEFT]. append(paddle. handle)

self. keyup_handlers [pygame. K_RIGHT]. append(paddle. handle)

self. paddle = paddle

self. objects. append(self. paddle)

def create_bricks(self):

w = c. brick_width

h = c. brick_height

brick_count = c. screen_width // (w + 1)

offset_x = (c. screen_width - brick_count * (w + 1)) // 2

bricks = []

for row in range(c. row_count):

for col in range(brick_count):

effect = None

brick_color = c. brick_color

index = random. randint(0, 10)

if index < len(special_effects):

brick_color, start_effect_func, reset_effect_func = list(special_effects. values()) [index]

effect = start_effect_func, reset_effect_func

brick = Brick(offset_x + col * (w + 1),

c. offset_y + row * (h + 1),

w,

h,

brick_color,

effect)

bricks. append(brick)

self. objects. append(brick)

self. bricks = bricks

def handle_ball_collisions(self):

def intersect(obj, ball):

edges = dict(left=Rect(obj. left, obj. top, 1, obj. height),

right=Rect(obj. right, obj. top, 1, obj. height),

top=Rect(obj. left, obj. top, obj. width, 1),

bottom=Rect(obj. left, obj. bottom, obj. width, 1))

collisions = set(edge for edge, rect in edges. items() if ball. bounds. colliderect(rect))

if not collisions:

return None

if len(collisions) == 1:

return list(collisions) [0]

if 'top' in collisions:

if ball. centery >= obj. top:

return 'top'

if ball. centerx < obj. left:

return 'left'

else:

return 'right'

if 'bottom' in collisions:

if ball. centery >= obj. bottom:

return 'bottom'

if ball. centerx < obj. left:

return 'left'

else:

return 'right'

# Hit paddle

s = self. ball. speed

edge = intersect(self. paddle, self. ball)

if edge is not None:

self. sound_effects ['paddle_hit']. play()

if edge == 'top':

speed_x = s [0]

speed_y = -s [1]

if self. paddle. moving_left:

speed_x -= 1

elif self. paddle. moving_left:

speed_x += 1

self. ball. speed = speed_x, speed_y

elif edge in ('left', 'right'):

self. ball. speed = (-s [0], s [1])

# Hit floor

if self. ball. top > c. screen_height:

self. lives -= 1

if self. lives == 0:

self. game_over = True

else:

self. create_ball()

# Hit ceiling

if self. ball. top < 0:

self. ball. speed = (s [0], -s [1])

# Hit wall

if self. ball. left < 0 or self. ball. right > c. screen_width:

self. ball. speed = (-s [0], s [1])

# Hit brick

for brick in self. bricks:

edge = intersect(brick, self. ball)

if not edge:

continue

self. sound_effects ['brick_hit']. play()

self. bricks. remove(brick)

self. objects. remove(brick)

self. score += self. points_per_brick

if edge in ('top', 'bottom'):

self. ball. speed = (s [0], -s [1])

else:

self. ball. speed = (-s [0], s [1])

if brick. special_effect is not None:

# Reset previous effect if any

if self. reset_effect is not None:

self. reset_effect(self)

# Trigger special effect

self. effect_start_time = datetime. now()

brick. special_effect [0](self)

# Set current reset effect function

self. reset_effect = brick. special_effect [1]

def update(self):

if not self. is_game_running:

return

if self. start_level:

self. start_level = False

self. show_message('GET READY!', centralized=True)

if not self. bricks:

self. show_message('YOU WIN!!!', centralized=True)

self. is_game_running = False

self. game_over = True

return

# Reset special effect if needed

if self. reset_effect:

if datetime. now() - self. effect_start_time >= timedelta(seconds=c. effect_duration):

self. reset_effect(self)

self. reset_effect = None

self. handle_ball_collisions()

super(). update()

if self. game_over:

self. show_message('GAME OVER!', centralized=True)

def show_message(self, text, color=colors. WHITE, font_name='Arial', font_size=20, centralized=False):

message = TextObject(c. screen_width // 2, c. screen_height // 2, lambda: text, color, font_name, font_size)

self. draw()

message. draw(self. surface, centralized)

pygame. display. update()

time. sleep(c. message_duration)

def main():

BREAKOUT(). run()

if __name__ == '__main__':

main()

Додаток Б. Інструкція користувача системи "Гра Breakout"

Інструкція призначення для користувача, що використовує гру "Breakout".

Для того, щоб запустити програму у користувача є шлях. У першому випадку потрібно відкрити папку, що знаходиться за адресою "C:\Users\Projects\Breakout". В даній папці запустити файл Breakout.py як це показано на рисунку Б.1.

Рисунок Б.1 - Шлях запуску програми

Запустивши файл, його буде відкрито в програмному середовищі Pycharm 2017. Перед користувачем з'явиться код даної програми та буде можливість його відкомпілювати. Для того щоб відкомпілювати файл та почати користуватися грою "Breakout" потрібно натиснути на кнопку "Run", як це показано на рисунку Б. 2 або скористатись клавішою F5.

Рисунок Б.2 - Шлях запуску програми(2)

Користувачу будуть доступні такі дії: Play, Quit.

Якщо натиснути на Quit - програма закриється.

При натисканні на "Play" - запуститься фаза гри.

Ілюстрацію цього можемо побачити на рисунку Б.6.

Рисунок Б.6 - Вікно меню гри "Breakout"

Рисунок Б.3 - Фаза гри

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

Для того, щоб вийти з гри потрібно натиснути Esc.

Взаємодія з ракеткою відбувається за рахунок натискання на клавіші:

Стрілки - рух ракетки.

Щоб пройти фазу потрібно знищити всі цеглини або досягти рекорду 93

Додаток В. Графічна частина

Рисунок - Схема алгоритму модуля гравця

Рисунок - Схема алгоритму функціювання гри Brekout

Рисунок - Схема алгоритму гри Brekout

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

...

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

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

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

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

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

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

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

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

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

  • Розробка програмного додатку - гри "Jump way", яка поєднала в собі сучасні методи побудови 2D ігор. Обґрунтування вибору мови програмування. Проектування UML-діаграм класів. Користувацький інтерфейс. Програмна реалізація гри. Інструкція користувача.

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

  • Створення гнучкої клієнт-серверної системи інформаційної підтримки підвищення кваліфікації персоналу ДП № 9 з застосуванням мови програмування PHP, системи керування базами даних MySQL. Розробка алгоритмів, програмна реалізація основних процедур системи.

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

  • Широкі можливості по використанню комп'ютерних навчальних систем. Розробка навчальної системи мультимедійного посібника з дисципліни "Інформатика і ОТ" на тему "Особливості мови програмування С++. Вказівники". Вимоги до розробки навчальної програми.

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

  • Основні принципи об’єктно-орієнтованого програмування. Типові середовища програмування та особливості мови С++. Етапи проектування БД. Розробка програмного забезпечення для реалізації створення бази відеофільмів. Основні положення та моделі БД.

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

  • Вибір мови програмування та середовища розробки. Основні можливості мови php та сервера MySQL. Основні переваги середовища розробки NetBeans. Macromedia Dreamweaver як один з популярних середовищ розробки сайтів. Розробка програмного коду сайту.

    контрольная работа [3,0 M], добавлен 16.02.2013

  • Прості та умовні оператори мови С++. Робота з двовимірними масивами. Пошук та сортування даних. Робота з файлами та з динамічними структурами даних. Опис мови програмування Delphi. Складення програми до розроблених алгоритмів. Організація циклів.

    отчет по практике [4,3 M], добавлен 28.08.2014

  • Проектування бази даних (БД). Проектування логічної моделі БД. Реалізація БД та створення таблиць. Встановлення зв’язків, вибір мови та середовища програмування. Опис функціональних елементів та реалізація програми. Опис та тестовий приклад програми.

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

  • Модель аналізу-синтезу компіляції. Формальний опис вхідної мови програмування. Вибір технології програмування, проектування таблиць транслятора та вибір структур даних. Опис програми реалізації лексичного аналізатора. Розробка дерев граматичного розбору.

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

  • Історія створення мови С#. Аналіз алгоритмів кодування даних. Розробка системи в середовищі Visual Studio 2008 Express. Схема шифрування алгоритму DES. Дослідження алгоритму RC2. Приклади хешів RIPEMD-160. Програмна реалізація основних процедур системи.

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

  • Методи місцевизначення рухомих об’єктів і їх застосування у навігаційних системах. Режим диференціальної корекції координат. Розробка структури AVL системи і алгоритмів функціонування її окремих модулів. Встановлення апаратного і програмного забезпечення.

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

  • Дослідження класифікації автоматизованих інформаційних систем. Обґрунтування вибору мови і системи програмування. Програмне забезпечення та опис компонентів середовища. Інтерфейс програмного комплексу. Розрахунок повної собівартості програмного продукту.

    дипломная работа [584,1 K], добавлен 26.06.2015

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

    дипломная работа [5,6 M], добавлен 02.07.2015

  • Проектування інтерфейсу програми. Вимоги до продукту. Вхідні дані на розробку автоматизованої системи. Вибір середовища програмування. Розробка структури бази даних. Функціональна та логічна структура програми. Розробка структури таблиць бази даних.

    курсовая работа [43,1 K], добавлен 30.06.2015

  • Методика розробки компілятору з вхідної мови програмування Pascal, оболонка, якого розроблена в середовищі програмування Borland C під операційну систему Windows. Блок-схема програми. Розробка оптимізатора та генератора коду. Тестування компілятора.

    курсовая работа [218,6 K], добавлен 04.06.2011

  • Реалізація портальної системи, на основі якої працює веб-сайт ПП "Агромат". Розробка системи адміністрування веб-сайтом для редагування контенту веб-сайту за допомогою веб-браузера з використанням мови програмування РНР та сервера баз даних MySQL.

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

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

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

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