program Sprite;
         {простейшая демонстрация работы со спрайтами}
uses dos,     {для работы с прерыванием VideoBIOS}
     crt,     {для работы с клавиатурой}
     pal,     {для работы с палитрой}
     timer18, {для измерения времени и синхронизации}
     sprites, {для работы со спрайтами}
     mouse,   {для работы с мышью}
     graph;   {для работы с экраном}
{...}

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(ScrSizeX-Xsize),random(ScrSizeY-Ysize),
                   1,1,Sprt[i]);
   r.ax := $12;	{устанавливаем любой графический режим,}
   intr($10,r);	{например, 640Ё480 точек и 16 цветов}
   SetSVGAMode(ScrSizeX, ScrSizeY, 8, LFBorBanked);
   SetMouseRange(0,0,ScrSizeX1,ScrSizeY1);
                                     {для спрайта 20Ё20}
   SetMouse((ScrSizeX-20) div 2,(ScrSizeY-20) div 2);
	{помещаем мышь в центр экрана}
   BlackPal;
   CreateScreenBuffer;	{создаем буфер}
   SetTranspMode(TRUE,TransparentColor);
   CreateBackBuffer;	{создаем буфер для фона}
   PutBackGround;	{рисуем фон}
   FadeIn(p);
   for i := 1 to NumSprites do begin
      sprites.PutSprite(Sprt[i]);	{рисуем спрайт}
   end;
   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;
         sprites.PutSprite(Sprt[i]);	{выводим спрайт}
      end;
      FPS := GetFPS;
      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 keypressed;
   readkey;	{чистим буфер клавиатуры}
   DestroyBackBuffer;	{уничтожаем буфер фона}
   DestroyScreenBuffer;	{уничтожаем буфер}
   FadeOut(p);
   r.ax := $3;
   intr($10,r);	{возвращаемся в текстовый режим}
   for i := NumSprites downto 1 do
      DestroySprite(Sprt[i]);
end.