Программирование игры "Змейка"

  Зміст

  Вступ…………………………………………………………....3. 

  1.ТЕОРЕТИЧНА  ЧАСТИНА………………………………….5. 

    1.1.Постановка  задачі………………………………………....5. 

  2.ПРАКТИЧНА  ЧАСТИНА…………………………………...6. 

    2.1.Архітектура  програми…………………………………….6. 

    2.2.Опис  програми………………………………………….....8. 

    2.3.Контрольний приклад……………………………………… 

   та аналіз результатів машинного експерименту……………13. 

  ВИСНОВКИ……………………………………………………18. 

  СПИСОК  ВИКОРИСТАНОЇ ЛІТЕРАТУРИ…………………18. 

  ДОДАТКИ……………………………………………………...19. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  Вступ

                     Центральним поняттям програмування є, безперечно , поняття

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

   

        

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

               Для реалізації поставленої задачі вибрано середовище Turbo Pascal . Алгоритмічна мова Pascal була створена Н. Віртом на початку 70-х років. Завдяки зусиллям  розробників ця мова програмування стала потужним інструментом професійних програмістів, не втративши простоти і ясності, властивих цій мові від народження . 
 
 

              Розробник системи Turbo Pascal – фірма Borland International виникла в 1984 році і за порівняно короткий час неодноразово дивувала користувачів персональних ЕОМ своїми Turbo системами. Було випущено кілька версій Turbo Pascal:3.0,4.0,5.0,5.5,6.0,7.0, Pascal for Windows, Borland Pascal. 
 
 

  Головні особливості середовища Turbo Pascal: 

  ► широкий спектр типів даних, можливість обробки рядкових та структурних типів даних; 

  ► достатній набір операторів управління розгалуженнями та циклами; 

  ► добре розвинутий апарат підпрограм та зручні конструкції роботи з файлами; 

  ► великі можливості управління усіма  ресурсами ПЕОМ;

  ► різноманітні варіанти стикування з  мовою Асемблера; 

  ► підтримка ідей об’єктно—орієнтованого програмування (ООП). 
 

             Саме з огляду на ці особливості програмна реалізація курсового проекту було здійснено в середовищі Turbo Pascal. 
 

             Курсовий проект складається зі вступу , двох розділів , висновків , списку використаної літератури , графічної частини та додатків. Текст пояснювальної записки набрано та розрдуковано з використанням текстового редактора Word. Графічна частина виконана з допомогою графічного редактора Visio. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  1.Теоретична  частина. 

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

  Розробка  програми-ігри «Змійка» для курсового проекту. Ідея програми полягає в тому, щоб «змія» могла б переміщатися по екрану за допомогою стрілок ←, ↑, →, ↓ та при набирані очок збільшувалась у довжину, при зіткненні зі своїм «хвостом» завершувалася гра. При завершені гри повинна виводитись підказка – «Завершити гру Y/N?» при натисканні клавіші «Y» гра просить ввести ваше ім’я та записує результати гри під введеним ім’ям в  текстовий файл Result.dat. При натисканні клавіші «N» гра розпочинається з початку.

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

              Мета написання курсового проекту — розробка програми-гри «Змійка». 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  2.Практична частина. 

  2.1.Архітектура  програми 

             Для реалізації поставленої задачі розроблено програму ZMEJKA.PAS (лістинг програми представлено в додатку 3). 

           Програма складається з головного блоку та процедур: Menu, Ramka, Symbol, Rezultat, OverRes, GoUp, GoDown, DrawSnake, AddBonus, Kill, Move та модуля CRT.TPU, який забезпечує роботу з клавіатурою та екраном. Модуль CRT.TPU входить в стандартний набір модулів компілятора Borland Pascal 7.0. 

    Запуск програми  здійснити двома способами: 

        ▄  з головного меню інтегрованого  середовища Borland Pascal шляхом вибору опції Run (попередньо програма повинна бути завантажена в ОП –F10, File-Open-ZMEJKA.PAS);

        ▄   з середовища ОС Windows XP Services Pack 2 шляхом запуску ZMEJKA.EXE . 

  Програма  використовує одинадцять  процедур: Menu, Ramka, Symbol, Rezultat, OverRes, GoUp, GoDown, DrawSnake, AddBonus, Kill, Move.  

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

  VERY SLOW

  SLOW

  MEDIUM

  HIGH

  VERY HIGH

  RESULT

   

        При натисканні стрілочки ↑ або ↓ виконується процедура – GoUp або GoDown. Ці процедури дозволяють переходити по пунктам меню вверх або вниз.

  Процедура Ramka – виводить написи меню та малює навколо них рамку.

  Процедура Symbol – малює символ на заданій позиції.

  Процедура Rezultat – після закінчення гри ця процедура записує результат гри у файл Result.dat, якщо цього файлу не існує він створюється в тій же папці з програмою-грою.

  Процедура OverRes – виводить результат з файлу Result.dat на екран, якщо цього файлу не існує, то виводиться надпис «Результатів немає».

  Процедура DrawSnake – малює змійку на екрані.

  Процедура AddBonus – малює на екрані символи «@» - це символи(бонуси), які «змійка» повинна збирати та поповнює очки.

  Процедура Kill – знищує «змійку». Змійка знищується в разу зіткнення зі своїм «хвостом» або при натисканні клавіші Esc.

  Процедура Move – задає координати «змійки». 

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

    Блок –схема головного блоку  програми представлена в додатку 1. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  2.2.Опис  програми 

  Програма  складена , відкомпільована і відлагоджена в середовищі Bolard Pascal 7.0. 

     На  початку програми, відповідно до вимог технології програмування, знаходиться вступний коментар до програми , а решта операторів програми мають таке призначення: 

  Оператор                                         Призначення  оператора

  001                 Заголовок програми

  002                 Підключення зовнішніх модулів  Crt( керування дисплеєм та                              

                         клавіатурою)

  003                 задає глобальну мітку

  004-008          Описує  тип запис

  009-010          Описує тип файл запису

  011-020          Описання глобальних змінних

  021-046          Процедура Ramka

  021                 Заголовок процедури

  022                 Початок тіла процедури

  023-024,042,

  044     Задає коліри тексту та фону екрану

  025,027,029,

  031,033,035,

  037,039,041,

  045     Задає координати курсора клавіатури

  026,028,030,

  032,034,036,

  038,040,043   Вивід рамки на екран

  046     Кінець процедури Ramka 

  047                 Заголовок процедури Symbol

  048     Початок тіла процедури 

  049     Встановлення координатів курсора клавіатури

  050     Виведення символа

  051     Встановлення курсора клавіатури на початок першої стрічки

  052     Закінчення процедури Symbol

  053     Загловок процедури Rezultat

  054     Описання змінних в процедурі

  055     Початок тіла процедури

  056     Директива компілятора, вона вимикає автоматичний контроль помилок I/O

  057     Відкриття файлу на запис

  058     Директива компілятора, вмикає автоматичний контроль помилок I/O

  059     Перевірка чи існує файл, якщо ні, то створюємо його

  060     Очистка екрану

  061     Встановлення координатів курсора клавіатури

  062     Задає зелений колір тексту

  063     Виведення тектсу

  064     Запис введенного тексту в змінну типу запис

  065-066    Присвоєння значень змінним типу запис

  067     Встановлення курсора клавіатури в текстовому файлі на кінець

  068     Запис одного файлу в інший

  069     Закриття файлу

  070     Задає колір тексту

  071     Вихід з програми

  072     Закінчення процедури Rezultat    

  073     Заголовок процедури OverRes

  074-075     Описання змінних в процедурі

  076     Початок тіла процедури

  077     Очистка екрану

  078     Директива компілятора, вона вимикає автоматичний контроль помилок I/O

  079     Відкриття файлу на запис

  080     Директива компілятора, вмикає автоматичний контроль помилок I/O

  081     Перевірка чи існує файл

  082     Задає координати курсора клавіатури

  083     Задає зелений колір тексту

  084     Виведення тексту

  085     Зарезервоване слово «інакше», якщо файл існує

  086     Початок оператора

  087     Задає зелений колір тексту

  088     Присвоєння значення змінній

  089     Цикл з передумовою, виконується поки не достигне кінця файлу

  090     Читання одного файлу в інший

  091-093    Задає координати курсора клавіатури та виводить значення змінних

  094     Присвоєння зачення змінній

  095     Кінець циклу з передумовою

  096     Закриття файлу

  097     Закінчення умовного оператора «інакше»

  098     Цикл з постумовою, повторюється поки не буде натиснута люба клавіша

  099     Задає колір тексту

  100     Закінчення процедури OverRes    

  101     Заголовок процедури GoUp

  102     Початок тіла процедури

  103     Звернення до процедури Ramka з заданими параметрами

  104    Зменшуємо значення змінної MenuSelect на одиницю

  105     Умова, якщо MenuSelect<1 , то MenuSelect = 6

  106-107    Задає коліри тексту та фону екрану

  108     Задає координати курсору клавіатури

  109     Виводить текст, який міститься в масиві стрічок MenuItem[MenuSelect]

  110-111    Задає коліри тексту та фону екрану

  112     Задає координати курсору клавіатури (1,1)

  113     Закінчення процедури GoUp

  114     Заголовок процедури GoDown

  115     Початок тіла процедури

  116     Звернення до процедури Ramka з заданими параметрами

  117     Збільшуємо на одиницю значення змінної MenuSelect

  118     Умова, якщо MenuSelect>6 , то MenuSelect = 1

  119-120    Задає коліри тексту та фону екрану

  121     Задає координати курсору клавіатури

  122     Виводить текст, який міститься в масиві стрічок MenuItem[MenuSelect]

  123-124    Задає коліри тексту та фону екрану

  125     Задає координати курсору клавіатури (1,1)

  126     Закінчення процедури GoDown

  127     Заголовок процедури Menu

  128     Опис мітки

  129-130    Опис змінних процедури

  131     Початок тіла процедури

  132     Мітка

  133     Присвоєння значення змінній. Задає довжину змійки

  134     Присвоєння значення змінній. Початковий напрямок змійки

  135-136    Присвоєння значення змінній. Координати голови змійки

  137     Присвоєння значення змінній. Очки

  138     Присвоєння значення змінній. Координати курсору клавіатури

  139     Очищаємо екран

  140     Звернення до процедури Ramka з заданими параметрами

  141-142    Задає коліри тексту та фону екрану

  143     Задає координати курсору клавіатури

  144     Виводить текст, який міститься в масиві стрічок MenuItem[MenuSelect]

  145-146    Задає коліри тексту та фону екрану

  147     Задає координати курсору клавіатури

