Настало время описать объектный тип «съедобных (для хищника) рыб», назовем этих рыб «карп». Причем объектный тип «карп» является потомком объектного типа «рыба», т.е. наследует его структуру и поведение. Нам понадобится новый метод, назовем его kill, удаляющий с экрана тех «карпов», которых съест «хищник». А также перекроем родительский одноименный метод init, т.к. для «карпов» этот метод будет выполняться особым для них («карпов») образом.
Описание объектного типа «карп»:
……{раздел описания типов}
tkarp=object(tfish) {в скобках указывается имя родительского типа}
{свойства (координаты, цвет и название) автоматически наследуются от родительского типа}
{метод drow автоматически наследуется от родительского типа}
procedure kill; {новый метод, удаляющий «карпов» с экрана}
procedure init; {перекрываем метод родительского объекта}
end;
Далее по программе, в разделе описания процедур и функций, описываем методы объектного типа «карп»:
procedure tkarp.init;
begin
x:=random(80); y:=random(25);
col:=14; {зафиксируем цвет «карпов» – желтый}
|
|
TextColor(col);
name:='K'; {зафиксируем символ, которым на экране будут обозначаться «карпы»}
drow(x,y,name); {с помощью метода объектного типа «карп» выведем на экран в позиции с координатами x,y, заданной случайным образом, желтую букву К}
end;
procedure tkarp.kill;
begin
name:=chr(219); {заменяем символ ‘K’ на прямоугольник}
Col:=Blue; {заменяем желтый цвет на цвет фона}
TextColor(col);
Drow(x,y,name) {перерисовываем объект заново, при этом синий прямоугольник сливается с цветом фона}
End;
После описания объектного типа «карп» можно определить количество N экземпляров данного типа и задать массив из N элементов типа «карп»:
……..{раздел описания переменных}
k: array [1..100] of tkarp;
n,i: integer;
Итак, мы завершили описание объектного типа «карп» и приступаем к описанию объектного типа «хищник», назовем его «акула». Объектный тип «акула» является потомком объектного типа «рыба», и, следовательно, наследует все его свойства и методы. Перекроем родительский одноименный метод init, т.к. для «акул» этот метод будет выполняться особым для них («акул») образом.
Описание объектного типа «акула»:
takula=object(tfish)
procedure init;
end;
Далее по программе, в разделе описания процедур и функций, описываем методы объектного типа «акула»:
procedure takula.init;
begin
x:=random(80); y:=random(25);
col:=5; {определим цвет изображения «акулы» – малиновый}
TextColor(col+128); {устанавливаем цвет выводимого символа и добавляем эффект мерцания}
name:='A'; {«акула» на экране будет изображаться символом ‘A’}
drow(x,y,name);
end;
В разделе описания переменных следует определить экземпляр типа «акула»:
…….{раздел описания переменных}
a: takula;
А теперь объединим все необходимые фрагменты в программу, которая только заполняет аквариум «карпами» и помещает туда же «акулу». В этой программе «карпам» еще ничего не угрожает.
|
|
program fish;
uses crt;
Type
tfish =object
x,y,col:byte;
name:char;
procedure drow(x1,y1:byte; s:char);
procedure init;
end;
tkarp =object(tfish)
procedure init;
procedure kill;
end;
takula =object(tfish)
procedure init;
end;
Var
a:takula;
k:array[1..100] of tkarp;
n,i:integer;
procedure tfish.drow;
begin
GoToXY(x1,y1);
write(s);
end;
procedure tfish.init;
begin
x:=random(80); y:=random(25); col:=random(15);
TextColor(col); Name:=chr(random(100));
drow(x,y,name);
end;
{вспомогательная процедура заполнения аквариума водой}
procedure fon;
var
i,j,k:byte;
begin
TextColor(Blue);
for j:=24 downto 1 do begin
for i:=40 downto 1 do begin
k:=80-i+1;
GotoXY(i,j); write(chr(219));
GotoXY(k,j); write(chr(219));
delay(12);
end; end; end;
procedure tkarp.init;
begin
x:=random(80); y:=random(25); col:=14;
TextColor(col);
name:='K';
drow(x,y,name);
end;
procedure tkarp.kill;
begin
name:=chr(219); Col:=Blue;
TextColor(col);
Drow(x,y,name)
End;
procedure takula.init;
begin
x:=random(80); y:=random(25); col:=5;
TextColor(col+128);
name:='A';
drow(x,y,name);
end;
{начало основной программы}
begin
write(‘Задайте число карпов в аквариуме: ‘); readln(n);
clrscr; randomize;
TextMode(CO80);
TextBackGround(Blue);
fon;
for i:=1 to n do
k[i].init; {в цикле последовательно размещаем «карпов» на экране}
a.init; {размещаем «акулу»}
readln;
TextMode(BW80); {возвращаем экрану черно-белый режим 80*25}
end.