МИНИСТЕРСТВООБРАЗОВАНИЯРОСИЙСКОЙФЕДЕРАЦИИ
Таганрогскийгосударственныйрадиотехническийуниверситет
2000 – 2001 учебныйгод
КУРСОВАЯ РАБОТА
по курсу
Студентагруппы ВД – 49
КаретинаФлориана Викторовича
Заданиевыполнил ________________ _____________________
подписьстудентадатавыполнениязадания
Заданиепроверил ________________ _____________________
оценкаподпись преподавателя
_______________________
датапроверки задания
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
ОГЛАВЛЕНИЕ
1. Постановказадачи 3 стр.
2. Входныеданные 3 стр.
3. Выходныеданные 3 стр.
4. Текстпрограммы 4стр.
1. Постановказадачи.
Необходиморазработатьигровую программу«Арканоид».Дощечки дляотбиванияшарика надоразместитьслева и справа.Правая дощечкадолжна управлятьсяклавишами «A»и «Z»(вверх ивниз соответственно),а правая дощечкадолжна управлятьсяклавишами «L»и «
2. Входныеданные.
1. Управлениедощечкамипользователем.
2.Положениедощечек приприближениишарика к краямэкрана.
3. Выходныеданные.
Перемещениедощечки поэкрану принажатии определенныхклавиш.
Отталкивание/непопаданиешарика от дощечки.
Выдачаочков играющих.
Звуковоесопровождениепри попаданииили непопаданиишарика по дощечке,или отскакиванияего от стенки.
Текстпрограммы
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.