Написання гри на мові С++

Автор работы: Пользователь скрыл имя, 14 Ноября 2013 в 13:44, курсовая работа

Описание работы

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

Файлы: 1 файл

Документация.doc

— 273.50 Кб (Скачать файл)


ВСТУП

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

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

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

На сьогодні багато об'єктно-орієнтоване  програмування має велике поширення. ООП – одна з парадигм програмування, яка розглядає програму як множину об'єктів, що взаємодіють між собою, на відміну від традиційних поглядів, коли програму розглядали як набір підпрограм, або як перелік інструкцій комп'ютеру. Відповідно до парадигми об'єктно-орієнтованого програмування, кожний об'єкт здатний отримувати повідомлення, обробляти дані, та надсилати повідомлення іншим об'єктам.

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

Таке об’єднання називають  інкапсуляцією.

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

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

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

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

 

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

1.1 Ключові  поняття ООП

Ключові поняття  ООП – клас та об’єкт. Клас –  це тип, який описує роботу об’єктів –  екземплярів. Клас можна порівняти  з кресленням, згідно з яким створюються об’єкти. Звичайно класи проектують таким чином, щоб їх об’єкти відповідали об’єктам предметної області. Об’єкт поряд з поняттям «клас» є важливим поняттям об’єктно-орієнтованого підходу в програмуванні. Під об’єктом розуміємо деяку сутність у віртуальному просторі, яка володіє визначеним станом і поведінкою. Як правило, при розгляді об’єктів виділяється те, що об’єкти належать одному чи декільком класам, які, у свою чергу, визначають поведінку (є моделлю) об’єкта. Об’єкт як структура даних являє собою іменований програмний компонент, який містить власні локальні дані й здатний виконувати певні дії над ними.

 

1.2 Мова C++

 

C++ — мова програмування  високого рівня з підтримкою  декількох парадигм програмування:  об'єктно-орієнтованої, узагальненої та процедурної.

С++ додає до С об'єктно-орієнтовані можливості. Він вводить класи, які забезпечують три найважливіші властивості ООП: інкапсуляцію, успадкування і поліморфізм.

Стандартна бібліотека С++ включає стандартну бібліотеку С з невеликими змінами, які роблять її відповіднішою для мови С++. Інша велика частина бібліотеки С++ заснована на Стандартній Бібліотеці Шаблонів (STL). Вона надає такі важливі інструменти, як контейнери (наприклад, вектори і списки) і ітератори (узагальнені вказівники), що надають доступ до цих контейнерів як до масивів. Крім того, STL дозволяє схожим чином працювати і з іншими типами контейнерів, наприклад, асоціативними списками, стеками, чергами.

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

Так само, як і в С, можливості бібліотек активізуються використанням директиви #include для включення стандартних файлів. Всього в стандарті С++ визначено 50 таких файлів.

STL до включення в  стандарт С++ була сторонньою розробкою, на початку — фірми HP, а потім SGI. Стандарт мови не називає її «STL», оскільки ця бібліотека стала невід'ємною частиною мови, проте багато людей до цих пір використовують цю назву, щоб відрізняти її від решти частини стандартної бібліотеки (потоки введення/виведення (Iostream), підрозділ С тощо). Проект під назвою STLport, заснований на SGI STL, здійснює постійне оновлення STL, IOstream і рядкових класів. Деякі інші проекти також займаються розробкою приватних застосувань стандартної бібліотеки для різних конструкторських завдань. Кожен виробник компіляторів С++ обов'язково поставляє якусь реалізацію цієї бібліотеки, оскільки вона є дуже важливою частиною стандарту і широко використовується.

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

В 1998 році мова С++ була стандартизована Міжнародною організацією стандартизації під номером 14882:1998 — Мова Програмування С++. В даний час робоча група МОС працює над новою версією стандарту під кодовою назвою C++09 (раніше відомий як C++0X), який має вийти в 2009 році.

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

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

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

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

