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.