Файл: А.Г. Пимонов Основы объектно-ориентированного программирования в среде Турбо Паскаль.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 31.05.2024
Просмотров: 32
Скачиваний: 1
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А.