Задание 2

Настало время описать объектный тип «съедобных (для хищника) рыб», назовем этих рыб «карп». Причем объектный тип «карп» является потомком объектного типа «рыба», т.е. наследует его структуру и поведение. Нам понадобится новый метод, назовем его 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.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: