Гра Tetris

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

МОСКОВСЬКИЙ ДЕРЖАВНИЙ ТЕХНІЧНИЙ

УНІВЕРСИТЕТ ім. Н.Е. БАУМАНА

КАЛУСЬКИЙ ФІЛІЯ

КАФЕДРА ЕІУ2-КФ

«КОМП'ЮТЕРНІ СИСТЕМИ ТА МЕРЕЖІ»

Курсова робота

за курсом "Технологія програмування"

«Гра Tetris»

Введення

Ігри - неодмінна складова будь-якої людської культури. Слово «гра» ми докладаємо майже до всякого дитячому заняття. За допомогою гри найбільш інтенсивно розвивається цілісне сприйняття навколишнього світу, наочно-образне мислення, творчу уяву. Тому крім програм, які полегшують людям роботу, програмісти придумали захоплююче розвага-комп'ютерні ігри. Спочатку в ці ігри грали тільки вони самі, але дуже скоро їх естафету прийняли діти і дорослі по всьому світу. Зараз вже важко знайти людину, що має комп'ютер і жодного разу не грав у комп'ютерні ігри.

У 1977р. Atari випустила 2600 VCS, першу ігрову приставку з декількома іграми. Її технічні характеристики за теперішніх часів можуть викликати лише посмішку, але на ті часи два кілобайти ПЗУ і 128 байт ОЗУ були цілком достатні, щоб забезпечити чималий комерційний успіх. А далі все понеслося з неймовірною швидкістю, як лавина по схилу гори. У 1977 році фірма Apple розпочала продаж Apple II, в 1978 славнозвісна гра Space Invaders народилася все в тій же японській фірмі Taito, а в 1979 розробниками з Atari заснована фірма Activision. Тоді ж з'явилася Atari 800, де вперше був задіяний восьмібітних процессор.Восьмідесятие, а точніше, саме їх початок, дуже і дуже швидко показали, що час комп'ютерних ігор прийшов всерйоз і надовго. Phillips, підключившись до загальної гонці, створює Odyssey2, Mattel випускає Intellivision, хоча і з кращою графіків, але вельми моторошним пристроєм управління. Namco винаходить гру, дожівшую до наших днів практично без змін: великий Pac-Man, і до цього дня регулярно реалізований на різних платформах і в різних видах.

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

Atari не стояла на місці і винайшла Asteroids, та й в інших жанрах застою не намічалося: у пригодницьких іграх народився класичний текстовий квест від Infocom під назвою Zork (згодом переріс в серію), та й перша гра з серії Ultima вийшла все в тому ж 1980 ...

А на наступний рік бум досяг взагалі неймовірного розмаху. Продажів вже більше шести мільярдів доларів, гри так і сипалися: Donkey Kong від Nintendo, Galaxian, Centipede, Tempest, сестричка Pac-Man'а на ім'я Ms.Pac-Man.

І все в тому ж 1981 відбулося не надто помітне спочатку, зате згодом повністю перевернуло світ, подія: IBM вперше представила публіці IBM PC.

І понеслося ... Так як понеслося. Моментально стали утворюватися фірми, орієнтовані виключно на домашні комп'ютери: Sierra On-Line, Broderbund, BudgeCo, Electronic Arts.

А в 1983 році всіх чекав суворий криза, що продовжився декілька років. Фірма Mattel втратила на Intellivision 225 мільйонів доларів, стільки, скільки їй вдалося заробити за всі попередні чотири роки. Atari теж зіткнулася з серйозними фінансовими проблемами. Coleco взагалі впала. До 1984 року загальний обсяг ігрової індустрії становив лише близько 800 мільйонів доларів.

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

А все в тому ж, багатому на сенсації, 1984 року Apple вперше представила народу Macintosh, і за перші шість місяців продала сто тисяч штук. Sierra On-Line випустила першу гру з серії King's Quest, зберегла популярність і до цих пір.

