Описать класс tPoint, инкапсулирующий основные свойства и методы точки на плоскости. Создать массив из 100 точек. Нарисовать точки случайным образом случайным цветом на экране.
Сделать защиту полей класса (т.е. работать с полями в основной программе не напрямую, а используя соответствующие методы записи в поле и чтения из поля). Добавить методы движения точек: случайное движение, движение по нажатию клавиш со стрелками.
Это продолжение предыдущего поста.
Здесь тоже создаем класс точки с тремя полями – координаты х,у и цвет color. Поскольку напрямую обращаться к этим свойствам в данном задании нельзя, то нужно создать методы записи (set) и чтения (get) данных. Чтение данных организуем только для координат, это нужно для реализации движения массива точек. Для установки цвета создаем метод SetColor, а для получения не нужно, поскольку к значению этого свойства обращается метод этого же класса.
Кроме указанных методов нужны также методы вывода на экран (Draw), закрашивания (Hide), перемещения точки в новое положение (Move).
Для вывода на экран и закрашивания точки применяем процедуру из графического модуля putPixel(x,y,color). В первом случае используем цвет точки, во втором – цвет фона (GetBKColor).
Перемещение точки осуществляется так: сначала точка закрашивается цветом фона (Hide), затем устанавливаются ее новые координаты (определяемые отдельной процедурой в основной программе, об этом чуть дальше), затем точка рисуется своим цветом на новом месте.
После описания всех полей и методов класса создадим процедуру Coords для расчета новых координат при управлении клавишами. В зависимости от нажатой клавиши рассчитывается новая координата. Если рассчитанное значение превышает размер экрана по горизонтали или вертикали, то точка перемещается на другую сторону экрана.
В основной программе объявляем переменные, в том числе массив из 100 точек. Затем инициализируем графический режим. Если ошибок нет, то устанавливаем случайные значения координат и цвета для всех точек массива и выводим его на экран.
Затем идет основной цикл программы. Для этого включаем текстовый режим. У пользователя запрашивается вариант управления движения. И далее новые координаты определяются или случайно, или процедурой Coords с учетом нажатой клавиши.
Движение будет продолжаться, пока пользователь не нажмет Esc. Программа будет завершена или продолжена в зависимости от ответа пользователя на вопрос «Продолжить».
Далее текст программы с комментариями. Не забывайте переключать текстовый и графический режимы для вывода текста и графики соответственно.
Сделать защиту полей класса (т.е. работать с полями в основной программе не напрямую, а используя соответствующие методы записи в поле и чтения из поля). Добавить методы движения точек: случайное движение, движение по нажатию клавиш со стрелками.
Это продолжение предыдущего поста.
Здесь тоже создаем класс точки с тремя полями – координаты х,у и цвет color. Поскольку напрямую обращаться к этим свойствам в данном задании нельзя, то нужно создать методы записи (set) и чтения (get) данных. Чтение данных организуем только для координат, это нужно для реализации движения массива точек. Для установки цвета создаем метод SetColor, а для получения не нужно, поскольку к значению этого свойства обращается метод этого же класса.
Кроме указанных методов нужны также методы вывода на экран (Draw), закрашивания (Hide), перемещения точки в новое положение (Move).
Для вывода на экран и закрашивания точки применяем процедуру из графического модуля putPixel(x,y,color). В первом случае используем цвет точки, во втором – цвет фона (GetBKColor).
Перемещение точки осуществляется так: сначала точка закрашивается цветом фона (Hide), затем устанавливаются ее новые координаты (определяемые отдельной процедурой в основной программе, об этом чуть дальше), затем точка рисуется своим цветом на новом месте.
После описания всех полей и методов класса создадим процедуру Coords для расчета новых координат при управлении клавишами. В зависимости от нажатой клавиши рассчитывается новая координата. Если рассчитанное значение превышает размер экрана по горизонтали или вертикали, то точка перемещается на другую сторону экрана.
В основной программе объявляем переменные, в том числе массив из 100 точек. Затем инициализируем графический режим. Если ошибок нет, то устанавливаем случайные значения координат и цвета для всех точек массива и выводим его на экран.
Затем идет основной цикл программы. Для этого включаем текстовый режим. У пользователя запрашивается вариант управления движения. И далее новые координаты определяются или случайно, или процедурой Coords с учетом нажатой клавиши.
Движение будет продолжаться, пока пользователь не нажмет Esc. Программа будет завершена или продолжена в зависимости от ответа пользователя на вопрос «Продолжить».
Далее текст программы с комментариями. Не забывайте переключать текстовый и графический режимы для вывода текста и графики соответственно.
PROGRAM LAB2;
Uses Crt,Graph;
const Path_of_driver='C:\TP7\BGI';
{описание класса точки}
Type
tPoint = object
x, y: integer;
color: word;
{вывод на экран}
procedure Draw;
{закрасить цветом фона}
procedure Hide;
{перемещение точки}
procedure Move(newX, newY:Integer);
{установка х}
procedure setX(x0:Integer);
{установка у}
procedure setY(y0:Integer);
{установка цвета}
procedure setColor(color0 : Word);
{функции получения координат}
function getX : Integer;
function getY : Integer;
end;
procedure tPoint.setX(x0 : Integer);
begin
x:=x0;
end;
procedure tPoint.setY(y0 : Integer);
begin
y:=y0;
end;
procedure tPoint.setColor(color0 : Word);
begin
color:=color0;
end;
function tPoint.getX;
begin
getX:=x;
end;
function tPoint.getY;
begin
getY:=y;
end;
procedure tPoint.Draw;
begin
putPixel(x,y,color);
end;
procedure tPoint.Hide;
begin
putPixel(x,y,GetBkColor);
end;
procedure tPoint.Move(newX, newY : Integer);
begin
Hide;
setX(newX);
setY(newY);
Draw;
end;
{процедура расчета новых координат по нажатой клавише}
Procedure Coords(a:char; var NewX,NewY:integer; h:integer);
begin
case a of
#80: begin
Inc(NewY,h); if NewY>GetMaxY-20 then NewY:=20;
end;
#75: begin
dec(NewX,h); if NewX<10 then NewX:=GetMaxX-10;
end;
#77: begin
inc(NewX,h); if NewX>GetMaxX-10 then NewX:=10;
end;
#72: begin
dec(NewY,h); if NewY<20 then NewY:=GetMaxY-20;
end;
end;
end;
var
mas: array [1..100] of tPoint; {массив точек}
gd,gm,NewX,NewY,i, h: integer;
Q,a:char;
str:string;
NewColor : Word;
begin
randomize;
{инициализация графического режима}
gd:=Detect;
InitGraph(gd,gm,Path_of_driver);
if GraphResult<>grok then begin
write('error:',GraphErrorMsg(GraphResult));
halt;
end;
{установка свойств всех точек в массиве – случайные значения}
for i:=1 to 100 do
begin
NewX:=Random(GetMaxX);
NewY:=Random(GetMaxY);
NewColor:=Random(256);
mas[i].setX( NewX);
mas[i].setY(NewY);
mas[i].setColor(NewColor);
mas[i].Draw;
end;
h:=50; {расстояние, на которое перемещается точка}
RestoreCrtMode; {текстовый режим}
Q:='y';
While Q<>'n' do begin
write('Выберите режим движения точек: 1 (случайное движение)');
write (' 2 (движение по стрелкам клавиатуры): ');
readln(str); {пользователь вводит символ}
{случайное движение}
if str='1' then
begin
SetGraphMode(gm);
repeat
for i:=1 to 100 do
begin
{новые случайные координаты}
NewX:=Random(GetMaxX);
NewY:=Random(GetMaxY);
mas[i].Move(NewX,NewY);
end;
delay(10000); {задержка}
until keypressed; {пока не нажата клавиша}
end
else
{движение по стрелкам}
begin
writeln('Нажмите Enter');
writeln('Управляйте движением точек с помощью стрелок клавиатуры');
readln;
SetGraphMode(gm);
{вывод массива точек}
for i:=1 to 100 do
mas[i].Draw;
repeat
a:=readkey;
for i:=1 to 100 do
begin
{получаем текущие координаты}
newX:=mas[i].getX;
newY:=mas[i].getY;
{новые координаты, куда передвинется точка}
Coords(a,NewX,NewY,h);
{передвижение точки}
mas[i].Move(NewX,NewY);
end;
until a=#27; {пока не нажата escape}
end;
RestoreCrtMode;
write('Продолжить? (y/n) ');
readln(Q);
end;
closegraph;
clrscr;
end.
