{фрагмент основной программы} 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; {спрайта от стенок} {...}