1986 до цих пір багато хто згадує з теплим, хоча і сумним, почуттям: саме тоді з'явилася "подружка" (Amiga на іспанською мовою), випущена фірмою Commodore. Чудова машинка, розроблена інженером з Atari Джеєм Майнер (Jay Miner), була на диво потужної і напханою новаторськими ідеями, але невдалий маркетинг здатний поховати будь-який шедевр, і Amiga так і не осилила дорогу в широкі маси. Правда, останнім часом ходять чутки про пожвавлення цієї марки, але чи вийде що-небудь - поки неясно.

Час йшов, комп'ютери потихеньку ставали дедалі потужнішими, гри все красивіше, десь року з 1987 на IBM PC стали з'являтися ігри, схожі на сьогоднішні, як раз тоді почав широко застосовуватися відеоадаптер VGA, а потім і SVGA, і показ 256 кольорів замість 16 дуже сильно підняв якість графіки. Добре це було? Напевно, так, хоча, відверто кажучи, після виходу Тетріса в 1988 році гонитва за цікавістю ігор явно ослабла, що замінив гонитвою за видовищністю. Треба ще, мабуть, упомянть випуск у 1989 році кишенькової комп'ютерної гри Gameboy, і розповідь про давні роках, які заклали фундамент того, що ми сьогодні звемо індустрією комп'ютерних ігор, можна вважати закінченим, тим більше, що з початку дев'яностих майже одночасно "пішов" бум і в іграх для PC і в приставках. Наприклад, одна тільки фірма Nintendo в 1992 році продала товару на 7 мільярдів доларів (з них 4,7 мільярдів тільки в США), і отримала більший прибуток, ніж всі американські кіно-і телестудії разом узяті. На жаль, не назвати і всіх епохальних ігор, вони, мабуть, рано чи пізно отримають свої сторінки на сервері музею ігор, наприклад, сама-сама-сама гра всіх часів на PC - знаменитий Myst, та й шедевр під назвою DOOM ... З'явився мультиплеер, підтримка Internet, онлайнові світи - стільки всього, що в невелике введення все не поміститься. Та й не треба, напевно: справа все-таки не в тому, у що саме ми граємо, а в тому, навіщо і чому ми це робимо ...

В даний час існує кілька різновидів комп'ютерних ігор.

Ця курсова робота виконується в рамках предмету «Технологія програмування» та у зв'язку з цим хотілося б у кількох словах (через обмеження за обсягом) відзначити важливість даного предмета в повсякденному житті.

Якщо ще на початку минулого століття були присутні консерватизм і недовіра до технічних нововведень, то в наші дні ми тільки радіємо технічних новинок, від мобільних телефонів до пральних машин. Зараз вже щосили застосовується «безлюдна технологія»-заміна живої праці і щодо простих механізмів найскладнішими автоматами. Відразу ж хочеться застерегти від вузького тлумачення слова «технологія» як способу організації виробництва на заводах. Звичайно, прогрес в технології виробництва полегшує працю і підвищує його продуктивність. Але в рамках даної курсової роботи нас цікавить технологія наукового пошуку і експерименту, технологія проектування і, природно, проблема взаємодії людини і ЕОМ.

1. Дослідницька частина

1.1 Постановка завдання

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

1.2 Огляд аналогічних продуктів

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

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

1.3 Опис гри

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

1.4 Опис програми

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

Програма називається "TETRIS", є класичною версією вітчизняної гри Тетріс. [1] Програма написана в інтегрованому середовищі Borland Delphi 7. Для її компіляції потрібно транслятор з цієї мови і ОС Windows 95 / NT. Технічна документація написана з використанням програмного продукту Microsoft Word XP.

2. Використовувані технічні засоби.

Програма була написана і відкомпілювалися на комп'ютері з наступною конфігурацією Pentim III 500/128 Mb RAM / 32 Mb VRAM / MS Windows 98.

3. Вхідні дані.

Клавіші: "RIGHT", "LEFT", "UP" або "ESC" - що вводяться в процесі гри в режимі реального часу. Дані змінні організовані у вигляді символьних змінних.

4. Вихідні дані.

Інформація, що виводиться на екран у графічному режимі: малюнок склянки, падаючі і лежать на дні фігури, поле з висновком наступної фігури. Все організовано у вигляді двовимірних масивів.

