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

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

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

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

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

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

по курсу

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

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

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

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

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

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

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

_______________________

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

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

______________________________________________________________________

______________________________________________________________________

______________________________________________________________________

______________________________________________________________________

______________________________________________________________________

ОГЛАВЛЕНИЕ

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

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

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

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

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

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

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[] of

: StopRun:=True; {Esc – выход}

E: begin CK:=True; Up1:=True; end; {вверх первая дощечка}

E: begin CK:=True; Up1:=False; end;

C: begin CK:=True; Down1:=True; end; {вниз первая дощечка}

$AC: begin CK:=True; Down1:=False; end;

: begin CK:=True; Up2:=True; end; {вверх вторая дощечка}

$A5: begin CK:=True; Up2:=False; end;

: begin CK:=True; Down2:=True; end; {вниз вторая дощечка}

$B2: begin CK:=True; Down2:=False; end;

: Auto1:=not Auto1; {включение/выключение авто-режима}

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

: Auto2:=not Auto2; {включение/выключение авто-режима}

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

end;

Inline ($E4//A/$E0/{prjdata}C// {вставка в машинных кодах}

$E6///$E0/$E6// {для правильной работы}

$B0//$E6/); {обработчика прерывания}

End;

{—————————————————————————-}

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

Procedure SetUserInt;

Begin

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

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

End;

{—————————————————————————-}

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

Procedure SetOldInt;

Begin

SetIntVec(,@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

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

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

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

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

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

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

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

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

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.


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