Реферат

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

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

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

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

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

от 25%

Подписываем

договор

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

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





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

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

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


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. Контрольная работа Контрольная работа по Культорологии 8
2. Реферат по менеджменту
3. Реферат Своды стопы, механизмы, укрепляющие своды стопы. Плоскостопие
4. Контрольная работа Герб, флаг и гимн Российской империи
5. Реферат Цибуля ведмежа цибуля городня цикламен європейський
6. Реферат на тему Rottweiler Essay Research Paper Joey Dean102100Ms ScheissEng10213
7. Реферат Антиинфляционная политика государства 8
8. Курсовая Управленческий учет в зернопроизводстве
9. Реферат на тему Гарантии местного самоуправления 5
10. Реферат на тему Kornberg Essay Research Paper A Personal InformationArthur