Чтение RSS
Рефераты:
 
Рефераты бесплатно
 

 

 

 

 

 

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

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

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

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


_____________________________________________________________________

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

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=622) or (fire.ys=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=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

 
     
Бесплатные рефераты
 
Банк рефератов
 
Бесплатные рефераты скачать
| Интенсификация изучения иностранного языка с использованием компьютерных технологий | Лыжный спорт | САИД Ахмад | экономическая дипломатия | Влияние экономической войны на глобальную экономику | экономическая война | экономическая война и дипломатия | Экономический шпионаж | АК Моор рефераты | АК Моор реферат | ноосфера ба забони точики | чесменское сражение | Закон всемирного тяготения | рефераты темы | иохан себастиян бах маълумот | Тарых | шерхо дар борат биология | скачать еротик китоб | Семетей | Караш | Influence of English in mass culture дипломная | Количественные отношения в английском языках | 6466 | чистонхои химия | Гунны | Чистон | Кус | кмс купить диплом о language:RU | купить диплом ргсу цена language:RU | куплю копии дипломов для сро language:RU
 
Рефераты Онлайн
 
Скачать реферат
 
 
 
 
  Все права защищены. Бесплатные рефераты и сочинения. Коллекция бесплатных рефератов! Коллекция рефератов!