Смекни!
smekni.com

Разработка игровой программы

МИНИСТЕРСТВООБРАЗОВАНИЯРОСИЙСКОЙФЕДЕРАЦИИ

Таганрогскийгосударственныйрадиотехническийуниверситет

Кафедравычислительнойтехники
_____________________________________________________________________

Дистанционноеобучение

2000 – 2001 учебныйгод

КУРСОВАЯ РАБОТА

по курсу

ТЕХНОЛОГИЯПРОГРАММИРОВАНИЯ


Студентагруппы ВД – 49


КаретинаФлориана Викторовича


Заданиевыполнил ________________ _____________________

подписьстудентадатавыполнениязадания


Заданиепроверил ________________ _____________________

оценкаподпись преподавателя


_______________________

датапроверки задания


Рецензияпреподавателя

______________________________________________________________________

______________________________________________________________________

______________________________________________________________________

______________________________________________________________________

______________________________________________________________________


ОГЛАВЛЕНИЕ

1. Постановказадачи 3 стр.

2. Входныеданные 3 стр.

3. Выходныеданные 3 стр.

4. Текстпрограммы 4стр.


1. Постановказадачи.


Необходиморазработатьигровую программу«Арканоид».Дощечки дляотбиванияшарика надоразместитьслева и справа.Правая дощечкадолжна управлятьсяклавишами «A»и «Z»(вверх ивниз соответственно),а правая дощечкадолжна управлятьсяклавишами «L»и «

2. Входныеданные.

1. Управлениедощечкамипользователем.

2.Положениедощечек приприближениишарика к краямэкрана.


3. Выходныеданные.

  1. Перемещениедощечки поэкрану принажатии определенныхклавиш.

  2. Отталкивание/непопаданиешарика от дощечки.

  3. Выдачаочков играющих.

  4. Звуковоесопровождениепри попаданииили непопаданиишарика по дощечке,или отскакиванияего от стенки.


Текстпрограммы

programGame_Tenis;

usesDOS, 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;

{____________________________________________________________________________}

{работас клавиатуройпо превываниям}

procedureUserInt9; interrupt;

begin

casePort[$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;

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

{процедураустановкипользовательскогопрерывания}

procedureSetUserInt;

begin

GetIntVec($09,@OldInt9);{сохранениестарого вектора}

SetIntVec($09,Addr(UserInt9));{установканового}

end;

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

{восстановлениестарого вектора}

procedureSetOldInt;

begin

SetIntVec($09,@OldInt9);

end;

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

{процедураинициализацииграфическогорежима}

procedureInitScreen;

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;

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

{процедураобновленияколичестваочков игроков}

procedureRefrCount;

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;

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

procedureGame;

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}

ifUp1 and not Down1 then

begin{перемещениедощечки вверх}

R1:=R1-10;

ifR1

SetColor(1); {координаты}

Line(50,oR1-48, 50, oR1+48);

SetColor(11);

Line(50,R1-48, 50, R1+48);

oR1:=R1;

end;

{еслинажата клавишавниз и не нажатаклавиша вверх}

{дляигрока 1}

ifDown1 and not Up1 then

begin{перемещениедощечки вниз}

R1:=R1+10;

ifR1>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}

ifUp2 and not Down2 then

begin{перемещениедощечки вверх}

R2:=R2-10;

ifR2

SetColor(1); {координаты}

Line(590,oR2-48, 590, oR2+48);

SetColor(10);

Line(590,R2-48, 590, R2+48);

oR2:=R2;

end;

{еслинажата клавишавниз и не нажатаклавиша вверх}

{дляигрока 2}

ifDown2 and not Up2 then

begin{перемещениедощечки вниз}

R2:=R2+10;

ifR2>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}

ifAuto1 then

begin{автоматическоеперемещениедощечки}

R1:=BY;

ifR1

{координаты}

ifR1>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}

ifAuto2 then

begin{автоматическоеперемещениедощечки}

R2:=BY;

ifR2

{координаты}

ifR2>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);

{еслидощечка непопала}

ifChC then

begin

ChC:=False;

RefrCount;{обновить очкиигроков}

end;

{столкновениешарика с дощечкойслева}

