Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

А.Г. Пимонов Основы объектно-ориентированного программирования в среде Турбо Паскаль

.pdf
Скачиваний:
50
Добавлен:
19.08.2013
Размер:
267.68 Кб
Скачать

20

Указателю на объект родительского типа может быть присвоен указатель на экземпляр объекта дочернего типа. Обратные присваивания также недопустимы.

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

3. ЗАДАНИЕ ДЛЯ ВЫПОЛНЕНИЯ ЛАБОРАТОРНОЙ РАБОТЫ

Создать библиотеку (см. п. 2.7) объектных типов, которая должна содержать (прил. 1), как минимум, описания одного родительского типа и двух дочерних. Прообразом создаваемых объектов должен послужить движущийся графический объект из вашей анимационной заставки. Объекты должны отличаться методами движения: один должен уметь двигаться по экрану случайным образом, другой – под управлением соответствующих клавиш в восьми возможных направлениях (вертикальных, горизонтальных, диагональных). Разработать программу (прил. 2) – объектноориентированное приложение (см. п. 2.8), в котором должно быть организовано движение по экрану, как минимум, двух экземпляров динамических объектов: первого – случайным образом, второго – под управлением соответствующих клавиш.

21

ПРИЛОЖЕНИЕ 1

БИБЛИОТЕКА ОБЪЕКТНЫХ ТИПОВ

{Библиотека создана на основе лабораторной работы студента группы ПИ011 Пимонова И.А.}

Unit MyObj; INTERFACE Type

Fig = object SizeH,SizeV: Word; Xt,Yt: Integer; Color: Byte;

Constructor Init(Hr,Vr: Word; Clr: Byte); Procedure InitXY(X,Y: Integer); virtual; Function GetSH: Word;

Function GetSV: Word; Function GetX: Integer; Function GetY: Integer; Procedure Draw; virtual; Procedure Clear; virtual; Destructor Done; virtual;

end;

PLadRnd = ^LadRnd; LadRnd = object(Fig)

Procedure Move; virtual;

end;

PLadKey = ^LadKey; LadKey = object(LadRnd)

Contact: Boolean;

Constructor Init(Hr,Vr: Word; Clr: Byte; Cnt: Boolean);

Function GetContact: Boolean;

Procedure InitXY(X,Y: Integer); virtual; Procedure Move; virtual;

Procedure Meeting; virtual; Destructor Done; virtual;

end; IMPLEMENTATION Uses Graph, Crt;

Constructor Fig.Init; Begin

SizeH:=Hr;

SizeV:=Vr;

Color:=Clr

End;

Procedure Fig.InitXY; Begin

Xt:=X;

22

 

Yt:=Y;

Xt:=SizeH

If Xt>GetMaxX-SizeH then

else If

Xt<SizeH then Xt:=GetMaxX-SizeH;

If Yt>GetMaxY-SizeV then

Yt:=SizeV

else If

Yt<SizeV then Yt:=GetMaxY-SizeV

End;

Function Fig.GetSH: Word; Begin

GetSH:=SizeH

End;

Function Fig.GetSV: Word; Begin

GetSV:=SizeV

End;

Function Fig.GetX: Integer; Begin

GetX:=Xt

End;

Function Fig.GetY: Integer; Begin

GetY:=Yt

End;

Procedure Fig.Draw; Var d1,d2: Integer; Begin

d1:=SizeH div 6; d2:=SizeV div 5;

SetFillStyle(SolidFill,Color); Bar(Xt-2*d1,Yt-4*d2,Xt+2*d1,Yt-3*d2); Bar(Xt-d1,Yt-3*d2,Xt+d1,Yt+3*d2); Bar(Xt-3*d1,Yt+3*d2,Xt+3*d1,Yt+4*d2)

End;

Procedure Fig.Clear; Var d1,d2: Integer; Begin

d1:=SizeH;

d2:=SizeV;

SetFillStyle(SolidFill,GetBkColor); Bar(Xt-d1,Yt-d2,Xt+d1,Yt+d2)

End;

Destructor Fig.Done; Begin

Clear;

SizeH:=0;

SizeV:=0;

Color:=GetBkColor

End;

23

Procedure LadRnd.Move; Var

d: Byte;

dx,dy,StepX,StepY: Integer; Begin

d:=Random(20);

StepX:=SizeH div 6; StepY:=SizeV div 6; Case d of

0,1,12,19: dy:=StepY; 3,2,13,18: dy:=-StepY; 5,4,14,17: dx:=-StepX; 7,6,15,16: dx:=StepX;

8 : begin dy:=-StepY; dx:=StepX end;

9: begin dy:= StepY; dx:=StepX end;

10: begin dy:=-StepY; dx:=-StepX end;

11: begin dy:=StepY; dx:=-StepX end

else begin dx:=0;

dy:=0

end

end;

 

 

Delay(2000);

 

 

Clear;

 

 

InitXY(Xt+dx,Yt+dy);

 

 

Draw

 

 

end;

 

 

Constructor LadKey.Init;

 

 

Begin

 

 

inherited Init(Hr, Vr, Clr); Contact:=Cnt

End;

Function LadKey.GetContact; Begin

GetContact:=Contact

End;

Procedure LadKey.InitXY; Begin

Xt:=X;

Yt:=Y;

If Xt>GetMaxX-SizeH then Xt:=GetMaxX-SizeH

else If Xt<SizeH then Xt:=SizeH; If Yt>GetMaxY-SizeV then Yt:=GetMaxY-SizeV

else If Yt<SizeV then Yt:=SizeV

End;

