{фрагмент основной программы}
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;
{фрагменты модуля sprites}
procedure PutSprite(Sprite:SpriteType);
{вывод спрайта на экран}
var
sou,dest : pointer;
begin
sou := @(Sprite.Img^[Sprite.phase,0,0]);
dest := @(Scr^[Sprite.Y shr 6,Sprite.X shr 6]);
{...}
procedure CreateSprite(s:string; x,y,dx,dy:integer;
var Sprite:SpriteType); {создание спрайта}
{...}
Sprite.x := x*64;
Sprite.y := y*64; { задаем начальные значения }
{...}
procedure CalcSpritePosition(var Sprite:SpriteType);
{вычисление новых координат спрайта}
{...}
if (x + Xsize*64 + dx) >= 319*64 then
dx := -dx; {вычисляем новые приращения,}
if (x + dx) <= 0 then
dx := -dx; {реализующие отражение}
if (y + Ysize*64 + dy) >= 199*64 then
dy := -dy; {спрайта от стенок}
{...}