Разработка ігровий програми мовою програмування Turbo Pascal

Тип работы:
Реферат
Предмет:
Информатика, программирование


Узнать стоимость новой

Детальная информация о работе

Выдержка из работы

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

КАФЕДРА ИНФОРМАТИКИ

Курсова робота з информатике

Виконали: студентка 2 курса

Гойтина Ю.В.

Керівник: ст. преподаватель

Гусєва Є. Н.

ВВЕДЕНИЕ…3

1. РОЗРОБКА ІГРОВИЙ ПРОГРАМИ НА ПРИМЕРЕ

ІГРИ «SIEGE»… … … 5

1. СПЕЦИФІКАЦІЯ ІГРОВИЙ ПРОГРАММЫ

«SIEGE»… … 9

1. СТРУКТУРНА ДІАГРАМА… … 11

3.1 Опис призначення модулей… … 11

ВИСНОВОК… … 13

СПИСОК ЛІТЕРАТУРИ… 14

ДОДАТОК… 15

ВВЕДЕНИЕ Більшість користувачів, як досвідчених, і початківців, не без задоволення грають у комп’ютерні ігри. Комп’ютерні гри порівняно молоде явище, які мають досить багатою відносини із своїми падіннями і злетами. Їх історія почалася ні з кінця 1970 років. Початок лежить набагато раніше. Насправді усе починалося з моделі залізниці, з урахуванням якої з’явилися передумови подальшого розвитку перших комп’ютерних ігор. Ігри дають нам шанс розслабитися граючи, скинути стрес. Що роблять найкраще, то це створюють альтернативні реальності, у яких можна зануритися. Іноді ці реальності намагаються повторити наш реальний світ. І вони можуть перенести нашій повністю ворожий чи фантастичний світ. Від управління реактивним винищувачем до управління командою Національної Футбольної ліги, від бою з драконами аж до створення нових світів, будівлі доріг, дослідження космосу, всього, що саміт може винайти наша уява. Вказати точну цифру ігор дуже важко. Можна тільки приблизно оцінити число різних найменувань ігор, що є над ринком у будь-яку довільну час. Комп’ютерна гра — одне з найбільш популярних видів програмного забезпечення, який започаткував цілому напрямку — ігровий інформатики. Попри розмаїття таких програм, все гри можна розділити ми такі види: 1. Навчальні 1. Розвиваючі 1. Ділові 1. Розважальні 2. Комбіновані Метою нашої курсової роботи є підставою вивчення засад теорії ігор, і навіть розробка ігровий програми мовою програмування Turbo Pascal. Проектування ігрового продукту складається з кількох етапів: 1. Визначення класу гри. На цьому етапі необхідно сформулювати правил гри. 1. Виділення компонентів гри. 1. Визначення ієрархічного рівня гри: А) оперативний Б) тактичний У) стратегічний 1. Розробка дизайну гри. 1. Розробка інтерфейсу гри. Щоб досягти поставленої мети вирішити завдання, пов’язані психологічної областю (використання палітри, образи на екрані) і областями теорії ігор, і навіть завдання, пов’язані із ділянкою програмування (вивчення графічних можливостей Turbo Pascal).

1. РАЗРАБОТКА ІГРОВИЙ ПРОГРАМИ НА ПРИКЛАДІ ІГРИ «SIEGE»

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

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

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

У кожній грі обов’язково є свої певні правила. П р, а і л про — розпорядження, встановлює порядок дій играющих.

У нашій грі існують свої умови — використовуючи клавіші управління курсором грає може послідовно пересувати героя на протязі всієї стіни. Вони повинні скидати каміння у своїх ворогів, перебуваючи саме з тих ворогами, куди потрібно скинути камень. Чтобы перейти на слудующий рівень він повинен знищити певну кількість ворогів. При цьому ні перший з ворогів ні дістатись верхи стіни, у протилежному разі гра буде закінчено. Теоретично ігор існують 2 широких класу ігор: 1. ігри робилися із переважанням ролі; 1. ігри робилися із переважанням правил; Ігри з величезним переважанням ролі можна розділити ми такі підкласи: V сюжетно-ролевые; V ділові; V организационно-деятельностные; V имитационные; Ігри з величезним переважанням правил можна розділити на: V дидактичні; V розвиваючі; V спортивні; V військові; V азартные;

Гра «Siege» належить до ігор, у яких переважають правила. У даної грі не передбачається те, що грає може змінювати і вводити свої умови по всьому її протязі. Під час гри граючому необхідно приймати рішення: у напрямі потрібно рухати героя попід стіною і зупиняти їх у певному місці для скидання каменів. Можна виокремити такі складові розробки комп’ютерної гри: V мета V ігрову середу V взаємодію Космосу з граючим V оцінку ігровий ситуации

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

У нашій грі під цим мається на увазі прийняття правильного ходу гравцем у у ситуации.

И р р про в, а з р е буд, а — сукупність зв’язків об'єктів у грі й правил їх изменения.

У грі «Siege» як ігровий середовища виступає стіна з героєм і ворогами. Під час гри герой знищує ворогів, скидаючи ними каміння. Коли герой знищує ворогів, він потрапляє до рівня вище. Якщо герой не встигне скинути камінь на якого — або ворога або пройде всіх рівнів, гра закінчується. Принаймні проходження кожного рівня гри збільшується швидкість і кількість ворогів. У із чи м про буд е і з тонн на і е сек. і р р, а ю щ і м — сукупність коштів, наданих зміни ігровий среды.

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

Етап створення комп’ютерної програми починається тільки після вибору сюжету, способів взаємодії з граючим і системи критеріїв оцінки поведінки що грає, описи ігровий середовища. Ігрова програма складається з двох частин: перша реалізує внутрішню, логічний структуру комп’ютерної гри, т. е. відображає гру у системі машинних даних, і алгоритмів, друга — відображає процес гри на терминале.

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

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

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

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

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

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

Серед сили-силенної варіантів інтерфейсу людина-комп'ютер є дві принципово відмінних виду: 1. «вспоминай-и-набирай» — це мову команд, що спочатку треба згадати, потім набрати і; 1. «смотри-и-выбирай» — це мову різноманітних меню і піктограм, у якому слід вибрати необхідне, після чого станеться відповідне действие.

Ми з нашої курсової роботі використовували другий вид інтерфейсу людина-комп'ютер і розробити меню гри. У грі «Siege» ми використовували стандартні кошти на роботи з графічними зображеннями мови програмування Турбо Паскаль. Діалог між комп’ютером і граючим здійснюється, як в меню, і під час самої игры.

2. СПЕЦИФІКАЦІЯ ІГРОВИЙ ПРОГРАМИ «SIEGE»

1. Назва завдання Комп’ютерна гра. Назва програми — «Siege». Система програмування Turbo Pascal. 1. Опис Гра починається з заставки, де написано назва гри. Потім головне меню, де користувач може вибрати одне із трьох пунктів меню: «Play the game», «Instruction», «Story», «Exit to DOS». Якщо користувач вибирає перший пункт меню, то після передмови може розпочати гру. Якщо він вибирає - другий, можна ознайомитися з інструкцією. Якщо він вибере третій пункт, він може прочитати передісторію. Інакше користувач може вийти з гри. Гравець повинен встигнути скидати каміння у своїх ворогів, поки вони дісталися верхи стіни. При невдалому закінченні гри, якщо ворог досяг героя, гра завершується і видається повідомлення — «Game Over». При виграші, якщо користувач пройшов десять рівнів, він може вийти з гри. 3. Управління режимами роботи програми Гра здійснюється з допомогою меню. 4. Вхідні дані Вхідними даними є дії що в час гри, тобто інформацію про натисканні клавіш управління курсором керувати героєм й у вибору пункту меню, клавіші Esc для виходу з гри, клавіші Enter для вибору пункту меню, клавіші Space для скидання каменів. 5. Вихідних даних Повідомлення про перемогу після кожного пройденого рівня «Level complete», про програші «Game over», або повідомлення, супроводжують успішні чи неуспішні дії гравця «Looser» — невдача, «2 hit combo» — при знищення відразу двох ворогів, «Ough! 4 mans at once» — при знищенні відразу чотирьох ворогів, «Aaaaaaaaamazing!!!» -при знищенні понад чотири врагов.

Выходными даними, пов’язані з графікою, є зміну розташування людинки і ворогів на екрані монітора, а як і кількість набраних очок гравцем у цю гру, номер рівня. 6. Ошибки При ініціалізації програми передбачена видача повідомлень за відсутності VGA сумісної видеоадаптера, помилки ініціалізації графічного режима.

3. СТРУКТУРНА ДИАГРАММА

3.1 Опис призначення модулів. P. S і e g e — основна програма, що викликає виконання програмні модулі. Модуль P. S і e g e P. S p r — модуль, у якому ігрові об'єкти (картинки). Модуль V G A P. S p r — модуль для малювання спрайтів. Модуль L o g o p. s з r e e n -заставка курсової роботи. Модуль P. S і e g e L o g o — модуль, у якому меню, інструкцію, передісторію. Модуль B u t t o n p. s — модуль, дозволяє здійснювати натискання і відпускання клавіші, інформацію про стан клавіш у часі про відпущених клавішах. Модуль R e t r a з e — модуль, позволяющий здійснювати синхронізацію виведення в видеопамять. Модуль V G A 1 3 H — модуль до роботи з графикой.

ЗАКЛЮЧЕНИЕ

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

Ми порекомендували цю гру для дітей шкільного віку, проте, показавши її врозлым, вона зацікавила та його. Тож нас кажется, что вона цілком придатна й у дорослішої аудитории.

СПИСОК ВИКОРИСТОВУВАНОЇ ЛІТЕРАТУРИ 1. Ігнатьєва А.І. Комп’ютерні гри. (з. 3−10, 31−35) М. 1988. 2. Домашній комп’ютер — № 4(с. 62−68), 1999 3. Домашній комп’ютер — № 12(с. 78−88), 1999 1. Инфо-№ 2: Комп’ютерні гри акторів-професіоналів у навчання (с. 61−65) /Під ред. Марнуми Е. ,

Когов Ю. 1990. 2. Лукашенка М. А. «Інформатика в іграх та військово-політичні завдання» (с. 1−5) //Нач. шк.

/Додаток до газети «1 вересня» — 1994, № 44 3. Инфо-№ 4: Комп’ютерна гра: вчимо чи граємо (64−67) /Під ред. Марусева І.В. 1997. 7. Коубс Р. і Влейминк І. Інтерфейс (36−40) 1991. 8. Ла Марнотратник А. Секрети програмування ігор (7−10) 1995. 9. Фридланд А. Я. Інформатика. Тлумачний словник основних термінів. (57−62) М. 1998. 10. 350 ігор для IBM PC, Дж. Дворак, «Пергамент» — Санкт -Петербург, 1994. 11. Turbo Pascal 7. 0, Фаронов В. В. /Вид. «Нолидж», 1999.

ПРИЛОЖЕНИЕ: Program Siege; Uses LogoScreen,

DOS, VGA13h, VGASpr, Retrace, Buttons,

SiegeLogo, SiegeS pr; Type

EnemyType = record

X, Y, D, S, A: Integer;

Falling: Boolean;

Free: Boolean; end; Const

MaxEnemies = 50;

ComboStr: Array [0. 5] of String[20] =

(«Looser!!! » ,

" «,

" 2 hit combo " ,

" Eat this! " ,

" Ough! 4 mans at once " ,

" Aaaaaaaaamazing!!! "); Var

ManX, StoneY, StoneX, EnemyDelay, EnemyLimit: Integer;

Enemies: Array [1. MaxEnemies] of EnemyType;

Score, Level, Kills, Combo: Word;

Timer: Longint;

GameOver: Boolean; {==================================================================} Const ca: Word = 0; cc: String[20] = ««; Procedure ComboString (s: String); begin if p. s «» then begin cc: =s; ca: =10; end; if ca>0 then begin

DrawString (Base2,160-Byte (cc[0])*4,90,cc);

Dec (ca); end; end; Procedure NextLevel; forward; {==================================================================} Procedure InitEnemies; Var i: Byte; begin for i: =1 to MaxEnemies do Enemies[i]. Free:=true; end; Procedure DrawEnemies; Var i: Byte; begin for i: =1 to MaxEnemies do

With Enemies[i] do if not Free then

DrawTSpr (Base2,X, Y, EnemyHgt, EnemyWdt,@EnemySpr[A]); end; Procedure MoveEnemies; Var i: Byte; begin for i: =1 to MaxEnemies do

With Enemies[i] do if not Free then begin if Falling then begin

Y: =Y+10; if Y> 199 then begin

Free: =true; if Kills=(Level+1)*20 then NextLevel; end; if D=0 then begin

Inc (A); if A>2 then A: =1;

D: =2; end else Dec (D); end else if D=0 then begin

Y: =Y-5; if Y2 then A: =1;

D: =S; end else Dec (D); end else if (EnemyLimit> 0) and (EnemyDelay=0) then begin

X: =Random (38)*8;

Y: =200;

D: =0;

S: =(10-Level);

A: =1;

EnemyDelay: =(13-Level)*2+1;

Falling: =false;

Free: =false;

Dec (EnemyLimit); end;

Dec (EnemyDelay); end; {==================================================================} Procedure DrawScreen; Var x, y: Integer; s: String[80]; tmp: String[6]; begin

Bar (Base2,0,0,319,9,8);

FillBase (Base2,3200,9600,$ 3 030 303); for y: =0 to 15 do for x: =0 to 31 do

DrawOSpr (Base2,x*10,40+y*10,BrickHgt, BrickWdt,@BrickSpr); p. s:= «ю ~SIEGE~ ю Level: »;

Str (Level, tmp);

While Byte (tmp[0])X) and (StoneXY) and (StoneY0 then Dec (ManX); if Key[keyRight] then if ManX=10) or GameOver; if GameOver then GameOverProc; end; Procedure Done; begin

DoneButtons;

SetTextMode;

DoneVirtualPage; end; {==================================================================} Var choice: Byte; begin

Init;

Repeat choice: =Logo;

Case choice of

1: Game;

2: Info;

3: Story; end;

Until choice=4;

Done; end.

UNIT Buttons; INTERFACE Uses DOS; Const keyESC = 1; keyF1 = 59; keyF2 = 60; keyF3 = 61; keyF4 = 62; keyF5 = 63; keyF6 = 64; keyF7 = 65; keyF8 = 66; keyF9 = 67; keyF10 = 68; keyF11 = 87; keyF12 = 88; keyScrollLock = 70; keyTilde = 41; key1 = 2; key2 = 3; key3 = 4; key4 = 5; key5 = 6; key6 = 7; key7 = 8; key8 = 9; key9 = 10; key0 = 11; keyUnderline = 12; keyEquality = 13; keyBackspace = 14; keyTab = 15; keyQ = 16; keyW = 17; keyE = 18; keyR = 19; keyT = 20; keyY = 21; keyU = 22; keyI = 23; keyO = 24; keyP = 25; keyIndex = 26; keyBackIndex = 27; keyEnter = 28; keyCapsLock = 58; keyA = 30; keyS = 31; keyD = 32; keyF = 33; keyG = 34; keyH = 35; keyJ = 36; keyK = 37; keyL = 38; keyDoublePeriod = 39; keyApostroph = 40; keyLShift = 42; keyBackSlash = 43; keyZ = 44; keyX = 45; keyC = 46; keyV = 47; keyB = 48; keyN = 49; keyM = 50; keyComma = 51; keyPeriod = 52; keySlash = 53; keyRShift = 54; keyCtrl = 29; keyAlt = 56; keySpace = 57; keyNumLock = 69; keyMultiply = 55; keyMinus = 74; keyPlus = 78; keyDelete = 83; keyHome = 71; keyUp = 72; keyPgUp = 73; keyLeft = 75; keyFive = 76; keyRight = 77; keyEnd = 79; keyDown = 80; keyPgDn = 81; keyInsert = 82;

KeyPressed: Boolean = FALSE; Var

Key: Array [1. 128] of Boolean;

WasPressed: Array [1. 128] of Boolean; Const

CheckWarmReboot: Boolean = TRUE;

WarmRebootFlag: Boolean = FALSE; Procedure InitButtons; Procedure DoneButtons; Function ButtonsInited: Boolean; Function IsKeypressed: Boolean; Function Pressed (Index: Byte):Boolean; Procedure ClearKeys; IMPLEMENTATION Const

Init: Boolean=FALSE; Var

OldKbdHandler: Pointer; Procedure Int9; INTERRUPT; Var

ScanCode, Tmp: Byte; begin

ScanCode: =Port[$ 60]; if ScanCode and 128=0 then begin

Key[ScanCode]: =TRUE;

KeyPressed: =TRUE; end else begin

ScanCode: =ScanCode xor 128;

Key[ScanCode]: =FALSE;

WasPressed[ScanCode]: =TRUE;

KeyPressed: =FALSE; end; if CheckWarmReboot and (ScanCode=keyDelete) then begin

Tmp: =Mem[Seg0040:$ 0017]; if Tmp and 12=12 then begin

Tmp: =Tmp xor 21;

WarmRebootFlag: =TRUE; end;

Mem[Seg0040: $ 0017]:=Tmp; end; asm in al, 61h or al, 82h out 61h, al and al, 7Fh out 61h, al mov al, 20h out 20h, al end;

end; Procedure InitButtons; begin if not Init then begin

GetIntVec ($ 9,OldKbdHandler);

SetIntVec ($ 9,@Int9);

FillChar (Key, SizeOf (Key), FALSE);

FillChar (WasPressed, SizeOf (WasPressed), FALSE);

CheckWarmReboot: =TRUE;

WarmRebootFlag: =FALSE;

Init: =TRUE; end; end; Procedure DoneButtons; begin if Init then begin

SetIntVec ($ 9,OldKbdHandler);

WarmRebootFlag: =FALSE;

Init: =FALSE; end; end; Function ButtonsInited; begin

ButtonsInited: =Init; end; Function IsKeypressed; Var i: Byte; f: Boolean; begin f: =false; i: =1;

While (і «);

Old: =Res; end; if Pressed (keyUp) then begin

Res: =Res-1; if Res4 then Res: =1; end;

Until Key[keyEnter];

Logo: =Res; end; Procedure Center (y: Integer;Const s: String); begin

DrawString (Base1,160-(Length (s)*8 divx 2), y, s); end; Procedure Info; begin

ClearBase (Base1);

Center (2, «Instructions »);

Center (20, «Arrows — moving Hero »);

Center (30, «Space — throw stone »);

Center (40, «Esc — exit the game »);

Center (190, «Press any key »);

ClearKeys;