Мова С++ багато в чому є надмножиною С. Нові можливості С++ включають оголошення у вигляді виразів, перетворення типів у вигляді функцій, оператори new і delete, тип bool, посилання, розширене поняття константності та змінності, функції, що підставляються, аргументи за умовчанням, перевизначення, простори імен, класи (включаючи і вС пов'язані з класами можливості, такі як успадкування, функції-члени (методи), віртуальні функції, абстрактні класи і конструктори), перевизначення операторів, шаблони, оператор ::, обробку винятків, динамічну ідентифікацію і багато що інше. С++ є також мовою строгого типування і накладає більше вимагань щодо дотримання типів, порівняно з С.

У С++ з'явилися коментарі у вигляді подвійної косої риски («//»), які були в попереднику С — мові BCPL.

Деякі особливості С++ пізніше були перенесені в С, наприклад ключові слова const і inline, оголошення в циклах for і коментарі в стилі С++ («//»). У пізніших реалізаціях С також були представлені можливості, яких немає в С++, наприклад макроси vararg і покращена робота з масивами-параметрами.

Основним способом організації інформації в С++ є класи. На відміну від типу структура (struct) мови С, що складається тільки з полів, клас (class) С++ складається з полів і функцій-членів або методів (англ. member functions). Поля бувають публічними (public), захищеними (protected) і приватними (private). У С++ тип структура аналогічний типу клас, відмінність в тому, що за умовчанням поля і функції-члени у структури публічні, а у класу — приватні.

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

Використовуючи інкапсуляцію, автор класу може захистити свої дані від некоректного використання. Крім того, вона замислювалася для  полегшення сумісної розробки класів. Малося на увазі, що зміна способу зберігання даних, якщо вони оголошені як захищені або приватні не вимагає відповідних змін в класах, які використовують змінений клас. Наприклад, якщо в старій версії класу дані зберігалися у вигляді лінійного списку, а в новій версії — у вигляді дерева, ті класи, які були написані до зміни формату зберігання даних, переписувати не буде потрібно, якщо дані були приватними або захищеними (у останньому випадку — якщо використовуючі класи не були класами-нащадками), оскільки жоден з них цих класів не міг би безпосередньо звертатися до даних, а тільки через стандартні функції, які в новій версії мають вже коректно працювати з новим форматом даних. Навіть оператор доступу operator [] може бути визначений як така стандартна функція.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2 ПОСТАНОВКА ЗАДАЧІ

 

 Написання гри на мові С++. Має бути розроблено об’єктно-орієнтоване проектування (з використанням UML) и програмне забезпечення с використанням принципів ООП (інкапсуляції, успадкування, поліморфізму), з анімацією зображення екземпляра класу.

Після запуску програми на початку  з’являється заставка, після неї  меню, з якого можна або розпочати  саму гру натиском клавіші “Enter”, або вийти  неї натиском клавіші  “Esc”, а також побачити десятку  кращих результатів.

За правилами гри треба рухати квадратиком вліво чи вправо за допомогою клавіш “←” чи “→”, зістрибуючи с одних на інші острівки, які рухаються угору. Мета – протриматися якомога довше. Під час гри про поточний рахунок (кількість очок) буде інформувати лічильник. Якщо ж квадратик добереться до верху чи впаду вниз, то гра завершиться: вам запропонують ввести ім’я для збереження рахунку, якщо він увійде до десятки кращих, та знову з’явиться меню.

 

3 РОЗРОБКА АЛГОРИТМУ

 

В ході написання програми будли  розроблені такі алгоритми:

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рисунок 3.1 – Блок-схема  головного алгоритму 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рисунок 3.2 – Блок-схема алгоритму функції Up() класу TIsland

 

 

 


 

 

 

Рисунок 3.3 – Блок-схема алгоритму функції Load() класу THighScore

4 ОПИС ПРОГРАМИ

 

 4.1 Загальні відомості

 

 SHAFT – комп’ютерна гра. Мінімальні системні вимоги: операційна система Windows XP або DOS, монітор з мінімальним розширенням екрану 640 на 480 пікселів, відеокарта, клавіатура.

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

Повідомлення про помилку можуть виникати, якщо в папці із грою відсутній файл драйверів “EGAVGA.BGI” або файл із даними про десятку кращих результатів “SCORE.DAT”.

 

         4.2 Виклик і завантаження

       

          Програма запускається за допомогою файла «SAFT.EXE», для того щоб вона запускалась без помилок файл “EGAVGA.BGI” повинен бути в папці з грою.

 

         4.3 Призначення і логічна структура

 

  Призначення програми – комп’ютерна гра, призначена для розважальних цілей.

 

Застосунок складається  із чотирьох головних функцій: Introduction(), Logo(), graph() і Play().

У функції Introduction() промальовується  заставка, що з’являється на початку  гри.

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

Функція graph() використовується для ініціалізації графічного режиму.

Функції Play() – це безпосередньо  гра, у цій функції створюються  об’єкти класів та робота з ними.

Об’єкт класу THighScore створюється  у глобальній області.

Десятка кращих результатів зберігається у файлі “Score.dat”.

 4.4  Обєктна модель

 

           У грі присутні три класи.

Перший клас – TIsland. У цьому класі описані функції малювання, руху вгору острівку. Малюється та затирається острівок за допомогою функції Write(int k), де параметр k – колір острівку. Рухається острівок за допомогою функції Up().

Другий клас – TBar. Це клас гравця, квадрат. Цей клас промальовує рух вгору та вниз, реакцію на натискання клавіш ← та → гравцем, перевіряє, чи є під квадратом острівок (колір під квадратом).

Третій клас – THighScore. Він зберігає та завантажує десятку кращих результатів із файлу, додає найкращий рахунок у десятку.

  Об’єктно-орієнтоване проектування:

 


 

 

 

          

 

 

 

 

 

Рисунок 4.1 – діаграми класів TBar і TIsland


 

 

 

 

 

 

Рисунок 4.2 – діаграма класу THighScore


Рисунок 4.3 – діаграма прецедентів

 

4.5  Інтерфейс користувача

 

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

Информация о работе Написання гри на мові С++