148-                цикл с постумовою. Вмістить в себе умову вибору, яка викконує процедуру                        -                      GoUp, якщо була натиснута клавіша клавіатури - ↑, або процедуру GoDown, -                      якщо була натиснута клавіша клавіатури -↓. Цикл завершується, тоді коли - 154                 будуть натиснути  клавіші Enter або Esc.                

155     Перевіряє, якщо була натиснута клавіша Esc, відбувається вихід з програми

156-     Умова вибору. Перевіряє знащення змінної MenuSelect, та задає за цим

163                 значенням складність гри.

164      Очищує екран

165     Закінчення процедури Menu

166     Заголовок процедури DrawSnake

167     Початок тіла процедури

168,180    Задає колір тексту

169,171,173,

175,177    Задає координати курсору клавіатури

170,172,174,

176,178    Виводить текст

179     Виводить символ змійки в початку стрічки

181-183    Цикл малює змійку

184     Задає колір тексту

185-186    Малює символи бонусу «@»

187     Задає колір тексту

188     Задає координати курсору клавіатури

189     Закінчення процедури DrawSnake

190     Заголовок процедури AddBonus

191     Опис мітки

192-193    Описує змінні процедури

194     Початок тіла процедури

195     Мітка

    196     Задає змінній нульове значення

    197-198    Задає координати бонусу

