Начнем с описания объекта «рыба». Этот объект должен иметь свойства (поля): координаты, цвет, название; методы: вывода на экран Drow, инициализации Init, т.е. установки координат, цвета и изображения на экране с помощью метода Drow.
Такое описание объекта «рыба» в программе будет выглядеть следующим образом:
type
tfish=object
x,y,col:byte; {свойства объекта: x,y – координаты, col – цвет}
name:char; {свойство объекта – название}
procedure drow(x1,y1:byte; s:char); {метод объекта, изображающий его на экране}
procedure init; {метод, инициализирующий объект}
end;
Замечание: решение задачи будем выполнять в текстовом режиме.
После описания объектного типа для примера и контроля введем один экземпляр данного типа:
Var f: tfish;
Заметим сразу, что этот экземпляр объектного типа мы используем для проверки описания методов объектного типа «рыба», чтобы проверить правильность установки текстового режима, выбора цвета и т.д.
Далее в тексте программы в разделе описания процедур и функций следует описание методов объектного типа «рыба»:
procedure tfish.drow;
begin
GoToXY(x1,y1); {устанавливаем курсор на позицию с координатами x1, y1}
write(s); {«рыбу» изобразим символом }
delay(100); {поставим задержку на 100 миллисекунд для того, чтобы, когда будем выводить на экран много рыб, они появлялись постепенно}
end;
procedure tfish.init;
begin
x:=random(80); {случайным образом задаем значение столбца от 1 до 80}
y:=random(25); {случайным образом задаем значение строки от 1 до 25}
col:=random(15); {случайным образом задаем цвет от 0 до 15}
TextColor(col); {устанавливаем цвет выводимой буквы}
Name:=chr(random(100)) {случайным образом задаем название «рыбы» как символ, соответствующий коду от 1 до 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)); {выводим символ, соответствующий коду 219 – прямоугольник}
GotoXY(k,j);
write(chr(219)); {выводим символ, соответствующий коду 219 – прямоугольник}
delay(12); {эта процедура позволяет устанавливать время задержки в миллисекундах}
end; end; end;
После всех предварительно проделанных действий мы можем написать программу, в которой определим объектный тип «рыба» с его свойствами и методами, «заведем» одну из «рыб», «заполним аквариум водой» и поместим туда одну нашу «рыбку»:
program fish;
uses crt; {для использования процедур работы в текстовом режиме необходимо подключить специальный модуль CRT}
Type
tfish=object {описание объектного типа «рыба»}
x,y,col:byte; name:char
procedure drow(x1,y1:byte; s:char);
procedure init;
end;
Var
f:tfish;
procedure tfish.drow;
begin
GoToXY(x1,y1);
write(s); delay(100)
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;
begin {начало основной программы}
clrscr; {очищаем экран}
randomize; {активизируем функцию генерации случайных чисел}
TextMode(CO80); {устанавливаем текстовый режим цветной, 80*25}
TextBackGround(Blue); {устанавливаем синий цвет фона}
fon; {«заполняем аквариум водой»}
f.init; {«размещаем рыбку в аквариуме», используя метод инициализации объекта «рыба»}
readln;
end.