Repeat Until IsKeypressed; end; Procedure Story; begin ClearBase (Base1); Center (2, «Передісторія »); DrawString (Base1,1,20, «Чимало років тому на Землю упав метеорит. »); DrawString (Base1,1,30, «При дослідженні до лабораторій вчені «); DrawString (Base1,1,40, «знайшли у ньому біологічне вещес- «); DrawString (Base1,1,50, «тво позаземного походження. Зрозумівши всю »); DrawString (Base1,1,60, «небезпека цього, вона спробувала »); DrawString (Base1,1,70, «нейтралізувати его. Но вірус став швидко »); DrawString (Base1,1,80, «поширюватися і заразив всіх участни »); DrawString (Base1,1,90, «ков дослідження. Вийшовши за стіни лабора- «); DrawString (Base1,1,100, «тории він став зарожать людей. Зараженные »); DrawString (Base1,1,110, «вірусом зовні не відрізнялися від »); DrawString (Base1,1,120, «людей, але підпорядковувалися неземному розуму. »); DrawString (Base1,1,130, «Їхнім завданням было: уничтожить що залишилося »); DrawString (Base1,1,140, «население. Тогда люди стали об'єднувати- «); DrawString (Base1,1,150, «ся, чтобы захиститися. Вони влаштували »); DrawString (Base1,1,160, «засідку у фортеці. Але агресивних «образ- «); DrawString (Base1,1,170, «видаторов ніщо були зупинити… »); ClearKeys;

Repeat Until IsKeypressed; end; END.

UNIT SiegeSpr; INTERFACE Const

BrickHgt = 10;

BrickWdt = 10;

BrickSpr: Array [1. BrickHgt, 1. BrickWdt] of Byte =

((7,7,7,7,7,7,7,7,7,7),

(4,4,4,4,4,4,4,4,4,7),

(4,4,4,4,4,4,4,4,4,7),

(4,4,4,4,4,4,4,4,4,7),

(4,4,4,4,4,4,4,4,4,7),

(7,7,7,7,7,7,7,7,7,7),

(4,4,4,4,7,4,4,4,4,4),

(4,4,4,4,7,4,4,4,4,4),

(4,4,4,4,7,4,4,4,4,4),

(4,4,4,4,7,4,4,4,4,4)); Const

StoneHgt = 8;

StoneWdt = 8;

StoneSpr: Array [1. StoneHgt, 1. StoneWdt] of Byte =

((0,0,8,8,8,8,0,0),

(0,8,7,7,8,8,8,0),

(8,7,8,8,8,8,8,8),

(8,7,8,8,8,8,8,8),

(8,8,8,8,8,8,8,8),

(8,8,8,8,8,8,8,8),

(0,8,8,8,8,8,8,0),

(0,0,8,8,8,8,0,0)); Const

ManHgt = 20;

ManWdt = 16;

ManSpr: Array [1. 2,1. ManHgt, 1. ManWdt] of Byte =

(((00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00),

(00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00),

(00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00),

(00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00),

(00,00,00,00,00,00, 7, 7, 7, 7,00,00,00,00,00,00),

(00,00,00,00,00, 7, 7, 7, 7, 7, 7,00,00,00,00,00),

(00,00,00,00,00, 7,15,15,15,15, 7,00,00,00,00,00),

(00,00,00,00,00,15, 3, 1, 1, 3,15,00,00,00,00,00),

(00,00,00,00,00,15,15,15,15,15,15,00,00,00,00,00),

(00,00,00,00,00,15,15, 8, 8,15,15,00,00,00,00,00),

(00,00,00,00,00,15,15,13,13,15,15,00,00,00,00,00),

(00,00,00,00,00,00,15,15,15,15,00,00,00,00,00,00),

(00,00,00,00,12,12,15,15,15,15,12,12,00,00,00,00),

(00,12,12,12,12,12,12,14,14,12,12,12,12,12,12,00),

(12,12,12,12,12,12,12,14,14,12,12,12,12,12,12,12),

(12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12),

(12,12, 8,12,12,12,12,12,12,12,12,12,12, 8,12,12),

(12,12, 8,12,12,12,12,12, 8,12,12,12,12, 8,12,12),

(12,12, 8,12,12,12,12,12,12,12,12,12,12, 8,12,12),

(12,12, 8,12,12,12,12,12, 8,12,12,12,12, 8,12,12)),

((00,00,00,15,00,00,00,00,00,00,00,00,15,00,00,00),

(00,00,00,15,00,00,00,00,00,00,00,00,15,00,00,00),

(00,00,12,12,00,00,00,00,00,00,00,00,12,12,00,00),

(00,00,12,12,00,00,00,00,00,00,00,00,12,12,00,00),

(00,00,12,12,00,00, 7, 7, 7, 7,00,00,12,12,00,00),

(00,00,12,12,00, 7, 7, 7, 7, 7, 7,00,12,12,00,00),

(00,12,12,00,00, 7,15,15,15,15, 7,00,00,12,12,00),

(00,12,12,00,00,15, 3, 1, 1, 3,15,00,00,12,12,00),

(00,12,12,00,00,15,15,15,15,15,15,00,00,12,12,00),

(00,12,12,00,00,15,15, 8, 8,15,15,00,00,12,12,00),

(00,12,12,00,00,15,15,13,13,15,15,00,00,12,12,00),

(00,12,12,12,00,00,15,15,15,15,00,00,12,12,12,00),

(00,00,12,12,12,12,15,15,15,15,12,12,12,12,00,00),

(00,00,12,12,12,12,12,14,14,12,12,12,12,12,00,00),

(00,00,12,12,12,12,12,14,14,12,12,12,12,12,00,00),

(00,00,12,12,12,12,12,12,12,12,12,12,12,12,00,00),

(00,00,00,12,12,12,12,12,12,12,12,12,12,00,00,00),

(00,00,00,12,12,12,12,12, 8,12,12,12,12,00,00,00),

(00,00,00,12,12,12,12,12,12,12,12,12,12,00,00,00),

(00,00,00,12,12,12,12,12, 8,12,12,12,12,00,00,00))); Const

EnemyHgt = 42;

EnemyWdt = 16;

EnemySpr: Array [1. 2,1. EnemyHgt, 1. EnemyWdt] of Byte =

(((00,00,00,00,00,00,00,00,00,00,00,00,00,00,15,00),

(00,00,00,00,00,00,00,00,00,00,00,00,00,00,15,00),

(00,00,00,00,00,00,00,00,00,00,00,00,00,10,10,00),

(00,00,00,00,00,00,00,00,00,00,00,00,00,10,10,00),

(00,00,00,00,00,00, 7, 7, 7, 7,00,00,00,10,10,00),

(00,00,00,00,00, 7, 7, 7, 7, 7, 7,00,00,10,10,00),

(00,00,00,00,00, 7, 7, 7, 7, 7, 7,00,00,10,10,00),

(00,00,00,00,00, 7, 7, 7, 7, 7, 7,00,00,10,10,00),

(00,00,00,00,00, 7, 7, 7, 7, 7, 7,00,00,10,10,00),

(00,00,00,00,00,15, 7, 7, 7, 7,15,00,00,10,10,00),

(00,00,00,00,00,15, 7, 7, 7, 7,15,00,00,10,10,00),

(00,00,00,00,00,00,15,15,15,15,00,00,10,10,10,00),

(00,00,00,00,10,10,15,15,15,15,10,10,10,10,00,00),

(00,10,10,10,10,10,10,10,10,10,10,10,10,10,00,00),

(10,10,10,10,10,10,10,10,10,10,10,10,10,10,00,00),

(10,10,10,10,10,10,10,10,10,10,10,10,10,10,00,00),

(10,10,00,10,10,10,10,10,10,10,10,10,10,00,00,00),

(10,10,00,10,10,10,10,10,10,10,10,10,10,00,00,00),

(10,10,00,10,10,10,10,10,10,10,10,10,10,00,00,00),

(00,10,10,10,10,10,10,10,10,10,10,10,10,00,00,00),

(00,10,10,10,10,10,10,10,10,10,10,10,10,00,00,00),

(00,10,10,10,10,10,10,10,10,10,10,10,10,00,00,00),

(00,00,00,10,10,10,10,10,10,10,10,10,10,00,00,00),

(00,00,00, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,00,00,00),

(00,00,00, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,00,00,00),

(00,00, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,00,00,00),

(00,00, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,00,00,00),

(00, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,00,00,00),

(00, 8, 8, 8, 8,00,00,00,00, 8, 8, 8, 8,00,00,00),

(8, 8, 8, 8, 8,00,00,00,00, 8, 8, 8, 8, 8,00,00),

(8, 8, 8, 8,00,00,00,00,00,00, 8, 8, 8, 8,00,00),

(8, 8, 8, 8,00,00,00,00,00,00, 8, 8, 8, 8,00,00),

(8, 8, 8, 8,00,00,00,00,00,00, 8, 8, 8, 8,00,00),

(00, 8, 8, 8,00,00,00,00,00,00, 8, 8, 8, 8,00,00),

(00, 8, 8, 8,00,00,00,00,00,00, 8, 8, 8, 8,00,00),

(00,00, 8, 8, 8,00,00,00,00,00,00, 8, 8, 8, 8,00),

(00,00, 8, 8, 8,00,00,00,00,00,00, 8, 8, 8, 8,00),

(00,00, 8, 8, 8,00,00,00,00,00,00, 8, 8, 8, 8,00),

(00,00,00,00,00,00,00,00,00,00,00, 8, 8, 8, 8,00),

(00,00,00,00,00,00,00,00,00,00,00, 8, 8, 8, 8,00),

(00,00,00,00,00,00,00,00,00,00,00, 8, 8, 8, 8,00),

(00,00,00,00,00,00,00,00,00,00,00, 8, 8, 8, 8,00)),

((00,15,00,00,00,00,00,00,00,00,00,00,00,00,00,00),

(00,15,00,00,00,00,00,00,00,00,00,00,00,00,00,00),

(00,10,10,00,00,00,00,00,00,00,00,00,00,00,00,00),

(00,10,10,00,00,00,00,00,00,00,00,00,00,00,00,00),

(00,10,10,00,00,00, 7, 7, 7, 7,00,00,00,00,00,00),

(00,10,10,00,00, 7, 7, 7, 7, 7, 7,00,00,00,00,00),

(00,10,10,00,00, 7, 7, 7, 7, 7, 7,00,00,00,00,00),

(00,10,10,00,00, 7, 7, 7, 7, 7, 7,00,00,00,00,00),

(00,10,10,00,00, 7, 7, 7, 7, 7, 7,00,00,00,00,00),

(00,10,10,00,00,15, 7, 7, 7, 7,15,00,00,00,00,00),

(00,10,10,00,00,15, 7, 7, 7, 7,15,00,00,00,00,00),

(00,10,10,10,00,00,15,15,15,15,00,00,00,00,00,00),

(00,00,10,10,10,10,15,15,15,15,10,10,10,10,00,00),

(00,00,10,10,10,10,10,10,10,10,10,10,10,10,10,00),

(00,00,10,10,10,10,10,10,10,10,10,10,10,10,10,10),

(00,00,10,10,10,10,10,10,10,10,10,10,10,10,10,10),

(00,00,00,10,10,10,10,10,10,10,10,10,10,00,10,10),

(00,00,00,10,10,10,10,10,10,10,10,10,10,00,10,10),

(00,00,00,10,10,10,10,10,10,10,10,10,10,00,10,10),

(00,00,00,10,10,10,10,10,10,10,10,10,10,10,10,00),

(00,00,00,10,10,10,10,10,10,10,10,10,10,10,10,00),

(00,00,00,10,10,10,10,10,10,10,10,10,10,10,10,00),

(00,00,00,10,10,10,10,10,10,10,10,10,10,00,00,00),

(00,00,00, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,00,00,00),

(00,00,00, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,00,00,00),

(00,00,00, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,00,00),

(00,00,00, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,00,00),

(00,00,00, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,00),

(00,00, 8, 8, 8, 8, 8,00,00,00,00, 8, 8, 8, 8,00),

(00,00, 8, 8, 8, 8, 8,00,00,00,00, 8, 8, 8, 8, 8),

(00,00, 8, 8, 8, 8,00,00,00,00,00,00, 8, 8, 8, 8),

(00,00, 8, 8, 8, 8,00,00,00,00,00,00, 8, 8, 8, 8),

(00,00, 8, 8, 8, 8,00,00,00,00,00,00, 8, 8, 8, 8),

(00,00, 8, 8, 8, 8,00,00,00,00,00,00, 8, 8, 8,00),

(00,00, 8, 8, 8, 8,00,00,00,00,00,00, 8, 8, 8,00),

(00, 8, 8, 8, 8,00,00,00,00,00,00, 8, 8, 8,00,00),

(00, 8, 8, 8, 8,00,00,00,00,00,00, 8, 8, 8,00,00),

(00, 8, 8, 8, 8,00,00,00,00,00,00, 8, 8, 8,00,00),

(00, 8, 8, 8, 8,00,00,00,00,00,00,00,00,00,00,00),

(00, 8, 8, 8, 8,00,00,00,00,00,00,00,00,00,00,00),

(00, 8, 8, 8, 8,00,00,00,00,00,00,00,00,00,00,00),

(00, 8, 8, 8, 8,00,00,00,00,00,00,00,00,00,00,00))); IMPLEMENTATION END.

UNIT VGA13h; INTERFACE Type

PScreen = ^TScreen;

TScreen = Array [0. 199,0. 319] of Byte; Const

ScreenHeight = 200;

ScreenWidth = 320;

GetMaxY = ScreenHeight-1;

GetMaxX = ScreenWidth-1;

MidX = GetMaxX divx 2;

MidY = GetMaxY divx 2;

PageSize = ScreenHeight*ScreenWidth;

QuarterSize = PageSize divx 4;

VideoSegment: Word = 0;

Base1: Word = 0;

Base2: Word = 0;

Page1: PScreen = NIL;

Page2: PScreen = NIL; Function DetectVGA: Boolean; Procedure SetGraphMode; Procedure SetTextMode; Procedure MakePixelSquare; Procedure CopyBase (Source, Destin: Word); Procedure ClearBase (Base: Word); Procedure FillBase (Base, Ofs, Count: Word;Color:Longint); Procedure MoveBase (Source, Destin, Count: Word); Procedure TileBase (Base, Ofs, Count: Word;Tile:Pointer;Len:Word); Procedure PutPixel (Base: Word;x, y: Integer;Color:Byte); Function GetPixel (Base: Word;x, y: Integer):Byte; Procedure Line (Base: Word;x1,y1,x2,y2:Integer;Color:Byte); Procedure VLine (Base: Word;x, y1, y2:Integer;Color:Byte); Procedure HLine (Base: Word;y, x1, x2:Integer;Color:Byte); Procedure Bar (Base: Word;x1,y1,x2,y2:Integer;Color:Byte); Procedure Polygon (Base: Word;x1,y1,x2,y2,x3,y3,x4,y4:Integer;c:Byte); Function InitVirtualPage: Boolean; Procedure DoneVirtualPage; IMPLEMENTATION Var

VirtualPage: Pointer;

{$L VGA13H. OBJ} Function DetectVGA; external; Procedure SetGraphMode; external; Procedure SetTextMode; external; Procedure MakePixelSquare; external; Procedure CopyBase; external; Procedure ClearBase; external; Procedure FillBase; external; Procedure MoveBase; external; Procedure TileBase; external; Procedure PutPixel; external; Function GetPixel; external; Procedure HLine; external; Procedure VLine; external;

Procedure Polygon; Var xpos: array [0. 199,0. 1] of Word; mny, mxy, y: Integer; i: Word; s1, s2,s3,s4: Shortint; begin mny: =y1; if y2mxy then mxy: =y4; s1: =byte (y1

ПоказатьСвернуть
Заполнить форму текущей работой