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.