uses dos, {для работы с прерыванием VideoBIOS}
{...}
keyboard;{для работы с клавиатурой}
{...}
var
KbdX,KbdY : word;
{для спрайта, управляемого с клавиатуры}
{...}
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(320-Xsize),random(200-Ysize),
1,1,Sprt[i]);
r.ax := $13; { устанавливаем режим }
intr($10,r); { 320Ё200Ё256 цветов }
SetMouseRange(0,0,299,179); {для спрайта 20Ё20}
SetMouse(150,90); {помещаем мышь в центр экрана}
BlackPal;
CreateScreenBuffer; {создаем буфер}
CreateBackBuffer; {создаем буфер для фона}
PutBackGround; {рисуем фон}
FadeIn(p);
for i := 1 to NumSprites do begin
PutSprite(Sprt[i]);{и рисуем на его месте спрайт}
end;
SetTextParm(15,0,1);
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;
if i = 2 then begin
if Key[KeyRight] and (KbdX < 299) then
inc(KbdX);
if Key[KeyDown] and (KbdY < 179) then
inc(KbdY);
if Key[KeyLeft] and (KbdX > 0) then
dec(KbdX);
if Key[KeyUp] and (KbdY > 0) then
dec(KbdY);
Sprt[i].x := KbdX * 64;
Sprt[i].y := KbdY * 64;
end;
PutSprite(Sprt[i]); {выводим спрайт}
end;
if (MouseStatus and 1) = 1 then
PutText(56,16,?Левая кнопка мыши нажата?);
if (MouseStatus and 2) = 2 then
PutText(56,24,?Правая кнопка мыши нажата?);
if (MouseStatus and 4) = 4 then
PutText(56,32,?Средняя кнопка мыши нажата?);
if Key[KeyAltL] or Key[KeyAltR] then
PutText(56,40,?Нажата клавиша Alt?);
if Key[KeyCtrlL] or Key[KeyCtrlR] then
PutText(56,48,?Нажата клавиша Ctrl?);
if Key[KeyShiftL] or Key[KeyShiftR] then
PutText(56,56,?Нажата клавиша Shift?);
if Key[KeySpace] then
PutText(56,64,?Нажата клавиша Пробел?);
FPS := GetFPS;
str(FPS:0:1,s);
PutText(120,184,? ?+s+? fps ?);
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 key[KeyEsc];
{ readkey; {чистим буфер клавиатуры}
DestroyBackBuffer; {уничтожаем буфер фона}
DestroyScreenBuffer; {уничтожаем буфер}
FadeOut(p);
r.ax := $3;
intr($10,r); {возвращаемся в текстовый режим}
for i := NumSprites downto 1 do
DestroySprite(Sprt[i]);
end.