if(BX(R1-55)) and (BY

begin

kX:=-kX;

Sound(1000);

Delay(10);

NoSound;

end;

{непопаданиедощечкой слева}

if(BX

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

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(BY470) then kY:=-kY;

oBX:=BX;

oBY:=BY;


Delay(10);

untilStopRun; {выход еслинажата клавишаEsc}


end;

{============================================================================}

begin

InitScreen;{инициализацияграфическогорежима}

SetUserInt;{установкапользовательскогопрерывания}

Game; {непосредственновызов игры}

SetOldInt; {восстановлениястарого векторапрерывания}

CloseGraph;{закрытиеграфическогорежима}

end.



МИНИСТЕРСТВООБРАЗОВАНИЯРОСИЙСКОЙФЕДЕРАЦИИ

Таганрогскийгосударственныйрадиотехническийуниверситет

Кафедравычислительнойтехники
_____________________________________________________________________

Дистанционноеобучение

2000 – 2001 учебныйгод

ОТЧЕТ

о выполнениипрактическихзаданий

по курсу

ТЕХНОЛОГИЯПРОГРАММИРОВАНИЯ


Студентагруппы ВД – 49


КаретинаФлориана Викторовича


Заданиевыполнил ________________ _____________________

подписьстудентадатавыполнениязадания


Заданиепроверил ________________ _____________________

оценкаподпись преподавателя


_______________________

датапроверки задания


Рецензияпреподавателя

______________________________________________________________________

______________________________________________________________________

______________________________________________________________________

______________________________________________________________________

______________________________________________________________________


Описание программысозданной спомощью TurboVisual.


Начинаетсяпрограмма сподключениябиблиотек TurboVisual:

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 новым}

Телопроцедуры:

procedureTMyApp.InitMenuBar;

VarR: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;

Описаниетела процедурыобработкикоманд среды

procedureTMyApp.HandleEvent(var Event:TEvent);

Begin

TApplication.HandleEvent(Event);{действует какпредок}

ifEvent.What=evCommand Then

Begin

caseEvent.Command of {но откликаетсяна дополнительныекоманды}

cmNew:NewWindow; {определяетдействие длякоманды cmNew}

else

Exit;

End;

ClearEvent(Event); {очищаетсобытие послеобработки}

end;

End;

Описаниетела процедурыобработкикоманд в окне

procedureTInterior.HandleEvent(var Event:TEvent);

Begin

TScroller.HandleEvent(Event);{действует какпредок}

caseEvent.What of {проверкасобытия}

evKeyDown:{еслинажата клавиша}

Begin

CaseEvent.KeyCode of {проверка:какая клавишанажата}

kbLeft:{стрелкавлево}

begin

ifx>0 then {есликоординатапо Х больше 0}

Begin

x:=x-1;{тоуменьшить еена 1}

SetCursor(x,y);{установитьна новую координатукурсор}

End

end;

kbRight:{стрелкавправо}

begin

x:=x+1;{увеличитькоординатупо Х на единицу}

SetCursor(x,y);{установитьна новую координатукурсор}

end;

kbUp:{стрелкавверх}

begin

ify>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;

CaseEvent.ScanCode of {проверкаскан-кода клавиатуры}

57:{еслипробел}

begin

IfGetState(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;

iford(a)=27 then exi:=true; {еслинажата клавишаEsc – выйтииз игры}

setfillstyle(1,0);

bar(100,30,600,350);

Процедураgo – выводитзаставку концаигры

procedurego; {Конец игры}

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);{перемещениеграфическогокурсора в указанныекоординаты}

fori:=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);

fori:=1 to kv do fillellipse(i*10+420,8,3,3); {рисованиепатронов}

ifmenu then intro; {еслиmenu=true,товызвать процедуруintro(заставкаигры)}

menu:=false;

ifexi then goto 1; {еслиexi=true(выход), то перейтина метку 1}

repeat

ifkeypressed 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,' очков'));

untilord(a)=13; {выходиз цикла поклавише Enter}

setfillstyle(1,0);

bar(180,200,500,300);

gettime(q1,min,sec,q2);{получениесистемноговремени}

mk:=min+1;{увеличениеминут на 1}

sk:=sec;

ifmk>=60 then begin {есликоличествоминут больше60,}

hk:=q1+1;{токоличествочасов увеличитьна 1}

mk:=0;{минутыобнулить}

end;

repeat

gettime(q1,min,sec,q2);{получениесистемноговремени}

setfillstyle(1,1);{установкастиля заполнения}

setcolor(4);{установкацвета рисования}

ifmk=min then rk:=60-abs(sk-sec) else rk:=abs(sk-sec);

bar(250,6,250+abs(rk),12);

ifnot(bm) then begin

gettime(q1,min,sec,q2);{получениесистемноговремени}

po:=random(3);

ifsec+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;

ifkeypressed then begin

a:=readkey;

ifa=chr(77) then begin fi:=fi-0.05; ok:=true; end; {Поворотдула влево}

ifa=chr(75) then begin fi:=fi+0.05; ok:=true; end; {Повоортдула вправо}

iford(a)=27 then menu:=true; {Выход вменю}

iffi

iffi>3*pi/2 then fi:=3*pi/2;

ifa=' ' then begin {Выстрел}

if(not(fire.v)) and (not(ok)) then begin

minv;

for d:=1 to 100 dobegin

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;

iffire.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

cou:=cou-50;

if cou

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

and (fire.ys+4>=ym) and(fire.ys-4

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;

ifvm+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; {Размермишени}

untilnch

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;

ifok 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;

ifcou

untilexi;

1:closegraph; {закрытиеграфическогорежима}

end.