Построить движущиеся изображения двух прямоугольников и круга, на которых помещены слова из фразы «КТО СКАЗАЛ МЯУ?»

uses
CRT,Graph,DOS;
const
nTag=4;
BkCol=0;
qt=0.02;
type
tShape= (Rect,Roun);
tTag= record
sh: tShape;
c1,c2,c3,size: integer;
x,y,vx,vy: single;
s: string
end;
function ScrX(x: single): integer;
begin
ScrX:=Round(x*GetMaxX)
end;
function ScrY(y: single): integer;
begin
ScrY:=Round(y*GetMaxY)
end;
procedure HideTag(Tag: tTag);
var
i,j: integer;
begin
with Tag do begin
i:=ScrX(x);
j:=ScrY(y);
SetFillStyle(SolidFill,BkCol);
SetTextStyle(0,HorizDir,size);
Bar(i-1,j-1,i+size*4+TextWidth(s)+1,j+size*4+TextHeight(s)+1)
end
end;
procedure ShowTag(Tag: tTag);
var
i,j: integer;
begin
with Tag do begin
i:=ScrX(x);
j:=ScrY(y);
SetColor(c1);
SetTextStyle(0,HorizDir,size);
Rectangle(i,j,i+size*4+TextWidth(s),j+size*4+TextHeight(s));
SetFillStyle(SolidFill,c3);
Bar(i+2,j+2,i+size*4+TextWidth(s)-2,j+size*4+TextHeight(s)-2);
SetColor(c2);
OutTextXY(i+size*2,j+size*2,s)
end
end;
function Timer: double;
var
h,m,s,f: word;
begin
GetTime(h,m,s,f);
Timer:=(h*60+m)*60+s+f*0.01
end;
var
t,t0,dt: double;
gd,gm,i: integer;
Tag: array [1..nTag] of tTag;
ch: char;
begin
t:=Timer;
gd:=0;
InitGraph(gd,gm,'');
SetLineStyle(SolidLn,0,ThickWidth);
Randomize;
for i:=1 to nTag do with Tag[i] do begin
sh:=Rect;
x:=Random;
y:=Random;
size:=Random(7)+2;
c1:=Random(7)+9;
c2:=Random(7)+9;
c3:=Random(6)+1;
vx:=(Random-0.5)*0.4;
vy:=(Random-0.5)*0.4;
s:=Char(i+64)
end;
Tag[1].s:='Who';
Tag[2].s:='did';
Tag[3].s:='say';
Tag[4].s:='meow?';
repeat
t0:=t;
t:=Timer;
dt:=t-t0;
for i:=1 to nTag do with Tag[i] do begin
HideTag(Tag[i]);
x:=x+vx*dt;
if (x<0)or(x>1) then begin
if x<0 then x:=-x else x:=2-x;
vx:=-vx;
end;
y:=y+vy*dt;
if (y<0)or(y>1) then begin
if y<0 then y:=-y else y:=2-y;
vy:=-vy;
end;
ShowTag(Tag[i])
end;
repeat
if KeyPressed then ch:=ReadKey
until Timer-t>qt
until ch=#27;
while KeyPressed do ReadKey;
CLoseGraph
end.
{ graphic motion, 02 }
uses
WinCRT, // WinCRT для FP, CRT для TP
Graph;
var
gd,gm,x,y,i,j: integer;
begin
gd:=0; // задаем автоматическое определение граф.параметров
InitGraph(gd,gm,''); // инициализировать графику
x:=0; // задаем начальные координаты точки
y:=0;
repeat // цикл отрисовки
PutPixel(x,y,Black); // стереть точку
Inc(x); // перейти к соседней точке справа
if x>GetMaxX then begin // если зашли за край, то ..
x:=0; // .. перейти к началу экрана ..
Inc(y); // .. и на следующую строку
if y>GetMaxY then y:=0 // если экран закончился, перейти снова вверх
end;
PutPixel(x,y,White); // нарисовать точку в новой позиции
Delay(100); // подождать некоторое время (можно изменять число)
until KeyPressed; // выход из цикла отрисовки по нажатии любой клавиши
while KeyPressed do ReadKey;
CloseGraph // закрываем графику
end.
// graphic motion, 02
uses
WinCRT,Graph;
var
gd,gm,x,y,i,j: integer;
begin
gd:=0;
InitGraph(gd,gm,'');
x:=0;
y:=0;
repeat
SetColor(Black); // устанавливаем цвет текста (черный)
OutTextXY(x,y,'Hi!'); // стираем текст (пишем его черным)
Inc(x,10); // увеличиваем позицию x на 10
if x>GetMaxX then begin
x:=0;
Inc(y,50);
if y>GetMaxY then y:=0
end;
SetColor(White); // устанавливаем цвет (белый)
OutTextXY(x,y,'Hi!'); // печатаем текст
Delay(30); // ждем..
until KeyPressed;
while KeyPressed do ReadKey;
CloseGraph
end.