5.Висновок по завданню.

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

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

2.1 Рішення поставленої задачі

Головною проблемою у вирішенні цього завдання був висновок графіки в Паскалі.

Для побудови зображень на екрані використовується система координат. Відлік починається від верхнього лівого кута екрана, який має координати (0,0). Значення Х (стовпчик) збільшується зліва направо, значення Y (рядок) збільшується зверху вниз. Щоб будувати зображення, необхідно вказувати точку початку виведення. У текстових режимах цю точку вказує курсор, який присутній на екрані. У графічних режимах видимого курсору немає, але є невидимий поточний покажчик CP (Current Pointer). Фактично це той же курсор, але він невидимий.

Зображення фону ми отримали з Bmp-файлу, з таких же файлів узятий, курсор миші і елементи інтерфейсу. Тепер необхідно правильно вважати Bmp-файли і перевернути картинку «з голови на ноги».

За рішенням розробників формат Bmp-файлу не прив'язаний до конкретної апаратної платформи. Цей файл складається з чотирьох частин: заголовка, інформаційного заголовка, таблиці кольорів (палітри) і даних зображення. Якщо у файлі зберігається зображення з глибиною кольору 24 біти (16 млн. кольорів), то таблиця кольорів може бути відсутнім, проте в нашому, 256-кольоровому випадку вона є. Структура кожної з частин файлу, що зберігає 256-кольорове зображення, дана в таблиці 1.

Структура Bmp-файлу

Ім'я

Довжина

Зсув

Опис

Заголовок файлу (BitMapFileHeader)

Type

2

0

Сигнатура "BM"

Size

4

2

Розмір файлу

Reserved 1

2

6

Зарезервовано

Reserved 2

2

8

Зарезервовано

OffsetBits

4

10

Зсув зображення від початку файлу

Інформаційний заголовок (BitMapInfoHeader)

Size

4

14

Довжина заголовка

Width

4

18

Ширина зображення, точки

Height

4

22

Висота зображення, точки

Planes

2

26

Число площин

BitCount

2

28

Глибина кольору, біт на точку

Compression

4

30

Тип компресії (0 - нестиснене зображення)

SizeImage

4

34

Розмір зображення, байт

XpelsPerMeter

4

38

Горизонтальний дозвіл, точки на метр

YpelsPerMeter

4

42

Вертикальна роздільна здатність, точки на метр

ColorsUsed

4

46

Число використовуваних кольорів (0 - максимально можливе для даної глибини кольору)

ColorsImportant

4

50

Число основних кольорів

Таблиця кольорів (палітра) (ColorTable)


ColorTable

1024

54

256 елементів по 4 байти

Дані зображення (BitMap Array)


Image

Size

1078

Зображення, записане по рядках зліва направо і знизу вгору

Заголовок файлу починається з сигнатури «BM», а потім йде довжина файлу, виражена в байтах. Наступні 4 байти зарезервовані для подальших розширень формату, а закінчується цей заголовок зміщенням від початку файлу до записаних у ньому даних зображення. При 256 квітах це зміщення становить 1078.

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

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

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

Глибина кольору вважається найважливішою характеристикою способу представлення кольору у файлі і вимірюється в бітах на точку. У даному випадку вона дорівнює 8.

Компресія. У Bmp-файлах зазвичай не використовується, але поле в заголовку для неї передбачено. Зазвичай вона дорівнює 0, і це означає, що зображення не стисло.

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

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

Число кольорів дозволяє скоротити розмір таблиці палітри, якщо в зображенні реально присутній менше квітів, ніж це допускає обрана глибина кольору. Однак на практиці такі файли майже не зустрічаються. Якщо число квітів приймає значення, максимально допустимий глибиною кольору, наприклад 256 кольорів при 8 бітах, поле обнуляють.

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

За інформаційним заголовком слід таблиця кольорів, що представляє собою масив з 256 (за кількістю квітів) 4-байтових полів. Кожне поле відповідає своєму кольору в палітрі, а три байти з чотирьох - компонентів синьої, зеленої та червоної складових для цього кольору. Останній, найстарший байт кожного поля зарезервований і дорівнює 0.

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

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

