Программа
USES Crt,Graph; { Подключение модулей }
CONST PathToDriver=''; { Путь к графическому драйверу }
VAR Exit:boolean; { Флаг выхода из программы }
GraphDriver:integer; { Графический драйвер }
GraphMode:integer; { Графический режим }
X1,X2,Y1,Y2:real; { Координаты концов отрезка }
X1pred,X2pred,Y1pred,Y2pred:real; { Предыдущии координаты концов отрезка }
Vx,Vy:real; { Проекции скоростей отрезка }
FUNCTION Min(a,b:real):real; { Функция определения минимального }
Begin
if a<b { Сравнение }
then Min:=a { Определение значения функции }
else Min:=b
End;
FUNCTION Max(a,b:real):real; { Функция определения максимального }
Begin
if a>b { Сравнение }
then Max:=a { Определение значения функции }
else Max:=b
End;
PROCEDURE SwitchingPage;{ Переключение отображаемой и активной видеостраниц }
Const Page:boolean=FALSE; { Флаг страниц }
Begin
SetVisualPage(Ord(Page)); { Установка отображаемой страницы }
SetActivePage(Ord(not Page)); { Установка активной страницы }
Page:=not Page { Переустановка флага }
End;
BEGIN
ClrScr; { Очистка экрана }
{ Ввод начальных параметров: }
Write('Введите X-координату первого конца отрезка [1..300] ');
ReadLn(X1);
Write('Введите Y-координату первого конца отрезка [1..200] ');
ReadLn(Y1);
Write('Введите X-координату второго конца отрезка [1..300] ');
ReadLn(X2);
Write('Введите Y-координату второго конца отрезка [1..200] ');
ReadLn(Y2);
Write('Введите скорость по X [-0.9..0.9] ');
ReadLn(Vx);
Write('Введите скорость по Y [-0.9..0.9] ');
ReadLn(Vy);
X1pred:=1; X2pred:=1; Y1pred:=1; Y2pred:=1; { Сброс предыдущих координат }
Exit:=FALSE; { Сброс флага выхода }
GraphDriver:=Detect; { Автоматическое оперделение драйвера }
GraphMode:=0; { Задание графического режима }
InitGraph(GraphDriver,GraphMode,PathToDriver); { Инициалиэация графики }
{ SetGraphMode(1); { Установка графического режима }
{ SwitchingPage; { Переключение видео страниц }
RectAngle(0,0,GetMaxX,GetMaxY); { Прорисовка прямоугольника }
{ SwitchingPage; { Переключение видео страниц }
RectAngle(0,0,GetMaxX,GetMaxY); { Прорисовка прямоугольника }
repeat { Цикл обработки клавиатуры }
{ Проверки ударов о стенки: }
if (Min(X1,X2)-0.5<1)and(Vx<0) then Vx:=-Vx;
if (Max(X1,X2)+1.5>GetMaxX-1)and(Vx>0) then Vx:=-Vx;
if (Min(Y1,Y2)-0.5<1)and(Vy<0) then Vy:=-Vy;
if (Max(Y1,Y2)+1.5>GetMaxY)and(Vy>0) then Vy:=-Vy;
{ SwitchingPage; { Переключение видео страниц }
SetColor(Black); { Установка черного цвета }
Line(Round(X1pred),Round(Y1pred),Round(X2pred),Round(Y2pred)); { Закрашивание линии }
SetColor(White); { Установка белого цвета }
Line(Round(X1),Round(Y1),Round(X2),Round(Y2)); { Прорисовка линии }
{ SwitchingPage; { Переключение видео страниц }
SetColor(Black); { Установка черного цвета }
Line(Round(X1pred),Round(Y1pred),Round(X2pred),Round(Y2pred)); { Закрашивание линии }
SetColor(White); { Установка белого цвета }
Line(Round(X1),Round(Y1),Round(X2),Round(Y2)); { Прорисовка линии }
X1pred:=X1; X2pred:=X2; Y1pred:=Y1; Y2pred:=Y2; { Сохранение предыдущих координат }
X1:=X1+Vx; X2:=X2+Vx; Y1:=Y1+Vy; Y2:=Y2+Vy; { Пересчет координат }
if KeyPressed then Exit:=ReadKey=#27 { Сканирование клавиатуры }
until Exit;
CloseGraph { Закрытие графического режима }
END.
Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию