Реферат

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

Работа добавлена на сайт bukvasha.net: 2015-10-28

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 26.11.2024





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

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

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


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<pi/2 then fi:=pi/2;

 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<urov*1000 then go else urov:=urov+1;

until exi;

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

end.


1. Реферат на тему Аграрные преобразования в СССР Их последствия
2. Реферат Внешняя политика в годы правления Ивана грозного
3. Реферат на тему Eagle Eyes Essay Research Paper The main
4. Реферат Внутренний контроль в системе управления холдингом
5. Реферат на тему Jurassic Park Essay Research Paper
6. Диплом Ассортиментная политика аптечной сети Маклер
7. Реферат Заболевания коровы актиномикозом
8. Реферат на тему The Cause And Effect Of Human Error
9. Реферат на тему The Gallant Boys Of Gettysburg Essay Research
10. Курсовая Психопрофилактика девиантного поведения среди подростков