Реферат: Разработка игровой программы
Название: Разработка игровой программы Раздел: Рефераты по информатике, программированию Тип: реферат |
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОСИЙСКОЙ ФЕДЕРАЦИИ Таганрогский государственный радиотехнический университет Кафедра вычислительной техники_____________________________________________________________________Дистанционное обучение2000 – 2001 учебный год КУРСОВАЯ РАБОТА по курсу ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯСтудента группы ВД – 49 Каретина Флориана Викторовича Задание выполнил ________________ _____________________ подпись студента дата выполнения задания Задание проверил ________________ _____________________ оценка подпись преподавателя _______________________ дата проверки задания Рецензия преподавателя______________________________________________________________________ ______________________________________________________________________ ______________________________________________________________________ ______________________________________________________________________ ______________________________________________________________________ ОГЛАВЛЕНИЕ 1. Постановка задачи 3 стр. 2. Входные данные 3 стр. 3. Выходные данные 3 стр. 4. Текст программы 4 стр. 1. Постановка задачи. Необходимо разработать игровую программу «Арканоид». Дощечки для отбивания шарика надо разместить слева и справа. Правая дощечка должна управляться клавишами «A» и «Z» (вверх и вниз соответственно), а правая дощечка должна управляться клавишами «L» и «<» (вверх и вниз соответственно). Так же должен быть предусмотрен режим игры за компьютер (автоматическое отбивание дощечками шарика). По нажатию клавиши «1» - включение/выключение игры за компьютер левой дощечки, по нажатию клавиши «2» - включение/выключение игры за компьютер правой дощечки. Программа должна иметь дружественный интерфейс, работать на компьютере с процессором 486DX-66. 2. Входные данные. 1. Управление дощечками пользователем. 2. Положение дощечек при приближении шарика к краям экрана. 3. Выходные данные.
Текст программы program Game_Tenis; uses DOS, Crt2, Graph; var CK, StopRun, Up1, Down1, Up2, Down2, Auto1, Auto2 :Boolean; R1, R2, oR1, oR2, BX, BY, oBX, oBY, Step :Integer; kX, kY, rBX, rBY :Real; MissCount1, MissCount2 :Word; OldInt9: procedure; {____________________________________________________________________________} {работа с клавиатурой по превываниям} procedure UserInt9; interrupt; begin case Port[$60] of $81: StopRun:=True; {Esc - выход} $1E: begin CK:=True; Up1:=True; end; {вверх первая дощечка} $9E: begin CK:=True; Up1:=False; end; $2C: begin CK:=True; Down1:=True; end; {вниз первая дощечка} $AC: begin CK:=True; Down1:=False; end; $25: begin CK:=True; Up2:=True; end; {вверх вторая дощечка} $A5: begin CK:=True; Up2:=False; end; $32: begin CK:=True; Down2:=True; end; {вниз вторая дощечка} $B2: begin CK:=True; Down2:=False; end; $02: Auto1:=not Auto1; {включение/выключение авто-режима} {для игрока 1} $03: Auto2:=not Auto2; {включение/выключение авто-режима} {для игрока 2} end; Inline ($E4/$61/$8A/$E0/$0C/$80/ {вставка в машинных кодах} $E6/$61/$86/$E0/$E6/$61/ {для правильной работы} $B0/$20/$E6/$20); {обработчика прерывания} end; {----------------------------------------------------------------------------} {процедура установки пользовательского прерывания} procedure SetUserInt; begin GetIntVec($09,@OldInt9); {сохранение старого вектора} SetIntVec($09,Addr(UserInt9)); {установка нового} end; {----------------------------------------------------------------------------} {восстановление старого вектора} procedure SetOldInt; begin SetIntVec($09,@OldInt9); end; {----------------------------------------------------------------------------} {процедура инициализации графического режима} procedure InitScreen; var GrMode, GrDriver :Integer; GrPath :String; begin GrDriver:=VGA; GrMode:=VGAHi; GrPath:='E:\pl\bp\bgi'; InitGraph(GrDriver, GrMode, GrPath); SetTextStyle(2, 0, 6); end; {----------------------------------------------------------------------------} {процедура обновления количества очков игроков} procedure RefrCount; var s1 :String; begin SetFillStyle(1,0); Bar(610, 230, 639, 250); Str(MissCount1, s1); OutTextXY(614,232, s1); Bar(0, 0, 29, 479); Str(MissCount2, s1); OutTextXY(5,232, s1); Bar(0, 230, 29, 250); Str(MissCount2, s1); OutTextXY(4,232, s1); Bar(610, 0, 639, 479); Str(MissCount1, s1); OutTextXY(615,232, s1); end; {----------------------------------------------------------------------------} procedure Game; var t1 :Integer; ChC :Boolean; begin {прорисовка игрового поля} SetColor(12); Rectangle(30,0, 609, 479); SetFillStyle(1, 1); Bar(31,1, 608, 478); {первоначальная установка переменых} kX:=0.8; kY:=0.3; Step:=10; rBX:=320; rBY:=240; oBX:=320; oBY:=240; R1:=240; R2:=240; oR1:=240; oR2:=240; repeat {если нажата клавиша вверх и не нажата клавиша вниз} {для игрока 1} if Up1 and not Down1 then begin {перемещение дощечки вверх} R1:=R1-10; if R1<50 then R1:=50; {не пропускать выше положенной} SetColor(1); {координаты} Line(50, oR1-48, 50, oR1+48); SetColor(11); Line(50, R1-48, 50, R1+48); oR1:=R1; end; {если нажата клавиша вниз и не нажата клавиша вверх} {для игрока 1} if Down1 and not Up1 then begin {перемещение дощечки вниз} R1:=R1+10; if R1>430 then R1:=430;{не пропускать ниже положенной} SetColor(1); {координаты} Line(50, oR1-48, 50, oR1+48); SetColor(11); Line(50, R1-48, 50, R1+48); oR1:=R1; end; {если нажата клавиша вверх и не нажата клавиша вниз} {для игрока 2} if Up2 and not Down2 then begin {перемещение дощечки вверх} R2:=R2-10; if R2<50 then R2:=50; {не пропускать выше положенной} SetColor(1); {координаты} Line(590, oR2-48, 590, oR2+48); SetColor(10); Line(590, R2-48, 590, R2+48); oR2:=R2; end; {если нажата клавиша вниз и не нажата клавиша вверх} {для игрока 2} if Down2 and not Up2 then begin {перемещение дощечки вниз} R2:=R2+10; if R2>430 then R2:=430;{не пропускать ниже положенной} SetColor(1); {координаты} Line(590, oR2-48, 590, oR2+48); SetColor(10); Line(590, R2-48, 590, R2+48); oR2:=R2; end; {если включен автоматический режим для игрока 1} if Auto1 then begin {автоматическое перемещение дощечки} R1:=BY; if R1<50 then R1:=50;{не пропускать выше положенной} {координаты} if R1>430 then R1:=430;{не пропускать ниже положенной} {координаты} SetColor(1); Line(50, oR1-48, 50, oR1+48); oR1:=R1; end; SetColor(11); Line(50, R1-48, 50, R1+48); {если включен автоматический режим для игрока 2} if Auto2 then begin {автоматическое перемещение дощечки} R2:=BY; if R2<50 then R2:=50;{не пропускать выше положенной} {координаты} if R2>430 then R2:=430;{не пропускать ниже положенной} {координаты} SetColor(1); Line(590, oR2-48, 590, oR2+48); oR2:=R2; end; {перерисовка полета шарика} SetColor(10); Line(590, R2-48, 590, R2+48); SetColor(12); Rectangle(30,0, 609,479); SetFillStyle(1, 1); SetColor(1); FillEllipse(oBX, oBY, 10, 10); rBX:=rBX+kX*Step; rBY:=rBY+kY*Step; BX:=Round(rBX); BY:=Round(rBY); SetFillStyle(1, 15); SetColor(7); FillEllipse(BX, BY, 10, 10); {если дощечка не попала} if ChC then begin ChC:=False; RefrCount; {обновить очки игроков} end; {столкновение шарика с дощечкой слева} if (BX<60) and (BY>(R1-55)) and (BY<(R1+55)) then begin kX:=-kX; Sound(1000); Delay(10); NoSound; end; {не попадание дощечкой слева} if (BX<40) then begin rBX:=580; rBY:=R2; kX:=Abs(kX); Sound(700); Delay(500); NoSound; Inc(MissCount1); ChC:=True; end; {столкновение шарика с дощечкой справа} if (BX>580) and (BY>(R2-55)) and (BY<(R2+55)) then begin kX:=-kX; Sound(1000); Delay(10); NoSound; end; {не попадание дощечкой справа} if (BX>600) then begin rBX:=60; rBY:=R1; kX:=-Abs(kX); Sound(700); Delay(500); NoSound; Inc(MissCount2); ChC:=True; end; {удар шарика об верхнюю или нижнюю стенку} if (BY<10) or (BY>470) then kY:=-kY; oBX:=BX; oBY:=BY; Delay(10); until StopRun; {выход если нажата клавиша Esc} end; {============================================================================} begin InitScreen; {инициализация графического режима} SetUserInt; {установка пользовательского прерывания} Game; {непосредственно вызов игры} SetOldInt; {восстановления старого вектора прерывания} CloseGraph; {закрытие графического режима} end. МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОСИЙСКОЙ ФЕДЕРАЦИИ Таганрогский государственный радиотехнический университет Кафедра вычислительной техники_____________________________________________________________________Дистанционное обучение2000 – 2001 учебный год ОТЧЕТо выполнении практических заданий по курсу ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯСтудента группы ВД – 49 Каретина Флориана Викторовича Задание выполнил ________________ _____________________ подпись студента дата выполнения задания Задание проверил ________________ _____________________ оценка подпись преподавателя _______________________ дата проверки задания Рецензия преподавателя______________________________________________________________________ ______________________________________________________________________ ______________________________________________________________________ ______________________________________________________________________ ______________________________________________________________________ Описание программы созданной с помощью Turbo Visual. Начинается программа с подключения библиотек Turbo Visual: uses App, Objects, Menus, Drivers, Editors, Views; Основной блок программы состоит из трех команд: Begin MyApp.Init; {Подготовить работу программы} MyApp.Run; {Выполнить необходимые действия} MyApp.Done; {Завершить исполнение программы} End. Для создания собственной строки статуса вводим следующее описание: type TMyApp=object(TApplication) {Создаем объект-потомок от TApplication} procedure InitStatusLine; virtual; {Перекрываем старый метод InitStatusLine новым} Описание нового метода, с помощью которого создается строка статуса: Procedure TMyApp.InitStatusLine; Var R:TRect; {хранит границы строки статуса} Begin GetExtent(R); {устанавливает R в координаты всего экрана} R.A.Y:=R.B.Y-1; {передвигает вершину выше нижней на 1 строку} StatusLine:=New(PStatusLine, Init(R, {создает строку статуса} NewStatusDef(0,$FFFF, {устанавливает диапазон контекстного Help} NewStatusKey('~Alt-X~ Exit', kbAltX, cmQuit, {определяет элемент} NewStatusKey('~Alt-F3~ Close', kbAltF3, cmClose, {другой} nil)), {больше нет клавиш} nil))) {больше нет определений} End; Формирование меню: Описание в разделе типов: TMyApp=object(TApplication) {Создаем объект-потомок от TApplication} procedure InitMenuBar; virtual; {Перекрываем старый метод InitMenuBar новым} Тело процедуры: procedure TMyApp.InitMenuBar; Var R:TRect; Begin GetExtent(R); {устанавливает R в координаты всего экрана} R.B.Y:=R.A.Y+1; MenuBar:=New(PMenuBar, Init(R, NewMenu( {создать полосу меню} NewSubMenu('~F~ile', hcNoContext, NewMenu( {определить меню} StdFileMenuItems(nil)), {стандратная функция определения элементов} {меню File} NewSubMenu('~W~indow', hcNoContext, NewMenu( {определить меню} StdWindowMenuItems(nil)), {стандратная функция определения элементов} {меню Window} nil) {больше нет подменю} )))); {конец полосы} End; Создание окон и манипуляции с ними: Описание: procedure NewWindow; virtual; procedure HandleEvent(var Event:TEvent); virtual; end; PDemoWindow=^TDemoWindow; {тип указателя для нового объектного типа} TDemoWindow=object(TWindow) {определение нового типа окна} constructor Init(Bounds: TRect; WinTitle:String; WindowNo: Integer); end; PInterior=^TInterior; 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 S:String[3]; Interior:PInterior; HS, VS: PScrollBar; begin Str(WindowNo,S); {устанавливает номер окна в заколовке} TWindow.Init(Bounds, WinTitle+' '+S, wnNoNumber); GetClipRect(Bounds); Bounds.Grow(-1,-1); {интерьер помещается внутри рамки окна} VS:=StandardScrollBar(sbVertical+sbHandleKeyBoard); {разрешение перемещения вертикального бегунка стрелками на клавиатуре} HS:=StandardScrollBar(sbHorizontal+sbHandleKeyBoard); {разрешение перемещения горизонтального бегунка стрелками на клавиатуре} Interior:=New(PInterior, Init(Bounds, HS, VS)); Insert(Interior); {добавляет интерьер к окну} end; Описание конструктора инициализации интерьера: constructor TInterior.Init(var Bounds:TRect; HS, VS: PScrollBar); begin TScroller.Init(Bounds, HS, VS); GrowMode:=gfGrowHiX+gfGrowHiY; end; Описание процедуры прорисовки интерьера окна: procedure TInterior.Draw; begin TScroller.Draw; {Вызов стандартной прорисовки} WriteStr(0,0,'Текст в окне',1); {Вывод текста в окно} TScroller.ShowCursor; {Показать курсор} end; Описание тела процедуры создания нового окна: procedure TMyApp.NewWindow; var Window:PDemoWindow; R: TRect; Begin Inc(WinCount); R.Assign(0,0,26,7); {установка начального размера и позиции} R.Move(Random(58),Random(16)); {случайное перемещение по экрану} Window:=New(PDemoWindow, Init(R, 'Demo Window', WinCount)); DeskTop^.Insert(Window); {вывести окно на панель экрана} End; Описание тела процедуры обработки команд среды procedure TMyApp.HandleEvent(var Event:TEvent); Begin TApplication.HandleEvent(Event); {действует как предок} if Event.What=evCommand Then Begin case Event.Command of {но откликается на дополнительные команды} cmNew: NewWindow; {определяет действие для команды cmNew} else Exit; End; ClearEvent(Event); {очищает событие после обработки} end; End; Описание тела процедуры обработки команд в окне procedure TInterior.HandleEvent(var Event:TEvent); Begin TScroller.HandleEvent(Event); {действует как предок} case Event.What of {проверка события} evKeyDown: {если нажата клавиша} Begin Case Event.KeyCode of {проверка: какая клавиша нажата} kbLeft: {стрелка влево} begin if x>0 then {если координата по Х больше 0} Begin x:=x-1; {то уменьшить ее на 1} SetCursor(x,y); {установить на новую координату курсор} End end; kbRight: {стрелка вправо} begin x:=x+1; {увеличить координату по Х на единицу} SetCursor(x,y); {установить на новую координату курсор} end; kbUp: {стрелка вверх} begin if y>0 then {если координата по Y больше 0} Begin y:=y-1; {то уменьшить ее на 1} SetCursor(x,y); {установить на новую координату курсор} End end; kbDown: {стрелка вниз} begin y:=y+1; {увеличить координату по Y на 1} SetCursor(x,y); {установить на новую координату курсор} end; end; Case Event.ScanCode of {проверка скан-кода клавиатуры} 57: {если пробел} begin If GetState(sfCursorVis) Then {если курсор виден} TScroller.HideCursor {то скрыть его} Else TScroller.ShowCursor; {иначе показать его} end; end; End; end; End; Описание игровой программы «Стрельба по мишени». Игровая программа состоит из трех процедур (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; {Конец игры} begin settextstyle(0,0,5); {установка стиля вывода текста} setcolor(2); {установка цвета} outtextxy(50,200,'ВСЕ,ДОИГРАЛИСЬ'); settextstyle(0,0,2); readkey; UROV:=1;MENU:=true;oko:=0; end; Основное тело программы begin d:=vga;initgraph(d,r,''); {инициализация графики} setgraphmode(2); {установка графического режима} randomize; {вызов генератора случайных чисел} urov:=1;oko:=0; mus:=true; sou:=true;menu:=true; {первоначальная установка переменных} repeat {начало основного цикла программы} {Cоздание интерфейса} 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,'Cчет:'); 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} repeat if 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; repeat gettime(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
fi if fi>3*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 then sound(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<=23) or (fire.xs>=622) or (fire.ys<=33) then begin cou:=cou-50; if cou<0 then cou:=0; setcolor(10); setfillstyle(1,0); bar(100,3,220,17); str(cou,em); outtextxy(100,3,em); fire.v:=false; setfillstyle(1,0); setcolor(0); bar(fire.xs-4,fire.ys-4,fire.xs+4,fire.ys+4); end else begin setfillstyle(1,10); setcolor(10); fillellipse(xv,yv,3,3); end; if (fire.xs+4>=xm) and (fire.xs-4<=xm+mi) and (fire.ys+4>=ym) and (fire.ys-4<=ym+mi) then begin fire.v:=false; setfillstyle(1,0); setcolor(0); bar(fire.xs-4,fire.ys-4,fire.xs+4,fire.ys+4); bm:=false;mn:=false; str((7-nch)*100,em); setfillstyle(1,0); bar(xm,ym,xm+mi,ym+mi); for i:=10 to 800 do begin sound(i); setcolor(I); outtextxy(xm,ym,em); end; nosound; setfillstyle(1,0); bar(xm,ym,xm+30,ym+15); xm:=-1500;ym:=-1500; setcolor(10); bar(100,3,220,17); cou:=cou+(7-nch)*100; str(cou,em); outtextxy(100,3,em); end; end; gettime(q1,min,sec,q2); if (min>=tpm) and (sec>=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<=6; setfillstyle(1,nch); bar(xm,ym,xm+mi,ym+mi); end; gettime(q1,min,sec,q2); if (min>=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 until
exi; 1:
closegraph; {закрытие
графического
режима} end. |