МІНІСТЕРСТВО ОСВІТИ Російської Федерації p>
Таганрозький державний радіотехнічний університет p>
Кафедра обчислювальної техніки p>
_____________________________________________________________________ p>
Дистанційне навчання p>
2000 - 2001 навчальний рік p>
ЗВІТ p>
про виконання практичних завдань за курсом p>
ТЕХНОЛОГІЯ ПРОГРАМУВАННЯ p>
Студента групи ВД - 49 p>
Каретіна Флоріана Вікторовича p>
Завдання виконав ________________ _____________________ підпис студента дата виконання завдання p>
Завдання перевірив ________________ _____________________ оцінка підписвикладача p>
_______________________ p>
дата перевірки завдання p>
Рецензія викладача p>
______________________________________________________________________< br>______________________________________________________________________< br>______________________________________________________________________< br>______________________________________________________________________< br>______________________________________________________________________ p>
Опис програми створеної за допомогою Turbo Visual. p>
Починається програма з підключення бібліотек Turbo Visual:uses App, Objects, Menus, Drivers, Editors, Views;
Основний блок програми складається з трьох команд:
Begin p>
MyApp.Init; (Підготувати роботу програми) p>
MyApp.Run; (Виконати необхідні дії) p>
MyApp.Done; (Завершити виконання програми) < br>End.
Для створення власної рядка статусу вводимо наступний опис:type p>
TMyApp = object (TApplication) (Створюємо об'єкт-нащадок від TApplication) procedure InitStatusLine; virtual; (перекриваємо старий метод
InitStatusLine новим)
Опис нового методу, за допомогою якого створюється рядок статусу:
Procedure TMyApp.InitStatusLine;
Var R: TRect; (зберігає кордону рядка статусу)
Begin p>
GetExtent (R); (встановлює R в координати всього екрану) p>
RAY: = RBY-1; (пересуває вершину вище нижньої на 1 рядок) p>
StatusLine: = New (PStatusLine, Init (R, (створює рядок статусу) p>
NewStatusDef (0, $ FFFF, (встановлює діапазон контекстного Help) p>
NewStatusKey ( '~ Alt - X ~ Exit ', kbAltX, cmQuit, (визначає елемент) p>
NewStatusKey (' ~ Alt-F3 ~ Close ', kbAltF3, cmClose, (інший) nil)), (більше немає клавіш) nil)) ) (більше немає визначень)
End;
Формування меню:
Опис в розділі типів:
TMyApp = object (TApplication) (Створюємо об'єкт-нащадок від TApplication)procedure InitMenuBar; virtual; (перекриваємо старий метод InitMenuBarновим)
Тіло процедури:procedure TMyApp.InitMenuBar;
Var R: TRect;
Begin p>
GetExtent (R); (встановлює R в координати всього екрану) p>
RBY: = RAY 1; p>
MenuBar: = New (PMenuBar, Init (R, NewMenu ((створити смугу меню) p>
NewSubMenu ( '~ F ~ ile', hcNoContext, NewMenu ((визначити меню) p>
StdFileMenuItems (nil)), (стандратная функція визначенняелементів) p>
(меню
File) p>
NewSubMenu ( '~ ~ W indow', hcNoContext, NewMenu ((визначити меню) p>
StdWindowMenuItems (nil)), (стандратная функція визначенняелементів) p>
(меню
Window) nil) (більше немає підменю) p>
)))); (кінець смуги)
End;
Створення вікон і маніпуляції з ними:
Опис: procedure NewWindow; virtual; procedure HandleEvent (var Event: TEvent); virtual; end; p>
PDemoWindow = ^ TDemoWindow; (тип покажчика для нового об'єктноготипу) p>
TDemoWindow = object (TWindow) (визначення нового типу вікна) constructor Init (Bounds: TRect; WinTitle: String; WindowNo: Integer); end; p>
PInterior = ^ TInterior ; p>
TInterior = object (TScroller) constructor Init (var Bounds: TRect; HS, VS: PScrollBar); procedure Draw; virtual; procedure HandleEvent (var Event: TEvent); virtual; end;
Опис тіла конструктора ініціалізації вікна:constructor TDemoWindow.Init (Bounds: TRect; WinTitle: String; WindowNo:
Integer);var p>
S: String [3]; p>
Interior: PInterior; p>
HS, VS: PScrollBar;begin p>
Str (WindowNo, S); (встановлює номер вікна в заколовке) p>
TWindow.Init (Bounds, WinTitle + '' + S, wnNoNumber); p>
GetClipRect (Bounds); p>
Bounds.Grow (-1, -1); (інтер'єр розміщується всередині рамки вікна) p>
VS: = StandardScrollBar (sbVertical + sbHandleKeyBoard); (дозвілпереміщення вертикального бігунка стрілками на клавіатурі) p>
HS: = StandardScrollBar (sbHorizontal + sbHandleKeyBoard); (дозвілпереміщення горизонтального бігунка стрілками на клавіатурі) p>
Interior: = New (PInterior, Init (Bounds, HS, VS )); p>
Insert (Interior); (додає інтер'єр до вікна)end;
Опис конструктора ініціалізації інтер'єру:constructor TInterior.Init (var Bounds: TRect; HS, VS: PScrollBar);begin p>
TScroller.Init (Bounds, HS, VS); p>
GrowMode: = gfGrowHiX + gfGrowHiY;end;
Опис процедури промальовування інтер'єру вікна:procedure TInterior.Draw;begin p>
TScroller.Draw; (Виклик стандартної промальовування) p>
WriteStr (0,0, 'Текст у вікні', 1); (Виведення тексту у вікно) p> < p> TScroller.ShowCursor; (Показати курсор)end;
Опис тіла процедури створення нового вікна:procedure TMyApp.NewWindow;var p>
Window: PDemoWindow; p>
R: TRect;
Begin p>
Inc (WinCount); p>
R. Assign (0,0,26,7); (установка початкового розміру і позиції) p>
R. Move (Random (58), Random (16)); (випадкове переміщення по екрану) p>
Window: = New (PDemoWindow, Init (R, 'Demo Window', WinCount )); p> < p> DeskTop ^. Insert (Window); (вивести вікно на панель екрану)
End;
Опис тіла процедури обробки команд середовищаprocedure TMyApp.HandleEvent (var Event: TEvent);
Begin p>
TApplication.HandleEvent (Event); (діє як предок) if Event.What = evCommand Then p>
Begin case Event.Command of (але відгукується на додатковікоманди) cmNew: NewWindow; (визначає дію для команди cmNew) else p>
Exit; p>
End; p>
ClearEvent (Event); (очищає подія після обробки) end;
End;
Опис тіла процедури обробки команд у вікніprocedure TInterior.HandleEvent (var Event: TEvent);
Begin p>
TScroller.HandleEvent (Event); (діє як предок) case Event.What of (перевірка події) evKeyDown: (якщо натиснута клавіша) p>
Begin p>
Case Event.KeyCode of (перевірка: яка клавіша натиснута) kbLeft: (стрілка вліво) begin if x> 0 then (якщо координата по Х більше 0) p>
Begin x: = x-1; (то зменшити її на 1) p>
SetCursor (x, y); (встановити на нову координату курсор) p>
End end; kbRight: (стрілка вправо) begin x: = x +1; (збільшити координату по Х на одиницю) p>
SetCursor (x, y); (встановити на нову координату курсор) end; kbUp: (стрілка вгору) begin if y> 0 then (якщо координата по Y більше 0 ) p>
Begin y: = y-1; (то зменшити її на 1) p>
SetCursor (x, y); (встановити на нову координату курсор) p>
End end; kbDown: (стрілка вниз) begin y: = y +1; (збільшити координату по Y на 1) p>
SetCursor (x, y); (встановити на нову координату курсор) end; end ; p>
Case Event.ScanCode of (перевірка скан-коду клавіатури) p>
57: (якщо пробіл) begin p>
If GetState (sfCursorVis) Then (якщо курсор видно) p>
TScroller.HideCursor (то приховати його) p>
Else p>
TScroller.ShowCursor; (інакше показати його) end; end; p> < p> End; end;
End; p>
Опис ігрової програми «Стрільба по мішені». P>
Ігрова програма складається з трьох процедур (minv - зменшення кол-вапатронів, intro - заставка, go - кінець гри) і основного блоку програми.
Процедура minv (зменшення кількості патронів).kv: = kv-1; (зменшення значення змінної kv (в основній програмі вонафігурує як кількість патронів))setfillstyle (1,9); (установка стилю заповнення фону)bar ((20-kv) * 10 +415,4, (20-kv) * 10 +425,12); (стирання одного патрона з екрана)
Процедура intro; (Заставка)
Виводить заставку гри.settextstyle (0,0,15); (установка стилю тексту)setcolor (12); (встановлення кольору)outtextxy (140,100, 'ТИР'); (висновок тексту)settextstyle (0,0,2);setcolor (10);outtextxy (130,290, 'ESC -');setcolor (14);outtextxy (220,290, 'Вихід з програми');settextstyle (0,0,1);tp: = 'Натисніть будь-яку кнопку ДЛЯ ПОЧАТКУ ГРИ';settextstyle (0,0,1);setcolor (11);outtextxy (320-trunc (length (tp) * 4), 340, tp); (висновок тексту з розрахунком зацентру)a: = readkey;if ord (a) = 27 then exi: = true; (якщо натиснута клавіша Esc - вийти з гри)setfillstyle (1,0);bar (100,30,600,350);
Процедура go - виводить заставку кінця гриprocedure go; (Кінець гри)beginsettextstyle (0,0,5); (установка стилю для перегляду тексту)setcolor (2); (встановлення кольору)outtextxy (50,200, 'ВСЕ, догралися');settextstyle (0,0,2);readkey;
UROV: = 1; MENU: = true; oko: = 0;end;
Основне тіло програмиbegind: = vga; initgraph (d, r ,''); (ініціалізація графіки)setgraphmode (2); (установка графічного режиму)randomize; (виклик генератора випадкових чисел)urov: = 1; oko: = 0; mus: = true; sou: = true; menu: = true; (первісна установказмінних)repeat (початок основного циклу програми)
(Створення інтерфейсу)cleardevice; (очістака екрана)setfillstyle (1,1); (установка стилю заповнення фону)bar (0,0,640,2); (малювання прямокутників навколо робочої області)bar (0,0,2,480);bar (0,480,640,478);bar (640,480,638,0);setfillstyle (1,9);bar (2,2,638,17);bar (2,2,5,478);bar (2,478,638,475);bar (638,2,635,478);setfillstyle (1,3);bar (5,17,635,19);bar (5,17,7,475);bar (5,475,635,473);bar (635,17,633,475);setfillstyle (9,14);setcolor (14); (встановлення кольору малювання)moveto (7,460); (переміщення графічного курсору у вказані координати)for i: = 1 to 62 do (малювання піску горбками)lineto (i * 10 +7,460 + random (10));lineto (633,460);line (7,473,633,473);line (7,473,7,460);line (633,473,633,460);floodfill (9,469,14); (заповнення стилем області, розташованої або всерединізамкнутого контуру, або поза ним)setlinestyle (0,0,1); (установка стилю ліній)setfillstyle (8,6); (установка стилю заповнення фону)bar (260,408,380,470);setfillstyle (1,1);setcolor (14);line (260,408,260,470);line (260,408,380,408);line (380,408,380,470);fillellipse (320,408,23,15); (креслення контуру еліпса поточним кольором ізаповнення обмеженою контуром ділянки екрана, поточним візерунком)setlinestyle (0,3,3);setcolor (11);line (320,391,320,376);fi: = pi; tzm: = 40; tzs: = 40;settextstyle (0,0,2);cou: = 0; kv: = 20; ov: = 1; ex: = 0;setfillstyle (1,15); setcolor (7);bar (250,6,310,12);setfillstyle (1,0);bar (17,2,220,17);setcolor (12);outtextxy (20,3, 'Рахунок:');setcolor (11);setfillstyle (1,11);for i: = 1 to kv do fillellipse (i * 10 +420,8,3,3); (малювання патронів)if menu then intro; (якщо menu = true, то викликати процедуру intro (заставкагри))menu: = false;if exi then goto 1; (якщо exi = true (вихід), то перейти на мітку 1)repeatif keypressed then a: = readkey;settextstyle (0,0,1);outtextxy (280,280, 'Натисніть ENTER');setcolor (random (16));settextstyle (0,0,2);str (urov, em);outtextxy (270,200, concat ( 'РІВЕНЬ', em)); (висновок тексту за допомогою процедуриконкатенації)str (urov * 1000, em);outtextxy (190,240, concat ( 'Наберіть', em, 'очок'));until ord (a) = 13; (вихід з циклу по клавіші Enter)setfillstyle (1,0);bar (180,200,500,300);gettime (q1, min, sec, q2); (одержання системного часу)mk: = min +1; (збільшення хвилин на 1)sk: = sec;if mk> = 60 then begin (якщо кількість хвилин більше 60,) hk: = q1 1; (ту кількість годин збільшити на 1) mk: = 0; (хвилини обнулити) end;repeatgettime (q1, min, sec, q2); (одержання системного часу)setfillstyle (1,1); (установка стилю заповнення)setcolor (4); (встановлення кольору малювання)if mk = min then rk: = 60-abs (sk-sec) else rk: = abs (sk-sec);bar (250,6,250 + abs (rk), 12);if not (bm) then begin gettime (q1, min, sec, q2); (одержання системного часу) po: = random (3); if sec + po> = 59 then begin tpm: = min +1; tps: = 0; end else begin tpm: = min; tps: = sec + po; end; end;xnp: = round (sin (fi) * 24 +320);ynp: = round (cos (fi) * 15 +406);xkp: = round (sin (fi) * 38 +320);ykp: = round (cos (fi) * 30 +406);setlinestyle (0,3,3);setcolor (11);line (xnp, ynp, xkp, ykp);ok: = false;if keypressed then begin a: = readkey; if a = chr (77) then begin fi: = fi-0.05; ok: = true; end; (Поворот дула вліво) if a = chr (75) then begin fi: = fi +0.05; ok: = true; end; (Повоорт дула вправо) if ord (a) = 27 then menu: = true; (Вихід в меню) if fi3 * pi/2 then fi: = 3 * pi/2; if a = '' then begin (Постріл) if (not (fire.v)) and (not (ok)) then begin minv; for d: = 1 to 100 do begin if sou thensound (random (200) +100); delay (1); end; nosound; fire.v: = true; fire.r: = 35; fire.si: = sin (fi) * 1.1; fire.co: = cos (fi); ok: = true; fire.xs: =- 10; fire.ys: =- 10; end; s: = s +1; end;end;if (kv = 0) and (not (fire.v)) then ex: = ex 1; if fire.v then begin (польоту снаряда) setfillstyle (1,0); setcolor (0); bar (fire.xs -4, fire.ys-4, fire.xs 4, fire.ys +4); xv: = round (fire.si * fire.r +320); yv: = round (fire.co * fire.r +406); fire.r: = fire.r 5; fire.xs: = xv; fire.ys: = yv; if (fire.xs = 622) or (fire.ys = tps) and not (mn) then begin bm: = true; mn: = true; xm: = random (560) +30; ym: = random (320) +30; vm: = random (2) +3; if vm + sec> = 59 then begin tzm: = min +1; tzs: = abs (vm + sec-60); end else begin tzm: = min; tzs: = vm + sec; end; repeat nch: = random (5) 1; mi: = 20 + nch * 5; (Розмір мішені) until nch = tzm) and (sec> = tzs) then begin bm: = false; mn: = false; setfillstyle (1,0); bar (xm, ym, xm + mi, ym + mi); xm: =- 1300; ym: =- 1300; end;if ok then begin setcolor (0); line (xnp, ynp, xkp, ykp);end;until (ord (a) = 27) or (ex = 1) or ((mk = min) and (sec> = sk));oko: = oko + cou;str (oko, em);bm: = false; mn: = false; fire.v: = false;if cou p>