
- •Техніко-економічне обґрунтування технічного завдання на курсову роботу
- •Вимоги користувача
- •1.2 Аналіз предметної області
- •1.3 Вибір методу вирішення основної задачі
- •Розробка алгоритмів розв’язку задачі
- •Алгоритм побудови робочого поля
- •Перевірка наступного ряду на наявність вільного місця для фігури;
- •2.2 Покроковий алгоритм
- •2.3 Розробка меню
- •3. Програмна реалізація
- •3.1 Вибір мови програмування
- •3.2 Програмування інтерфейсу
- •3.3 Розробка і налагодження тексту програми
- •4. Тестування, перевірка правильності роботи
- •4.1 Тестування програми
- •4.2 Аналіз результатів роботи
- •5. Інструкції з експлуатації
- •5.1 Програмно-апаратні вимоги
- •5.2 Порядок роботи з програмою
- •Висновки
- •Література
- •Додаток а. Код програми
ЗАТВЕРДЖЕНО
Наказ Міністерства освіти і науки,
молоді та спорту України
29.03.2012 N 384
Форма N H-6.01
Вінницький національний технічний університет
(повне найменування вищого навчального закладу)
Кафедра програмної інженерії
(повна назва кафедри, циклової комісії)
КУРСОВИЙ ПРОЕКТ
з «Алгоритми та структури даних»
(назва дисципліни)
на тему: Розробка алгоритму і програми для варіанту гри «Тетріс»
Студента (ки) ІІ курсу 1ПІ-11б (д/н) групи
напрямку підготовки: 6.050103 «Програмна інженерія»
Доценко Т. В.
(прізвище та ініціали)
Керівник :
(посада, вчене звання,науковий ступінь, прізвище та ініціали)
Національна шкала_________________________
Кількість балів:________ Оцінка: ECTS________
Члени комісії _____________ _____________________
(підпис) (прізвище та ініціали)
_____________ _____________________
(підпис) (прізвище та ініціали)
_____________ _____________________
(підпис) (прізвище та ініціали)
м. Вінниця – 2012 рік
Анотація
Курсова робота присвячена розробці логічної гри «Тетріс», у складі: набір об’єктних моделей, програмний код. Виконані усі необхідні роботи з проектування архітектури гри, аналізуються вимоги до неї, описано особливості реалізації, кодування, тестування програми. При написанні програми гри використано об’єктно-орієнтованну мову С++.
Зміст
В даній курсовій роботі реалізується гра «Тетріс». Зміст гри полягає у тому, що випадков фігурки падають зверху в прямокутний стакан висотою 10 і шириною 20 кліток. У польоті гравець може повертати фігурку і рухати її по горизонталі, але не уповільнювати політ. Фігурка летить, поки не натикнеться на іншу фігурку або на підлогу стакана. Якщо при цьому заповнився горизонтальний ряд з 10 кліток, він пропадає і все, що вище за нього, опускається на 1 клітку.
Призначення програми - розвага граючих, вдосконалення їх координації і логічного мислення. Програма може застосовуватися в якості ігрової на різних типах персональних комп'ютерів.
Історія гри «Тетріс» починається в червні 1985 року. «Тетріс» був винайдений Олексієм Пажитновим, а потім був інтегрований на ПК IBM Вадимом Герасимовим. Після чого гра «Тетріс» почала поширюватися по всій Москві, а потім вже і по всьому світу. Спочатку вона була розповсюджена в Угорщину, де угорські програмісти інтегрували «Тетріс» для Apple II і Commodore_64[1].
Гра ставала все більш відомою в світі, і кілька представників великих компаній зверталися до автора «Тетріса», щоб купити права на розповсюдження гри. Олексій підписує контракт з Mirrorsoft UK і Spectrum Holobyte, надаючи їм права на комп'ютерну версію «Тетріс». Гра набула популярності серед населення і стала самою прибутковою комп'ютерною грою в Англії і США в 1988 році.
Існує безліч способів реалізації даної програми. Їх можна розділити по функціональності:
1) математичний опис руху фігур;
2) графічне відображення руху фігур;
У математичній частині розглядаються основні принципи і закони руху фігур. Це найважливіша частина програми. Від неї залежить правильна працездатність програми. Для її реалізації можна використовувати різні алгоритми. Наприклад описати рух фігури двома лінійними функціями. Одна буде відповідати за розташування фігури по горизонталі, інша по вертикалі. Міняючи за певні проміжки часу значення змінних цих функцій, буде змінюватися положення фігури на площині. Третя функція буде відповідати за очистку повністю заповнених горизонталей. Основними недоліками цього способу є оголошення великої кількості змінних, що відповідають за опис вже впалих фігур, і створення великої кількості додаткових функцій, що відповідають за поворот фігур навколо своєї осі.
Інший спосіб математичного опису руху фігур і заповнення поля «Тетрісу» - створення двовимірної матриці n * k. Через певний проміжок часу буде змінюватися значення, відповідне до положення фігури на площині і вже впалих фігурах. Тобто значення матриці розташоване на n-ому рядку і в k-ому стовпці, буде відповідати частині фігури розташованої на n-ій горизонталі і k-ій вертикалі.
Наведені вище способи не є єдиними. Вони лише найбільш популярні в реалізації програми "Тетріс" серед програмістів.
Для графічного відображення фігур і полів тетрісу також існує багато різних способів. Наприклад, рухати на площині вже готові малюнки фігур "Тетріс". Тоді малюнки фігур будуть зберігатися окремими графічними файлами в пам'яті комп'ютера. Складність даного способу реалізації полягає у відображенні вже впалих фігур і відображення повороту фігури навколо своєї осі. Для цього доведеться постійно створювати новий малюнок поля з малюнків, які зберігаються в пам'яті комп'ютера.
Ще один спосіб графічного відображення фігур і поля тетрісу - використання готових елементів мови програмування. Найбільш часто для цих цілей використовують таблиці. Змінюючи колір комірок таблиці через певні проміжки часу можна відобразити на екрані рух фігур і заповнені області поля. Також можливе використання таких елементів, як кнопки. Змінюючи їх колір, також можна відобразити рух фігур і заповнені області. Але у такого способу є величезний мінус - оголошення великого числа таких елементів.
Так само можливе використання вбудованих графічних можливостей мови програмування. При малюванні фігур тетрісу можна використовувати просте зображення квадрата. Для його зображення необхідно знати лише координати верхнього лівого кута, а також значення ширини квадрата.
При реалізації програми буде використовуватись об’єктно-орієнтований підхід, важливим наслідком чого є можливість формування такої структури програми, коли додавання нових компонентів при її подальшому розвитку не буде впливати на існуючі компоненти, або такий вплив буде зведено до мінімуму.
Для кодування гри буде обрана мова С++, що сприяє написанню надійного програмного продукту.
Техніко-економічне обґрунтування технічного завдання на курсову роботу
Вимоги користувача
Основним завданням даного курсового проекту є програмна реалізація одного із варіантів гри «Тетріс». Вхідними даними у програмі є введення варіантів швидкості руху фігур тетраміно зверху вниз, зсув фігур тетраміно по горизонталі вправо і вліво, а також поворот фігур тетраміно навколо своєї осі. Швидкість руху обирається користувачем на панелі меню.
Користувачу повинно бути доступне ручне налаштування роботи програми, а саме: розміщення фігур тетраміно та вибір рівня швидкості фігур тетраміно – користувач повинен сам вирішувати ці питання на власний розсуд.
Дані про «швидкість» користувача повинні виводитись у діалоговому вікні після завершення гри.
Інтерфейс у програмі та власне сам принцип роботи з нею буде простим. Програма не матиме повноекранний режим, розмір вікон не можна буде змінювати. Будуть реалізовані власні елементи управління, такі як вихід з програми, згортання програми та інше.
1.2 Аналіз предметної області
Метою дано курсової роботи є розробка гри „Тетріс”. Вона відноситься до логічних ігор, які допомагають розвинути реакцію, тренують логіку. При тривалій роботі за комп'ютером виникає бажання трохи відпочити. Для цієї мети не підходять ігри типу стратегій, бо для них потрібно багато часу, а для 5-10 хвилинного відпочинку цілком підійде саме «Тетріс». У стандартному пакеті операційних систем даної гри немає, тому виникла необхідність у її створенні.
Зміст гри полягає у прагненн щільно зайняти ігрове поле падаючими геометричними фігурами, змінюючи їх орієнтацію у просторі, домагаючись відсутності пропусків в кожному рядку.
Фігури не повинні виходити за кордони ігрового поля, вони мають переміщуватись та перевертатись. Для надання більшої привабливості зовнішньому вигляду ігрового поля при написанні гри потрібно використовувати яскраву графіку. Інтерфейс програми, що розроблюється повинний бути зручний і зрозумілий користувачу.
Програма повинна реагувати на натискання клавіш клавіатури, виводячи зображення на екран.
При реалізації програми було вирішено використовувати об'єктно-орієнтований підхід, що дозволить уникнути проблем проектування, характерних для процедурного підходу. Важливим наслідком цього є можливість формування такої структури програми, коли додавання нових компонентів при її подальшому розвитку не буде впливати на існуючі компоненти, або такий вплив буде зведено до мінімуму.
До ігор такого типу пред‘являються такі вимоги: використання простих засобів управління; зручний графічний інтерфейс; поступове ускладнення гри при наборі певно кількості очок. Під час виконання програма повинна виконуватися коректно і не приводити до збоїв.
1.3 Вибір методу вирішення основної задачі
При розробці програми гри "Тетріс" для опису математичної частини алгоритму був використаний двовимірний масив, розмірністю 20 * 10. Для створення графічної частини програми використовувалися графічні можливості мови C ++.
Масив - це набір об'єктів однакового типу, розташованих один за одним у пам'яті комп'ютера. Масив можна описати наступним чином:
тип_даних ім'я масиву [розмір_масиву]
Кожний масив має ім'я. Значення індексу повинні знаходитись у діапазоні від нуля до величини, що на одиницю менша розміру масиву, вказаного під час його опису. Тип_даних задає тип елементів масиву. Розмір_масиву - константа чи константний вираз, що задає кількість елементів масиву. Ім'я масиву є вказівником-константою, що дорівнює адресу початку масиву (першого байта першого елемента масиву).
Доступ до окремих елементів масиву може здійснюватись або за допомогою імені масиву та індексу (порядковому номеру) або за вказівником (операція *).[2]
У створенні алгоритму використовувався масив як математичний аналог поля "Тетріс". Кожна комірка масиву відповідає певній області поля гри. Кожна область поля гри може бути заповнена фігурою або бути порожньою. Відповідно, кожна область поля може приймати два значення. Для цих цілей можна використовувати логічні змінні. Кожна фігура має певну форму і займає декілька областей поля гри. Отже в масиві, комірки, які відповідають заповненим областям поля, матимуть логічне значення true. Для комірок, які відповідають порожнім областям, буде присвоєно логічне значення false. Кожна горизонталь поля тетрісу відповідає рядку двовимірного масиву, а вертикаль - стовпцю. Рух фігур проводиться через рівні проміжки часу, тобто відбувається повторення алгоритму через рівні проміжки часу. Рівні проміжки часу можна забезпечити за допомогою використання елементу мови С ++ таймер (який був використаний в даній програмі). Через кожний тік таймера буде відбуватися повторення алгоритму руху фігури.
Щоб гра була працездатною, необхідно кожній комірці масиву кожний тік таймера присвоювати значення, відповідні областям поля. Так як кількість комірок велика (їх 200), зручно було використовувати циклічні конструкції. Це дозволило скоротити програмний код і кількість помилок в ньому. Для цих цілей був використаний оператор for.
Короткостроковою метою гри тетріс є повне заповнення фігурами горизонталі для подальшого їх очищення та отримання балів. Для цього необхідно було внести в програму функцію перевірки заповнення горизонталей. Для масиву це представляється як перевірка осередків кожного рядка на однаковість значень, дану задачу вирішує умовна конструкція. У даній роботі був використаний оператор if.
Для зображень фігур тетраміно використовується двохвимірний масив 4х4. Гра тетріс вимагає зображення областей поля у вигляді квадратів. Для цього була використана структура мови C ++ Rectangle (прямокутник). Для її опису необхідні координати верхнього лівого кута прямокутника (що відповідає значенням вертикалі і горизонталі поля гри), а також розміри його сторін.
Так як гра тетріс побудована на використанні фактора часу, необхідно постійно графічно оновлювати поле цієї гри.
Наведені вище принципи і елементи стали основою алгоритму.