199-204   Цикли, перевіряють, щоб бонуси були розміщенні не на самій змійці

205     Задає колір тексту

206     Задає координати курсору клавіатури

207     Закінчення процедури AddBonus

208     Заголовок процедури Kill

209-210    Опис змінних процедури

211     Опис мітки

212      Початок тіла процедури

213-218    Присвоєння масиву символів значення 

219     Задає колір тексту

220-223    Цикл, малює мертву змійку

224     Мітка

225     Очищує екран

226,237    Задає колір тексту

227,229,231,

233,235,238,

240,242,244,

246,248    Задає координати курсору клавіатури

228, 230,232,

234,236,239,

241,243,245,

247    Виводить на екран текст      

249    Чекає на натиснуту клавішу клавіатури

250    Умова вибору, якщо натиснута клавіша ‘Y’, то продовжуємо гру, якщо була -                     натиснута клавіша ‘N’, то програма запросить ввести ім’я і запишить -      --- 254                результати у файл Result.dat

255    Задає колір тексту

256    Задає координати курсору клавіатури

257    Закінчення процедури Kill

258    Заголовок процедури Move

259     Початок тіла процедури

260    Малює символ пробілу

261-270   Умова вибору. Визначає  направлення змійки за натиснутою клавішею

271-      Умови. Якщо змійка виповзає за межі екрану, переводится на початок