2.2 Алгоритм рішення задачі

2.3 Структура програми

Програма складається з 27 файлів. Основним файлом є файл Igra. Pas до нього підключені інші файли, до яких у свою чергу підключені інші. Простіше це підключення представити на графічній схемі (рис.3).

2.4 Процедури і функції

function Clock {час, що минув із запуску програми в 1 / 18 з}

procedure ResetTime; {скидання всіх показань часу в 0}

function GetFPS {поточне число кадрів у секунду необхідно викликати 1 раз в кожному кадрі}

function Clock {час, що минув із запуску програми в 1 / 18 c}

procedure ResetTime; {скидання всіх показань часу в 0}

function GetFPS: single;

{Поточне число кадрів у секунду}

procedure SetTextParm {установка параметрів виведення тексту}

{Color-колір тексту}

{Bkcolor-колір фону}

{Typetext = 0 - прозорий фон}

{Typetext = 1 - непрозорий фон}

procedure GetTextParm (var color, bkcolor, typetext: byte); {запит поточних установки}

procedure PutText (x, y: word; text: string); {висновок тексту по координатами x, y (верхній лівий кут)}

procedure PutChar (x, y: word; chr: char); {висновок символу по координатами x, y (верхній лівий кут)}

procedure PutPixel (x, y: word; c: byte); {висновок точки}

functiongetpixel (x, y: word): byte; {запит кольору точки}

procedure PutPixel (x, y: word; c: byte); {висновок точки}

function getpixel (x, y: word): byte; {запит кольору точки}

procedure PutPixel (x, y: word; c: byte); {висновок точки}

function getpixel (x, y: word): byte; {запит кольору точки}

procedure GetBuffer (Sprite: SpriteType); {збереження фону під спрайтом в буфері}

procedure PutBuffer (Sprite: SpriteType); {відновлення фону}

procedure PutSprite (Sprite: SpriteType); {висновок спрайту на екран}

procedure CreateSprite (s: string; x, y, dx, dy: integer; var Sprite: SpriteType); {"створення" спрайту}

procedure DestroySprite (Sprite: SpriteType); {"знищення" спрайту}

procedure CalcSpritePosition (var Sprite: SpriteType); {обчислення нових координат спрайту}

procedure PutBackground (s: string); {створення фону на екрані}

procedure CreateScreenBuffer; {створення екранного буфера}

procedure DestroyScreenBuffer; {знищення екранного буфера}

procedure ScreenBufferToScreen; {відображення буфера на екран}

procedure CreateScreenBuffer; {створення екранного буфера}

procedure DestroyScreenBuffer; {знищення екранного буфера}

procedure ScreenBufferToScreen; {відображення буфера на екран}

procedure GetBuffer (Sprite: SpriteType); {збереження фону під спрайтом в буфері}

procedure PutBuffer (Sprite: SpriteType); {відновлення фону}

procedure PutSprite (Sprite: SpriteType); {висновок спрайту на екран}

procedure CreateSprite {"створення" спрайту}

procedure DestroySprite (Sprite: SpriteType); {"знищення" спрайту}

procedure CalcSpritePosition (var Sprite: SpriteType);

procedure PutBackground (s: string); {створення фону на екрані}

procedure SetPal (var pal: byte; nbegpal, lenpal: integer); {установка 256 - кольоровий палітри}

procedure GetPal (var pal: byte; nbegpal, lenpal: integer); {читання 256 - кольоровий палітри}

procedure WaitVerticalRetrace; {очікування вертикально зворотного ходу променя}

procedure BlackPal; {установка "чорної" палітри}

procedure FadeOut (p: array of byte); {плавне гасіння палітри}

procedure FadeIn (p: array of byte); {плавна установка палітри}

procedure SetPal (var pal: byte; nbegpal, lenpal: integer); {установка 256 - кольоровий палітри}

procedure GetPal (var pal: byte; nbegpal, lenpal: integer); {читання 256 - кольоровий палітри}

procedure WaitVerticalRetrace; {очікування вертикально зворотного ходу променя}

procedure BlackPal; {установка "чорної" палітри}

