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.