Рефераты - Афоризмы - Словари
Русские, белорусские и английские сочинения
Русские и белорусские изложения
 
У нас есть несколько работ на данную тему. Вы можете создать свою уникальную работу объединив фрагменты из уже существующих:
  1. Разработка игровой программы 18.1 Кб.
  2. Разработка игровой программы Морской бой 54.7 Кб.
  3. Разработка игровой программы на языке программирования Turbo Pascal 43.8 Кб.
  4. Разработка игровой программы для андроида 130.2 Кб.

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

Работа из раздела: «Программирование и комп-ры»

                МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОСИЙСКОЙ ФЕДЕРАЦИИ
          Таганрогский государственный радиотехнический университет

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


_____________________________________________________________________



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

                                                     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 fi3*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
ref.by 2006—2022
contextus@mail.ru