procedure FadeIn (p: array of byte); {плавна установка палітри}

procedure FadeOut (p: array of byte); {плавне гасіння палітри}

Function IsMouse: Boolean; {Повертає TRUE, якщо миша доступна}

Function InitMouse: Boolean; {Ініціація миші}

Procedure SetMousePage (Page: Byte); {Встановлює сторінку для покажчика миші}

Function GetMousePage: Byte; {Повертає номер сторінки з покажчиком}

Procedure SetStepToPixel (Hor, Ver: Integer); {Встановлює чутливість миші}

Procedure GetStepToPixel (var Hor, Ver: Integer); {Повертає чутливість миші}

Procedure SetDoubleSpeed ​​(Speed: Word); {Встановлює поріг подвоєння швидкості переміщення покажчика}

Function GetDoubleSpeed: Word; {Повертає поріг подвоєння швидкості}

Function MouseTextCooX (X: Integer): Byte; {Повертає текстову координату по заданій віртуальної}

Function MouseTextCooY (Y: Integer): Byte; {Повертає текстову координату по заданій віртуальної}

Function MouseGraphCooX (X: Byte): Integer; {Повертає віртуальну координату по заданій текстовій}

Function MouseGraphCooY (Y: Byte): Integer; {Повертає віртуальну координату по заданій текстовій}

Procedure MouseWhereXY (var X, Y: Integer); {Повертає віртуальні координати миші}

Procedure MouseGotoXY (X, Y: Integer); {Перекладає покажчик миші в нове положення

X, Y - віртуальні координати}

Function MouseWhereX: Byte; {Повертає горизонтальну текстову координату}

Function MouseWhereY: Byte; {Повертає вертикальну текстову координату}

Function MouseIn (X1, Y1, X2, Y2: Integer): Boolean; {Повертає TRUE, якщо вказівник

в заданому прямокутнику}

Function NumButton: Byte; {Повертає кількість кнопок миші}

Procedure GetMouseState (var Butt, X, Y: Integer);

{Повертає поточний стан миші:

BUTT - прапор стану кнопок;

X, Y-поточні віртуальні координати}

Function MousePressed: Boolean;

{Повертає TRUE, якщо натиснута будь кнопка}

Procedure MouseButtPressed (Butt: Integer;

var Stat, Count, X, Y: Integer);

{Повертає інформацію про самій клавіші:

BUTT - прапор вибору клавіші;

STAT - стан клавіш;

COUNT - кількість натискань, X, Y - координати}

Procedure MouseButtReleased (Butt: Integer;

var Stat, Count, X, Y: Integer);

{Повертає інформацію про відпущеної клавіші:

BUTT - прапор вибору клавіші;

STAT - стан клавіш;

COUNT - кількість відпускання;

X, Y - координати}

Procedure MouseWindow (X1, Y1, X2, Y2: Integer);

{Визначає координати області переміщення

покажчика. X1 ... Y2 - віртуальні координати}

Procedure MouseScreen; {Встановлює вікно на весь екран}

Procedure ShowMouse; {Показати покажчик миші}

Procedure HideMouse; {Прибрати покажчик миші}

Procedure MouseTextCursor (ScrMask, CurMask: Word);

{Встановлює новий вид текстового покажчика}

Procedure MouseBlink (YUp, YDn: Byte);

{Визначає апаратний курсор потрібного розміру}

Procedure MouseGraphCursor (var ScrCurMask; X, Y: Byte);

{Визначає вид графічного покажчика}

Function MouseBuffSize: Word;

{Повертає довжину буфера для збереження параметрів}

Procedure SaveMouse (var Buff);

{Зберігає в буфері поточний стан миші}

Procedure RestoreMouse (var Buff);

{Відновлює збережений стан миші}

Procedure SetMouseItem (NItem: Byte; var Items);

{Встановлює елементи для вибору мишею:

NItem - кількість елементів;

Items - array [1 .. NItem] of MouseItemType;

Старі установки скидаються}

Procedure AddMouseItem (Item: MouseItemType);

{Додає ще один елемент для вибору мишею.

Старі установки зберігаються}

