UNIT U_MOUSE;
INTERFACE
PROCEDURE MOUSE_DETECT; {MOUSE_DETECT探测并显示鼠标}
PROCEDURE MOUSE_show; {MOUSE_SHOW 画图之后,鼠标不被图形覆盖}
PROCEDURE MOUSE_HIDDEN; {MOUSE_HIDDEN隐藏鼠标}
PROCEDURE MOUSE_GOTOXY(X,Y:INTEGER);
function mouse_x:integer; {MOUSE_X获得鼠标X座标}
function mouse_y:integer; {MOUSE_Y获得鼠标Y座标}
function mouse_click:integer; {MOUSE_CLICK获得鼠标击键状态}
FUNCTION MOUSE_IN_BOX(A,B,C,D:INTEGER):BOOLEAN;{A,B,C,D is the box range}
IMPLEMENTATION
USES DOS,CRT;
PROCEDURE MOUSE_DETECT;
VAR
REGS:REGISTERS;
BEGIN
REGS.AX:=1;
INTR($33,REGS);
REGS.AX:=4;
REGS.CX:=320;
REGS.DX:=140;
intr($33,regs);
END;
PROCEDURE MOUSE_show;
VAR
REGS:REGISTERS;
BEGIN
REGS.AX:=3;
INTR($33,REGS);
REGS.AX:=4;
intr($33,regs);
END;
PROCEDURE MOUSE_GOTOXY(X,Y:INTEGER);
VAR
REGS:REGISTERS;
BEGIN
REGS.AX:=4;
REGS.CX:=X;
REGS.DX:=Y;
INTR($33,REGS);
END;
PROCEDURE MOUSE_HIDDEN;
VAR
REGS:REGISTERS;
BEGIN
REGS.AX:=2;
INTR($33,REGS);
END;
function mouse_x:integer;
VAR
REGS:REGISTERS;
BEGIN
REGS.AX:=3;
INTR($33,REGS);
mouse_x:=regs.cx;
END;
function mouse_y:integer;
VAR
REGS:REGISTERS;
BEGIN
REGS.AX:=3;
INTR($33,REGS);
mouse_y:=regs.dx;
END;
function mouse_click:integer;
VAR
REGS:REGISTERS;
BEGIN
REGS.AX:=3;
INTR($33,REGS);
mouse_click:=regs.bx;
END;
FUNCTION MOUSE_IN_BOX(A,B,C,D:INTEGER):BOOLEAN;{A,B,C,D is the box range}
var mousex,mousey:integer;
begin
mousex:=mouse_x;
mousey:=mouse_y;
IF (MOUSEX>A) AND (MOUSEX<C) THEN
BEGIN
IF (MOUSEY>B) AND (MOUSEY<D) THEN
MOUSE_IN_BOX:=TRUE
ELSE
MOUSE_IN_BOX:=FALSE;
END
ELSE
MOUSE_IN_BOX:=FALSE;
END;
END.
还有,
控制扬声器发声!分8个音阶,多、来、米、发、少、啦、希已经计算好,延时自己调。酷不酷?喝~~喝~~
USES CRT;
PROCEDURE SOUND_PLAY(PLAT,CORD,STAGE,change_num:INTEGER);
BEGIN
IF CORD=1 THEN
case stage of
1:begin sound(round(66*(1+CHANGE_NUM /10))); end;
2:begin sound(round(74*(1+CHANGE_NUM /10)));end;
3:begin sound(round(83*(1+CHANGE_NUM /10)));end;
4:begin sound(round(88*(1+CHANGE_NUM /10)));end;
5:begin sound(round(98*(1+CHANGE_NUM /10)));end;
6:begin sound(round(111*(1+CHANGE_NUM /10)));end;
7:begin sound(round(125*(1+CHANGE_NUM /10)));end;
end;
IF CORD=2 THEN
case stage of
1:begin sound(round(130*(1+CHANGE_NUM /10)));end;
2:begin sound(round(146*(1+CHANGE_NUM /10)));end;
3:begin sound(round(164*(1+CHANGE_NUM /10)));end;
4:begin sound(round(174*(1+CHANGE_NUM /10)));end;
5:begin sound(round(195*(1+CHANGE_NUM /10)));end;
6:begin sound(round(218*(1+CHANGE_NUM /10)));end;
7:begin sound(round(245*(1+CHANGE_NUM /10)));end;
end;
IF CORD=3 THEN
case stage of
1:begin sound(round(261*(1+CHANGE_NUM /10)));end;
2:begin sound(round(293*(1+CHANGE_NUM /10)));end;
3:begin sound(round(329*(1+CHANGE_NUM /10)));end;
4:begin sound(round(348*(1+CHANGE_NUM /10)));end;
5:begin sound(round(391*(1+CHANGE_NUM /10)));end;
6:begin sound(round(439*(1+CHANGE_NUM /10)));end;
7:begin sound(round(493*(1+CHANGE_NUM /10)));end;
end;
IF CORD=4 THEN
case stage of
1:begin sound(round(522*(1+CHANGE_NUM /10)));end;
2:begin sound(round(586*(1+CHANGE_NUM /10)));end;
3:begin sound(round(658*(1+CHANGE_NUM /10)));end;
4:begin sound(round(697*(1+CHANGE_NUM /10)));end;
5:begin sound(round(782*(1+CHANGE_NUM /10)));end;
6:begin sound(round(878*(1+CHANGE_NUM /10)));end;
7:begin sound(round(985*(1+CHANGE_NUM /10)));end;
end;
IF CORD=5 THEN
case stage of
1:begin sound(round(1044*(1+CHANGE_NUM /10)));end;
2:begin sound(round(1172*(1+CHANGE_NUM /10)));end;
3:begin sound(round(1315*(1+CHANGE_NUM /10)));end;
4:begin sound(round(1393*(1+CHANGE_NUM /10)));end;
5:begin sound(round(1564*(1+CHANGE_NUM /10)));end;
6:begin sound(round(1756*(1+CHANGE_NUM /10)));end;
7:begin sound(round(1970*(1+CHANGE_NUM /10)));end;
end;
IF CORD=6 THEN
case stage of
1:begin sound(round(2088*(1+CHANGE_NUM /10)));end;
2:begin sound(round(2343*(1+CHANGE_NUM /10)));end;
3:begin sound(round(2630*(1+CHANGE_NUM /10)));end;
4:begin sound(round(2787*(1+CHANGE_NUM /10)));end;
5:begin sound(round(3128*(1+CHANGE_NUM /10)));end;
6:begin sound(round(3512*(1+CHANGE_NUM /10)));end;
7:begin sound(round(3942*(1+CHANGE_NUM /10)));end;
end;
IF CORD=7 THEN
case stage of
1:begin sound(round(4176*(1+CHANGE_NUM /10)));end;
2:begin sound(round(4687*(1+CHANGE_NUM /10)));end;
3:begin sound(round(5261*(1+CHANGE_NUM /10)));end;
4:begin sound(round(5574*(1+CHANGE_NUM /10)));end;
5:begin sound(round(6257*(1+CHANGE_NUM /10)));end;
6:begin sound(round(7023*(1+CHANGE_NUM /10)));end;
7:begin sound(round(7883*(1+CHANGE_NUM /10)));end;
end;
IF CORD=8 THEN
case stage of
1:begin sound(round(8352*(1+CHANGE_NUM /10)));end;
2:begin sound(round(9374*(1+CHANGE_NUM /10)));end;
3:begin sound(round(10523*(1+CHANGE_NUM /10)));end;
4:begin sound(round(11148*(1+CHANGE_NUM /10)));end;
5:begin sound(round(12514*(1+CHANGE_NUM /10)));end;
6:begin sound(round(14046*(1+CHANGE_NUM /10)));end;
7:begin sound(round(15766*(1+CHANGE_NUM /10)));end;
end;
procedure graph016; {画随机矩形.}
var
c,d,m,n:integer;
procedure swape(var x,y:integer); {将两位数由小到大排列,用于画矩形.}
var
t:integer;
begin
if x>y then
begin
t:=x;x:=y;y:=t
end
end;
begin
c:=random(a);m:=random(a);d:=random(b);n:=random(b);
swape(c,m);
swape(d,n);
setcolor(random(maxcolor));
rectangle(c,d,m,n);
delay(200)
end;
procedure graph017; {画随机填色矩形.}
var
c,d,M,N,p,q:integer;
procedure swape(var x,y:integer); {将两位数由小到大排列,用于画矩形.}
var
t:integer;
begin
if x>y then
begin
t:=x;x:=y;y:=t
end
end;
begin
setcolor(random(maxcolor));
c:=random(a);m:=random(a);d:=random(b);n:=random(b);
p:=round((c+m)/2);q:=round((d+n)/2);
swape(c,m);
swape(d,n);
rectangle(c,d,m,n);
setfillstyle(RANDOM(11),random(maxcolor));
bar(c+3,d+3,m-3,n-3);
delay(500)
END;
setlinestyle(solidln,0,thickwidth); {底面蓝色方条.}
setcolor(white);
rectangle((a div 16),(B DIV 48),((a*15) div 16),220);
setfillstyle(1,lightblue);
bar((a div 16),(b div 48),((a*15) div 16),220);
procedure showmode; {初始化图形系统.}
var
graphdrive:integer;
graphmode:integer;
errcode:integer;
begin
{自动设定显示模式.}
graphdrive:=detect;
initgraph(graphdrive,graphmode,'');
errcode:=graphresult;
if errcode<>grok then
writeln('Graphics error:', grapherrormsg(errcode));
end;