РефератыИнформатикаПрПрограммирование игры Змейка

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

Зміст


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


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


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


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


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


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


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


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


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


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


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


Вступ


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


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


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


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


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


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


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


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


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


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


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


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


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


Курсовий проект складається зі вступу , двох розділів , висновків , списку використаної літератури , графічної частини та додатків. Текст пояснювальної записки набрано та розрдуковано з використанням текстового редактора 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 входить в стандартний набір модулів компілятора BorlandPascal 7.0.


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


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


▄ з середовища ОС WindowsXPServicesPack 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.Опис програми


Програма складена , відкомпільована і відлагоджена в середовищі BolardPascal 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% загальних затрат на розробку програм і у значній мірі визначають якість створеного програмного продукту. Ефективність тестування є важливим фактором, який визначає вартість та тривалість розробки складних комплексів програм.


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


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



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



Процес гри




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




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




Перегляд
раніше записаних результатів


Розроблена програма-гра дає можливість добре відпочити після тривалого робочого дня.


Висновки.


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


В даному курсовому проекті розроблено і описано програму-гру «Змійка». Для розробки програми вибрано мову Паскаль (середовище BorlandPascal) . Програма розроблена із застосуванням методики процедурного проектування.


Програма відкомпільована з отриманням ехе-файла та відладжена.


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


Список використаної літератури:


1.
Т.В. Ковалюк, видавнича група «BHV», 2005- «ОСНОВИ ПРОГРАММУВАННЯ».


ДОДАТКИ




Додаток 2.


Лістинг програми.


001}Program ZMEjKA;


002}uses CRT;


003}label 1;


004}type result=record


005} scor:integer;


006} name:string[15];


007} len:integer;


008} end;


009} res=file of result;


010}


Var


011} f: res;


012}SnakeX,SnakeY: array[1..4000] of longint;


013}HeadX,HeadY: longint;


014}BonusX,BonusY: array[1..40] of longint;


015}DeathX,DeathY: array[1..30] of longint;


016}Dlina,Naprav: longint;


017}key: char;


018}i,score: integer;


019}MenuItem: array[1..6] of string;


020}DTime,ScorePlus,ScoreMinus,MenuSelect,x,y: integer;


{-----------------------------------------------------}


021}Procedure Ramka(x,y:integer);


022}Begin


023}TextColor(2);


024} TextBackground(0);


025}gotoxy(x,y);


026} writeln('╔═ ЗМЕЙКА 0.1 ══════╗');


027} gotoxy(x,y+1);


028} writeln('║ VERY SLOW ║');


029} gotoxy(x,y+2);


030 } writeln('║ SLOW ║');


031 } gotoxy(x,y+3);


032 } writeln('║ MEDIUM ║');


033 } gotoxy(x,y+4);


034 } writeln('║ HIGH ║');


035 } gotoxy(x,y+5);


036 } writeln('║ VERY HIGH ║');


037 } gotoxy(x,y+6);


038 }writeln('║ RESULT ║');


039 }gotoxy(x,y+7);


040 }writeln('╚═══════════════════╝');


041 }gotoxy(x,y+8);


042 }textcolor(14);


043 }writeln(' Виберiть рiвень ');


044 }textcolor(0);


045 }gotoxy(1,1);


046 }End;


{------------------------------------------------------}


047 } Procedure Symbol(x,y:integer; sym:char);


048 } Begin


049 } gotoxy(x,y);


050 } write(sym);


051 } gotoxy(1,1);


052 } End;


{------------------------------------------------------}


053 } Procedure Rezultat(var d:res;scr,dl:integer);


054 } var f1:result;


055 } Begin


056 } {$I-}


057 } Reset(d);


058 } {$I+}


059 } IF IOResult<>0 THen rewrite(d);


060 } clrscr;


061 } gotoxy(28,22);


062 } textcolor(green);


063 } write('Введить ваше iм`я: ');


064 }readln(f1.name);


065 } f1.scor:=scr;


066 } f1.len:=dl;


067 } seek(d,filesize(d));


068 } write(d,f1);


069 } Close(d);


070 } Textcolor(0);


071 } Halt;


072 } End;


{--------------------------------------------------------}


073 } Procedure OverRes(var d:res);


074 } var f1:result;


075 } y:integer;


076 } Begin


077 } ClrScr;


078 } {$I-}


079 } Reset(d);


080 } {$I+}


081 } IF IOResult<>0 THEN begin


082 } gotoxy(28,22);


083 } textcolor(green);


084 }write('Результатiв немає!');end


085 }Else


086 } begin


087 } textcolor(green);


088 } y:=1;


089 } while not eof(d) do begin


090 } read(d,f1);


091 } gotoxy(1,y); write('Iм`я: ',f1.name);


092 } gotoxy(30,y); write('Довжина: ',f1.len);