274                стрічки.

275-     Цикл перевірки, чи «вкусила» змійка себе за хвіст,якщо так, виконується 278                 процедра Kill

279-       Цикл перевірки, чи «з’їла» змійка бонус, якщо так, то змійка збільшується в 287              довжині на одиницю, та збільшуються очки      

288-294    Цикл. Щоб змійка не «розірвала» свій хвіст.

295     Виконується процедура DrawSnake

296     Задає колір тексту

297     Задає координати курсору клавіатури

298     Закінчення процедури Move

299     Початок тіла основної програми

300     Зв’язує файлову змінну з файлом на диску

301     Задає режим відображення тексту на екрані

302     Ініціює фунцію случайних чисел

303     Очищує екран

304     Цикл. Виводить бонуси на екран перед початком гри

305-310    Задає масиву стрічок значення.

311     Задає початкове значення змінній MenuSelect

312     Очищує екран

313      Виконується процедура Menu

314-318    Цикл, задає початкові координати змійки,щоб вона не «розбіглася»

319     Мітка

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

328     напрямок змійки

329,333    Задається колір тексту

330,334    Задаються координати курсору клавіатури

331     Затримка DTime-секунд

332     Виконується процедура Move

335     Закінчення циклу 320

336     Виконується процедура Kill

337     Перехід на мітку

338     Закриття файлу

339     Закінчення основної програм 

        

  Лістінг програми представлений в додатку 2, блок—схему головного блоку програми наведено в додатку 1. 

                                
 
 
 
 
 
 
 
 
 

  2.3Контрольний  приклад

  та  аналіз результатів  машинного експерименту. 

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

     

    Процес  відладки включає:

   

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

                     Основним методом виявлення помилок при відладці програм є їх тестування. При цьому затрати на тестування для виявлення помилок складають 30%-40% загальних затрат на розробку програм і у значній мірі визначають якість створеного програмного продукту. Ефективність тестування є важливим фактором, який визначає вартість та тривалість  розробки складних комплексів програм. 

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

                    Після локалізації і усунення виявлених помилок застосовується контрольне тестування. Контрольний приклад для перевірки правильності розробленої програми виконано вручну. Для перевірки роботи програми в нормальних умовах перевіряємо гру на іграбельністьJ. 

    

  МЕНЮ  гри Змійка

    

  Процес  гри

    

  Після «смерті» змійки 

    

  Введення  ім’я для запису результату у файл RESULT.DAT 

    

Программирование игры "Змейка"