下面这个程序是为了播放do、re、mi的音乐,并响应键盘跟鼠标的触发而停止,
但运行后发现音乐能持续播放,但不能停止,而且屏幕显示也不能按预想的实现
#include<stdio.h>
#include<conio.h> // kbhit()
#include<dos.h> // int86() sound() nosound()
#include<stdlib.h>
union REGS r;
union REGS Inr,Outr;
union REGS Ins,Outs;
int iMx=0,iMy=0;
void initgraph(int mode) // 初始化屏幕
{
r.h.ah=0;
r.h.al=mode;
int86(0x10,&r,&r);
}
void initmouse() //初始化鼠标
{
r.x.ax=0;
int86(0x33,&r,&r);
r.x.ax=1;
int86(0x33,&r,&r);
}
void getmouse() //读取鼠标状态
{
Inr.x.ax=3;
int86(0x33,&Inr,&Outr);
iMx=Outr.x.cx;
iMy=Outr.x.dx;
}
int mousestatus() //看鼠标位置是否移动
{
getmouse();
Ins.x.ax=3;
int86(0x33,&Ins,&Outs);
if(iMx!=Outs.x.cx||iMy!=Outs.x.dx)
return 1;
else
return 0;
}
main()
{
int i;
unsigned f[]={262,294,330};
initgraph(18); //设置屏幕为640*480图形模式
initmouse();
if((!kbhit())&&(!mousestatus()))
for(i=0;i<=3;i++) //do、re、mi的播放循环
{
if(i==3) i=0;
sound(f[i]);
sleep(1);
nosound();
}
}