Procedure ClearMouseItems;

{Скидає раніше встановлені елементи}

Procedure GetMouseItem (var NItem: Byte; var Items);

{Повертає встановлені елементи}

Function KeyOrMousePressed: Boolean;

{Повертає TRUE, якщо натиснута клавіша чи активна миша}

Function ReadKeyOrMouse: Char;

{Повертає символ натиснутоюклавіші або вибраної опції}

Procedure SetMouseHandler (Mask: Word; Proc: MouseHandlerType);

{Встановлює адресу і умови виклику обробника}

Procedure ChangeMouseHandler (Mask: Word; Proc: MouseHandlerType;

var OldMask: Word; var OldProc: Pointer);

Procedure ClearMouseHandler; {Видаляє обробник подій}

Function IsMouse: Boolean; {Повертає TRUE, якщо миша доступна}

Function InitMouse: Boolean; {Ініціація миші}

Procedure SetMousePage (Page: Byte); {Встановлює сторінку для покажчика миші}

Function GetMousePage: Byte; {Повертає номер сторінки з покажчиком}

Procedure SetStepToPixel (Hor, Ver: Integer); {Встановлює чутливість миші}

Procedure GetStepToPixel (var Hor, Ver: Integer); {Повертає чутливість миші}

Procedure SetDoubleSpeed ​​(Speed: Word);

{Встановлює поріг подвоєння швидкості переміщення покажчика}

Function GetDoubleSpeed: Word;

{Повертає поріг подвоєння швидкості}

Function MouseTextCooX (X: Integer): Byte;

{Повертає текстову координату по заданій віртуальної}

Function MouseTextCooY (Y: Integer): Byte;

{Повертає текстову координату по заданій віртуальної}

Function MouseGraphCooX (X: Byte): Integer;

{Повертає віртуальну координату по заданій текстовій}

Function MouseGraphCooY (Y: Byte): Integer;

{Повертає віртуальну координату по заданій текстовій}

Procedure MouseWhereXY (var X, Y: Integer);

{Повертає віртуальні координати миші}

Procedure MouseGotoXY (X, Y: Integer);

{Перекладає покажчик миші в нове положення

X, Y - віртуальні координати}

Function MouseWhereX: Byte;

{Повертає горизонтальну текстову координату}

Function MouseWhereY: Byte;

{Повертає текстову координату по вертикалі}

Function MouseIn (X1, Y1, X2, Y2: Integer): Boolean;

{Повертає TRUE, якщо вказівник

в заданому прямокутнику}

Function NumButton: Byte;

{Повертає кількість кнопок миші}

Procedure GetMouseState (var Butt, X, Y: Integer);

{Повертає поточний стан миші:

BUTT - прапор стану кнопок;

X, Y-поточні віртуальні координати}

Function MousePressed: Boolean;

{Повертає TRUE, якщо натиснута будь кнопка}

Procedure MouseButtPressed (Butt: Integer;

var Stat, Count, X, Y: Integer);

{Повертає інформацію про самій клавіші:

BUTT - прапор вибору клавіші;

STAT - стан клавіш;

COUNT - кількість натискань, X, Y - координати}

Procedure MouseButtReleased (Butt: Integer;

var Stat, Count, X, Y: Integer);

{Повертає інформацію про відпущеної клавіші:

BUTT - прапор вибору клавіші;

STAT - стан клавіш;

COUNT - кількість відпускання;

X, Y - координати}

Procedure MouseWindow (X1, Y1, X2, Y2: Integer);

{Визначає координати області переміщення покажчика.

X1 ... Y2 - віртуальні координати}

Procedure MouseScreen;

{Встановлює вікно на весь екран}

Procedure ShowMouse;

{Показати покажчик миші}

Procedure HideMouse;

{Прибрати покажчик миші}

Procedure MouseTextCursor (ScrMask, CurMask: Word);

{Встановлює новий вид текстового покажчика}

Procedure MouseBlink (YUp, YDn: Byte);

{Визначає апаратний курсор потрібного розміру}

Procedure MouseGraphCursor (var ScrCurMask; X, Y: Byte);

{Визначає вид графічного покажчика}