093 } gotoxy(45,y); write('Oчки: ',f1.scor:5);


094 } y:=y+1;


095 } end;


096 } Close(d);


097 } end;


098 } repeat until keypressed;


099 } textcolor(0);


100}End;


{-------------------------------------------------------------------}


101 } Procedure GoUp(x,y:integer);


102 } Begin


103 } Ramka(x,y);


104 } MenuSelect:=Menuselect-1;


105 } IF MenuSelect < 1 THEN MenuSelect:=6;


106 } TextColor(14);


107 } TextBackground(0);


108 } GotoXY(x+1,y+MenuSelect);


109 } write(MenuItem[MenuSelect]);


110 } Textbackground(0);


111 } textcolor(0);


112 } gotoxy(1,1);


113 } End;


{------------------------------------------------------}


114 }Procedure GoDown(x,y:integer);


115 }Begin


116 }ramka(x,y);


117 }MenuSelect:=MenuSelect+1;


118 }IF MenuSelect > 6 THEN MenuSelect:=1;


119 }textcolor(14);


120 }textbackground(0);


121 }gotoxy(x+1,y+MenuSelect);


122 }write(MenuItem[MenuSelect]);


123 }textcolor(0);


124 }textbackground(0);


125 }gotoxy(x,y);


126 }End;


{------------------------------------------------------}


127 }Procedure Menu;


128 }label b;


129 }Var


130 }X,Y,I:integer;


131 }Begin


132 }b:


133 }dlina:=5;


134 }Naprav:=1;


135 }HeadX:=5;


136 }HeadY:=1;


137 }Score:=0;


138 }X:=28;Y:=20;


139 }clrscr;


140 }Ramka(x,y);


141 }textcolor(14);


142 }textbackground(0);


143 }gotoxy(x+1,y+Menuselect);


144 }write(MenuItem[MenuSelect]);


145 }textcolor(0);


146 }textbackground(0);


147 }gotoxy(1,1);


148 }repeat


149 }I:=ord(readkey);


150 }case I of


151 }72:GoUp(x,y);


152 }80:GoDown(x,y);


153 }end;


154 }Until (I=27)or(I=13);


155 }IF i=27 THEN halt;


156 }Case MenuSelect of


157 }1: Begin


DTime:=10000;


ScorePlus:=5;


End;


158 }2: Begin


DTime:=8000;


ScorePlus:=10;


End;


159 }3: Begin


DTime:=6000;


ScorePlus:=15;


End;


160 }4: Begin


DTime:=4000;


ScorePlus:=20;


End;


161 }5: Begin


DTime:=2000;


ScorePlus:=25;


End;


162 }6: Begin


OverRes(f);


ClrScr;


goto b;


End;


163 }End;


164 }CLRSCR;


165 }End;


{---------------------------------------------------------}


166 }Procedure DrawSnake;


167 }Begin


168 }textcolor(15);


169 }gotoxy(1,50);


170 }write(' ');


171 }gotoxy(1,50);


172 }write('Oчки: ',Score);


173 }gotoxy(20,50);


174 }write('Програму разрoбив Матковський Руслан aka Pat');


175 }gotoxy(65,50);


176 }write(' ');


177 }gotoxy(65,50);


178 }write('Довжина: ',Dlina);


179 }Symbol(SnakeX[1],SnakeY[1],chr(15));


180 }textcolor(2);


181 }for i:=2 to Dlina do begin


182 }Symbol(SnakeX[i],SnakeY[i],chr(15));


183 }end;


184 }textcolor(red);


185 }for i:=1 to 40 do


186 }Symbol(BonusX[i],BonusY[i],chr(64));


187 }textcolor(0);


188 }gotoxy(1,1);


189 }End;


{----------------------------------------------------------}


190 }Procedure AddBonus(b:longint);


191 }label 1;


192 }var


193 }Err,f:integer;


194 }Begin


195 }1:


196 }Err:=0;


197 }BonusX[b]:=Random(78)+1;


198 }BonusY[b]:=Random(48)+1;


199 }For f:=1 to 40 do


200 }if f<>b THEN


201 }if ((BonusX[f]=BonusX[b]) and (BonusX[f]<>0) and (BonusY[f]=BonusY[b]) and(BonusY[f]<>0)) THEN Err:=1;


202 }For f:=1 to Dlina do


203 }if (SnakeX[f]=BonusX[b]) and (SnakeY[f]=BonusY[b]) THEN Err:=1;


204 }IF Err=1 THEN goto 1;


205 }textcolor(0);


206 }gotoxy(1,1);


207 }End;


{-----------------------------------------------------------}


208 }Procedure Kill;


209 }Var c:array[1..6] of char;


210 }j:integer;


211 }label 1;


212 }Begin


213 }c[1]:='X';


214 }c[2]:='x';


215 }c[3]:=':';


216 }c[4]:='.';


