uses crt, graph;
var
 avtor,predlog:string;
 x, y, x1,y1, boll:integer;
 GraphDriver,a, BarX, BarY, BarX1,barY1:integer;
 BarXX,BarYY,BarYY1, BarXX1:integer;
 GraphMode:integer;
 key:char;
 ch: char;
 i,i1:integer;
const
 Up = #72; Dn=#80; Left=#75; Rigth=#77;help=#59;
label l1;
begin
randomize;
InitGraph(graphDriver, GraphMode,'D:\bp\bgi');
{Переменные}
{BarX - Отступ с лева (начало квадрата), BarY - Отступ с верху (начало квадрата)
BarX1 - Отступ с лева, но должен быть больше чем BarX, BarY1 - Отступ с верху,
должен быть больше чем BarY}
BarX := 140; BarY:=140; BarX1:=180; BarY1:=180;
BarXX:=5;BarYY:=5;barYY1:=5;BarXX1:=5;
x:=20; y:=125; x1:=1; y1:=1;
{Установка цвета фигур} setcolor(2);
clrscr;
     repeat
      SetPalette(0,0);
      ClearDevice;
      for i:= 1 to 120 do PutPixel(random(620),random(70),random(14));
      rectangle(1,100,610,420);
      {Шарик}
            SetColor(red);
            x:=x+x1; y:=y+y1;
            circle(x,y,16);
            FloodFill(x+1,y+1,red);
            if (x<20) or (x>560) then begin x1:=-x1; sound(22) end;
            if (y<120) or (y>400) then begin y1:=-y1; sound(22) end;
      {Проверка для высоты}
            if BarY < 125 then BarYY:=0 else BarYY:=5;
            if BarY1>400 then BarYY1:=0 else BarYY1:=5;
      {Проверка для ширины}
            if BarX<10 then BarXX:=0 else BarXX:=5;
            if BarX>550 then BarXX1:=0 else BarXX1:=5;
      {Проверка клавиш}
           case key of
                Up:
                 begin
                   {Установка цвета для квадрата} SetFillStyle(2,2);
                   BarY:=BarY-BarYY;
                   BarY1:=BarY1-BarYY;
                   bar(BarX,BarY,BarX1,BarY1);
                 end;
                Dn:
                 begin
                   {Установка цвета для квадрата} SetFillStyle(2,2);;
                   BarY:=BarY+BarYY1;
                   BarY1:=BarY1+BarYY1;
                   bar(BarX,BarY,BarX1,BarY1);
                 end;
                Left:
                 Begin
                   {Установка цвета для квадрата} SetFillStyle(2,2);;
                   BarX:=BarX-BarXX;
                   BarX1:=BarX1-BarXX;
                   bar(BarX,BarY,BarX1,BarY1);
                 end;
                Rigth:
                 Begin
                   {Установка цвета для квадрата} SetFillStyle(2,2);;
                   BarX:=BarX+BarXX1;
                   BarX1:=BarX1+BarXX1;
                   bar(BarX,BarY,BarX1,BarY1);
                 end;
                Help:
                 begin
                   OutText('Упраление - стрелками и другими клавишами.');
                   OutTextxy(1,10,'Остановить движение кубика можно пробелом или какой-нибудь буквой.');
                   OutTextXY(1,30, 'Для выхода нажмите "q". Для продолжения нажмите любую клавишу!');
                 end;
           end;
                   SetFillStyle(2,13);
                   bar3d(BarX,BarY,BarX1,BarY1,5,topon);
                   SetFillStyle(1,5);
                {Проверка (если вдруг шарик столкнулся с квадратом}
                for I:= 1 to 40 do begin
                    if (x=BarX+I) and (Y=BarY) then begin y1:=-y1;x1:=+x1; sound(22) end;
                    if (x=BarX1-i) and (y=BarY1) then begin y1:=-y1;x1:=+x1; sound(22) end;

                    if (x=BarX) and (Y=BarY+I) then begin x1:=-x1; sound(22) end;
                    if (x=BarX1) and (y=BarY1-i) then begin x1:=-x1; sound(22) end;
                    {Линейки в виде точек окружающих квадрат}
                    PutPixel(BarX+i,BarY,3);
                    PutPixel(BarX1-i,BarY1,3);
                    PutPixel(BarX,BarY+i,3);
                    PutPixel(BarX1,BarY1-i,3);
                end;
                putPixel(x,y,14);
                if KeyPressed then Key:=readKey;
                nosound;
     until key in ['q', 'Q'];
      setcolor(red);
      setTExtStyle(DefaultFont,0,2);
      outtextxy(180,200,'Press key Enter');
      readln;
  CloseGraph; {Завершение графического режима}

avtor:='v. 0.1. Azanov Vitali. 28.12.1999 g.';
predlog:='Учитесь! И незабывайте эти наши веселые времена!';
i:=41;
i1:=1;
repeat
gotoXY(1,9); write('--------------------------------------------------------------------------------');
gotoXY(1,11); write('--------------------------------------------------------------------------------');
  i:=i-1;
    textcolor(black);
    gotoXY(i+length(avtor)+1,10);
    write('#');
    textcolor(yellow);
    delay(2000);
    gotoXY(i,10);
    write(avtor);
  if i=1 then begin clrscr; i:=41; end;


gotoXY(1,13); write('--------------------------------------------------------------------------------');
gotoXY(1,15); write('--------------------------------------------------------------------------------');
  i1:=i1+1;
    textcolor(black);
    gotoXY(i1-1,14);
    write('#');
    textcolor(red);
    gotoXY(i1,14);
    write(predlog);
  if i1=33 then begin clrscr; i1:=1; end;
textcolor(15); gotoXY(9,20); Write('- Программа написана на языке фирмы Borland "TurboPascal 7.0" -');
textcolor(15); gotoXY(9,21); Write('  - В настоящее время программа находится в стадии создания -');
until keypressed;
end.