Procedure LadKey.Move; Var

dx,dy,StepX,StepY: Integer; Ch: Char;

Begin

StepX:=SizeH div 8; StepY:=SizeV div 8; While KeyPressed do

24

 

 

begin

 

 

Ch:=ReadKey;

 

 

If Ch=#0 then

 

 

begin

 

 

Ch:=ReadKey;

 

 

Case Ch of

dx:=0

end;

#80: begin dy:=StepY;

#72: begin dy:=-StepY;

dx:=0

end;

#75: begin dx:=-StepX;

dy:=0

end;

#77: begin dx:=StepX;

dy:=0

end;

#73: begin dy:=-StepY;

dx:=StepX

end;

#81: begin dy:=StepY;

dx:=StepX

end;

#71: begin dy:=-StepY;

dx:=-StepX

end;

#79: begin dy:=StepY;

dx:=-StepX

end

else begin dy:=0;

dx:=0

end

end;

 

 

Clear;

 

 

InitXY(Xt+dx,Yt+dy);

 

 

Draw end

else If Ch=#27 then begin

Contact:=True;

SetTextStyle(TriplexFont, HorizDir, 10);

SetTextJustify(CenterText,

CenterText); OutTextXY(GetMaxX div 2,

GetMaxY div 2,'EXIT'); ReadLn; Break

end

end End;

Procedure LadKey.Meeting; Begin

SetTextStyle(TriplexFont, HorizDir, 4);

SetTextJustify(CenterText, CenterText); OutTextXY(GetMaxX div 2,GetMaxY div 2,

'You are the best CHESSMASTER!!!');

ReadLn End;

Destructor LadKey.Done; Begin

inherited Done; Contact:=False

End;

END.

25

ПРИЛОЖЕНИЕ 2 ОБЪЕКТНО-ОРИЕНТИРОВАННАЯ ПРОГРАММА

Program Chess;

Uses Crt, MyObj, Graph; Type

TApplication = object Procedure Init; Procedure Run; Procedure Done;

end; Var

Application: TApplication; Enemy: PLadRnd;

Hunter: PLadKey;

Procedure TApplication.Init;

Var gd,gm,ErNom,MaxX,MaxY: Integer; Begin

gd:=Detect;

InitGraph(gd, gm, 'C:\Bp'); ErNom:=GraphResult;

If ErNom<>0 then begin

WriteLn('Ошибка инициализации графики:', GraphErrorMsg(ErNom));

ReadLn; Halt end;

Randomize;

SetBkColor(Blue); SetColor(LightGray); ClearDevice; MaxX:=GetMaxX; MaxY:=GetMaxY;

New(Enemy, Init(MaxX div 20, MaxY div 20, White)); New(Hunter,Init(MaxX div 15, MaxY div 15, Red, False)); Enemy^.InitXY(30,30);

Hunter^.InitXY(MaxX div 2,MaxY div 2); Enemy^.Draw; Hunter^.Draw

End;

Procedure TApplication.Run; Begin

Repeat Enemy^.Move; Hunter^.Move;

If (Abs(Enemy^.GetX-Hunter^.GetX)<Enemy^.GetSH) and (Abs(Enemy^.GetY-Hunter^.GetY)<Enemy^.GetSV) then begin

Hunter^.Init(Hunter^.GetSH, Hunter^.GetSV,

Magenta, True);

Hunter^.Draw

26

end

Until Hunter^.GetContact; Hunter^.Meeting

End;

Procedure TApplication.Done; Begin

Dispose(Enemy, Done);

Dispose(Hunter,Done); CloseGraph

End;

BEGIN Application.Init; Application.Run; Application.Done

END.

СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ

1.Марченко А.И. Программирование в среде Turbo Pascal 7.0. Юбилейное издание/ А.И. Марченко, Л.А. Марченко.– Киев: ВЕК+; 2000.– 478 с.

2.Немнюгин С.А. Turbo Pascal.– СПб.: Питер, 2000.– 496 с.

3.Фридман А.Л. Основы объектно-ориентированной разработки программных систем.– М.: Финансы и статистика, 2000.– 192с.

4.Бежанова М.М. Современные понятия и методы программирования/ М.М. Бежанова, И.В. Поттосин.– М.: Научный мир, 2000.– 192 с.

5.Буч Г. Объектно-ориентированный анализ и проектирование с примерами применений на С++.– М: Бином, СПб.: Невский диалект,1998.–560 с.

6.Вальвачев А.Н. Графическое программирование на языке Паскаль: Справ. пособие.– Минск: Высш. шк., 1992.– 143 с.

7.Реализация простых анимационных алгоритмов в среде Турбо Паскаль: Методические указания к лабораторной работе/ Сост.: А.Г. Пимонов; ГУ Кузбас. гос. техн. ун-т.– Кемерово, 1999.– 22 с.

Составители Александр Григорьевич Пимонов

Дмитрий Львович Крутский

ОСНОВЫ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ В СРЕДЕ ТУРБО ПАСКАЛЬ

Методические указания к лабораторной работе по дисциплине «Информатика и программирование» для студентов специальности 351400 «Прикладная информатика в экономике»

Редактор Е.Л. Наркевич

Подписано в печать 18.04.03.

Формат 60×84/16. Бумага офсетная. Отпечатано на ризографе. Уч.-изд. л. 1,6. Тираж 80 экз. Заказ .

ГУ КузГТУ. 650026, Кемерово, ул. Весенняя, 28.

Типография ГУ КузГТУ. 650099, Кемерово, ул. Д. Бедного, 4А.

Соседние файлы в предмете Информатика