217 }c[5]:='.';


218 }c[6]:=' ';


219 }Textcolor(2);


220 }for i:=1 to 6 do begin


221 }for j:=1 to Dlina do Symbol(SnakeX[j],SnakeY[j],c[i]);


222 }delay(5000);


223 }end;


224 }1:


225 }CLRSCR;


226 }textcolor(15);


227 }gotoxy(1,50);


228 }write(' ');


229 }gotoxy(1,50);


230 }write('Oчки: ',Score);


231 }gotoxy(20,50);


232 }write('Програму разрoбив Матковський Руслан aka Pat');


233 }gotoxy(65,50);


234 }write(' ');


235 }gotoxy(65,50);


236 }write('Довжина: ',Dlina);


237 }textcolor(2);


238 }gotoxy(28,22);


239 }write('╔═══════════════════╗');


240 }gotoxy(28,23);


241 }write('║ ║');


242 }gotoxy(28,24);


243 }write('║ Продовжити(Y/N)? ║');


244 }gotoxy(28,25);


245 }write('║ ║');


246 }gotoxy(28,26);


247 }write('╚═══════════════════╝');


248 }gotoxy(1,1);


249 }key:=readkey;


250 }case key of


251 }'Y','y','Н','н': begin


menu;


for i:=1 to Dlina do


begin


SnakeX[i]:=6-i;


SnakeY[i]:=1;


end;


end;


252 }'N','n','Т','т':Rezultat(f,Score,Dlina);


253 }else goto 1;


254 }end;


255 }textcolor(0);


256 }gotoxy(1,1);


257 }End;


{----------------------------------------------------------}


258 }procedure Move;


259 }begin


260 }Symbol(SnakeX[Dlina],SnakeY[Dlina],' ');


261 }case naprav of


262 }1: begin


HeadX:=HeadX+1;


263 }End;


264 }2: begin


HeadX:=HeadX-1;


265 }end;


266 } 3: begin


HeadY:=HeadY-1;


267 }end;


268 }4: begin


HeadY:=HeadY+1;


269 }end;


270 }end;


271 }if HeadX>80 then HeadX:=1;


272 }if HeadX<1 then HeadX:=80;


273 }if HeadY>49 then HeadY:=1;


274 }if HeadY<1 then HeadY:=49;


275 }for I:=1 to Dlina do


276 }begin


277 }If (HeadX=SnakeX[i])and(HeadY=SnakeY[i]) then kill;


278 }end;


279 }for i:=1 to 40 do


280 }begin


281 }if (HeadX=BonusX[i])and(HeadY=BonusY[i]) then


282 }begin


283 }Dlina:=Dlina+1;


284 }score:=score+ScorePlus;


285 }addbonus(i);


286 }end;


287 }end;


288 }for I:=Dlina downTo 2 do


289 }begin


290 }SnakeX[i]:=SnakeX[i-1];


291 }SnakeY[i]:=SnakeY[i-1];


292 }end;


293 }SnakeX[1]:=HeadX;


294 }SnakeY[1]:=HeadY;


295 }drawsnake;


296 }textcolor (0);


297 }gotoxy( 1,1);


298 }end;


{-----------------------------------------------------------------}


299 }BEGIN


300 }Assign(f,'result.dat');


301 }Textmode(c80 + Font8x8);


302 }randomize;


303 }CLRSCR;


304 }for i:=1 to 40 do addbonus(i);


305 }MenuItem[1]:=' VERY SLOW ';


306 }MenuItem[2]:=' SLOW ';


307 }MenuItem[3]:=' MEDIUM ';


308 }MenuItem[4]:=' HIGH ';


309 }MenuItem[5]:=' VERY HIGH ';


310 }MenuItem[6]:=' RESULT ';


311 }MenuSelect:=1;


312 }clrscr;


313 }menu;


314 }for i:=1 to Dlina do


315 }begin


316 }SnakeX[i]:=6-i;


317 }SnakeY[i]:=1;


318 }end;


319 }1:


320 }while key<>#27 do


321 }begin


322 }if KeyPressed then


323 }begin


324 }key:=readkey;


325 }if key=#0 then


326 }case readkey of


#72: if Naprav <> 4 then Naprav := 3;{Down}


#80: if Naprav <> 3 then Naprav := 4;{up}


#75: if Naprav <> 1 then Naprav := 2;{Left}


#77: if Naprav <> 2 then Naprav := 1;{Rigth}


327 }end;


328 }end;


329 }textcolor (0);


330 }gotoxy(1,1);


331 }DELAY(DTime);


332 }Move;


333 }textcolor (0);


334 }gotoxy( 1,1);


335 }end;


336 }kill;


337 }goto 1;


338 }close(f);


339 }end.

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Программирование игры Змейка

Слов:3477
Символов:36467
Размер:71.22 Кб.