uses
graph,crt,dos;
var
xc,yc,x1,y1,mx,my,d,m,x,y,a:integer;
g:char;
r:registers;
begin
clrscr;
textcolor(11);
window(30,1,80,25);
writeln('МЫШЬ В КЛЕТКЕ');
window(1,2,80,25);
writeln('Демонстрация возможностей мыши в графическом режиме.');
writeln('Pаботают:"+", "-", ESC, левая и правая кнопки мыши - сам поймешь как.');
writeln('Курсор сейчас убрал специально...');
(* r.ah:=$001;
r.ch:=$20; {Курсора нет}
r.cl:=$00;
intr($10,r);
*)
readkey;
d:=vga;
m:=vgahi; {Графический режим}
initgraph(d,m,'c:\bp\bgi');
r.ax:=0; {Инициализация крысы}
intr($33,r);
randomize;
r.ax:=4;
r.cx:=random(640); {Произвольные координаты крысы}
r.dx:=random(480);
intr($33,r);
with r do
begin
ax:=$007;
cx:=100; {Вертикальные границы крысы}
dx:=540;
end;
intr($33,r);
with r do
begin
ax:=$008;
cx:=100; {Горизонтальные границы крысы}
dx:=380;
end;
intr($33,r);
r.ax:=1; {Крыса на экране}
intr($33,r);
x1:=GetMaxX div 2;
y1:=GetMaxY div 2;
xc:=x1;
yc:=y1;
repeat
asm
mov ax,3
int 33h
mov a,bx {Определение состояния крысы:а-кнопка,х,у-координаты}
mov x,cx
mov y,dx
mov cx,mx
mov dx,my {Устанавливаем чувствительность крысы}
mov ax,0fh
int 33h
end;
if keypressed then
begin
if g='+' then
begin mx:=mx+5;my:=my+5;end;
if g='-' then
begin mx:=mx-5;my:=my-5;
if (mx<=0) or (my<=0) then
begin mx:=0;my:=0;end;
end;
end;
if a=1{левая} then
begin
line(x,y,x1,y1);
x1:=x;
y1:=y;
end;
if a=2{правая}then
line(x,y,xc,yc);
{ putpixel(x,y-1,13);}
while keypressed do g:=readkey;{очищение буфера клавиатуры(чтобы не пищал)}
until g=#27;
CloseGraph;
end.