Function MouseBuffSize: Word;

{Повертає довжину буфера для збереження параметрів}

Procedure SaveMouse (var Buff);

{Зберігає в буфері поточний стан миші}

Procedure RestoreMouse (var Buff);

{Відновлює збережений стан миші}

Procedure SetMouseItem (NItem: Byte; var Items);

{Встановлює елементи для вибору мишею:

NItem - кількість елементів;

Items - array [1 .. NItem] of MouseItemType;

Старі установки скидаються}

Procedure AddMouseItem (Item: MouseItemType);

{Додає ще один елемент для вибору мишею.

Старі установки зберігаються}

Procedure ClearMouseItems;

{Скидає раніше встановлені елементи}

Procedure GetMouseItem (var NItem: Byte; var Items);

{Повертає встановлені елементи}

Function KeyOrMousePressed: Boolean;

{Повертає TRUE, якщо натиснута клавіша

клавіатури або кнопка миші}

Function ReadKeyOrMouse: Char;

{Повертає символ натиснутоюклавіші або вибраного елемента}

Procedure MouseHandler; Far; Assembler;

{Ассемблерние інтерфейс для виклику обробника}

Procedure SetMouseHandler (Mask: Word; Proc: MouseHandlerType);

{Встановлює адресу і умови виклику обробника}

Procedure ChangeMouseHandler (Mask: Word;

Proc: MouseHandlerType; var OldMask: Word; var OldProc: Pointer); {Замінює старий обробник новим}

Procedure ClearMouseHandler; {Видаляє обробник подій}

function vihod: boolean;

{Перевірка обраний чи ні і клік мишки на написи "ВИХІД"}

procedure ReadBMP {читання зображення з Bmp-файлу}

procedure ReadBMPheader (header: bmhptr; filename: string);

{Читання заголовка Bmp-файлу}

procedure ReadBMP (image: arptr; var xim, yim: word;

pal: arptr; filename: string); {читання зображення з Bmp-файлу}

procedure ReadBMPheader (header: bmhptr; filename: string); {читання заголовка Bmp-файлу}

3. Керівництво користувачеві

3.1 Системні вимоги

Програма запускається під управлінням операційної системи MS Windows, починаючи з версії NT / 95. Для її роботи потрібно від 16 мегабайт оперативної пам'яті, відеоадаптер S VGA і процесор Pentium 133 і вище.

3.2 Призначення програми

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

3.3 Виконання програми

Запуск програми здійснюється при відкритті файлу igra. Exe з каталогу. При запуску гри з'являється таке меню:

Управління грою здійснюється за допомогою мишки. При виборі пункту «Допомога» видається коротка довідка, яка пояснює правила гри. За допомогою пункту «Переможці» ви можете вивчити список переможців. Пункт «Старт гри здійснює її запуск», і користувач бачить наступну картинку

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

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

По завершенню введення необхідно натиснути клавішу ENTER.

3.4 Техніко-економічні показники

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

3.5 Налаштування програми

Програма готова до роботи, налаштування не вимагає.

Висновок

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

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

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

  1. Зуєв. Мова програмування Turbo Pascal 6.0 .- М.: Унітех, 1992 .- 298 с.

  2. Довгаль С.І., Сбітнєв А.І. Персональні ЕОМ: Турбо - Паскаль V 7.0, Об'єктне програмування .- Київ: Довгаль, 1995. - 320 с.

  3. Епаншенков А.М., Епаншенков В.А. Програмування в середовищі TURBO PASCAL 7.0 .- М.: Діалог - МІФІ, 1996 .- 288 с.

  4. Турбо Паскаль 7.0 - К.: Торгово - видавнича бюро BHV, 1995 - 448 с.

  5. Історія комп'ютерних ігор (internet версія).

Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
126.7кб. | скачати


Схожі роботи:
Лімерік неперекладна гра слів або переказується гра форми
Гра Шибениця
Гра Vertolet
Гра крестікінолікі
Гра П`ятнашки
Гра Шибениця 2
Гра дошкільника
Гра 489
Гра в дошкільному віці
© Усі права захищені
написати до нас