uses dos,     {для работы с прерыванием VideoBIOS}
{...}
     keyboard;{для работы с клавиатурой}
{...}
var
   KbdX,KbdY : word;
               {для спрайта, управляемого с клавиатуры}
{...}
begin
   if not InitMouse then begin
      writeln(?Для работы программы необходима мышь?);
      halt;
   end;
   GetPal(p[0],0,256);
   FadeOut(p);
   randomize;
   for i := 1 to NumSprites do
      CreateSprite(NameSprt[(i mod 2)+1],
                   random(320-Xsize),random(200-Ysize),
                   1,1,Sprt[i]);
   r.ax := $13;     	{ устанавливаем режим }
   intr($10,r);      	{  320Ё200Ё256 цветов }
   SetMouseRange(0,0,299,179); 	{для спрайта 20Ё20}
   SetMouse(150,90);  	{помещаем мышь в центр экрана}
   BlackPal;
   CreateScreenBuffer;            	{создаем буфер}
   CreateBackBuffer; 	{создаем буфер для фона}
   PutBackGround;  	{рисуем фон}
   FadeIn(p);
   for i := 1 to NumSprites do begin
      PutSprite(Sprt[i]);{и рисуем на его месте спрайт}
   end;
   SetTextParm(15,0,1);
   repeat 	{теперь спрайт будет двигаться по экрану}
         	{до тех пор, пока мы не нажмем на клавишу}
      BackBufferToScreen;
      for i := 1 to NumSprites do begin
         if i = 2 then begin
            KbdX := Sprt[i].x div 64;
            KbdY := Sprt[i].y div 64;
         end;
         CalcSpritePosition(Sprt[i]);
         if i = 1 then begin
            MouseStatus := GetMouse(Sprt[i].x,Sprt[i].y);
            Sprt[i].x := Sprt[i].x * 64;
            Sprt[i].y := Sprt[i].y * 64;
         end;
         if i = 2 then begin
            if Key[KeyRight] and (KbdX < 299) then
               inc(KbdX);
            if Key[KeyDown]  and (KbdY < 179) then
               inc(KbdY);
            if Key[KeyLeft]  and (KbdX > 0) then
               dec(KbdX);
            if Key[KeyUp]    and (KbdY > 0) then
               dec(KbdY);
            Sprt[i].x := KbdX * 64;
            Sprt[i].y := KbdY * 64;
         end;
         PutSprite(Sprt[i]);           {выводим спрайт}
      end;
      if (MouseStatus and 1) = 1 then
         PutText(56,16,?Левая кнопка мыши нажата?);
      if (MouseStatus and 2) = 2 then
         PutText(56,24,?Правая кнопка мыши нажата?);
      if (MouseStatus and 4) = 4 then
         PutText(56,32,?Средняя кнопка мыши нажата?);
      if Key[KeyAltL] or Key[KeyAltR] then
         PutText(56,40,?Нажата клавиша Alt?);
      if Key[KeyCtrlL] or Key[KeyCtrlR] then
         PutText(56,48,?Нажата клавиша Ctrl?);
      if Key[KeyShiftL] or Key[KeyShiftR] then
         PutText(56,56,?Нажата клавиша Shift?);
      if Key[KeySpace] then
         PutText(56,64,?Нажата клавиша Пробел?);
      FPS := GetFPS;
      str(FPS:0:1,s);
      PutText(120,184,? ?+s+? fps ?);
      if FPS > 1 then   	{изменяем приращение}
         for i := 1 to NumSprites do begin
            Sprt[i].dx := sign(Sprt[i].dx)
                                     *round(64*70/FPS);
            Sprt[i].dy := sign(Sprt[i].dy)
                                     *round(64*70/FPS);
         end;
      WaitVerticalRetrace;
	{ожидаем обратный ход луча кадровой развертки}
      ScreenBufferToScreen;  	{буфер — на экран}
   until key[KeyEsc];
{   readkey;  	{чистим буфер клавиатуры}
   DestroyBackBuffer; 	{уничтожаем буфер фона}
   DestroyScreenBuffer; 	{уничтожаем буфер}
   FadeOut(p);
   r.ax := $3;
   intr($10,r); 	{возвращаемся в текстовый режим}
   for i := NumSprites downto 1 do
      DestroySprite(Sprt[i]);
end.
462