TC 2.0中实用鼠标的一个问题。

nasco 2000-07-28 08:53:00
我在用TC编写一个简单的游戏程序,其中需要判定鼠标左右的按键状态。我编写了如下函数:
void mouse_reset(void)
{
union REGS r;
r.x.ax=0;
int86(0x33,&r,&r);
if((int)r.x.ax!=-1)
{
printf("Please make sure you have installed mouse and the driver!");
exit(1);
}
}

void cursor_on(void)
{
union REGS r;
r.x.ax=1;
int86(0x33,&r,&r);
}

void cursor_off(void)
{
union REGS r;
r.x.ax=2;
int86(0x33,&r,&r);
}

int left_pressed()
{
union REGS r;
int c;
r.x.ax=3;
int86(0x33,&r,&r);
c=r.x.bx;
return c & 1;
}

int right_pressed()
{
union REGS r;
r.x.ax=3;
int86(0x33,&r,&r);
return r.x.bx & 2;
}

void mouse_position(int *x,int *y)
{
union REGS r;
r.x.ax=3;
int86(0x33,&r,&r);
*x=r.x.cx;
*y=r.x.dx;
}

其中right_pressed()和left_pressed()作为分别判断左右按键的函数,同时为了测试
我编写了一个简单的测试程序
main()
{
mouse_reset();
clrscr();
for(;;)
{
if(right_pressed())
{
printf("R");
}
if(left_pressed())
{
printf("L");
}
}
}
按照我的设想,应该是每按下一次左健或者右健输出一个"R"或者"L",但是一次会输出几百个...也就是IF语句几百次被判断成真。程序的问题出在什么地方?
大家一定帮助小弟解决这个问题,先谢过了!
:)
...全文
246 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
koalaz 2000-08-02
  • 打赏
  • 举报
回复
破服务器真慢,害我多帖了几次,不好意思。
koalaz 2000-08-01
  • 打赏
  • 举报
回复
不这样才是不对的,mouse的键被按下后,只要你还没放开,就是还按在那里,left_pressed()
的返回就一直是真的,你的循环又是一直下去的,那没有几百个'L'就是比较怪的事情了。
在Windows下,mouse的消息就是分为 WM_LBUTTONDOWN 和 WM_LBUTTONUP 的,你的程序也
应该考虑到这一点,不要认为按下一次就只有一个left_pressed()会为真(因为你按键的速度
是不可能达到程序循环速度的:)。
如果你只想打印一次'L',那只要设置一个flag记录mouse键的当前状况,再在判断只加进对此
flag的判断即可。
goodluck to you.
mxp 2000-07-28
  • 打赏
  • 举报
回复
for(;;)
{
if(right_pressed())
{
printf("R");
}
if(left_pressed())
{
printf("L");
}
}

那两个返回有问题!
Wingsun 2000-07-28
  • 打赏
  • 举报
回复
现在手头没有资料不好回答,等我回去查一查。
nasco 2000-07-28
  • 打赏
  • 举报
回复
有人知道吗?
nasco 2000-07-28
  • 打赏
  • 举报
回复
给一份!谢谢!nileib@online.sh.cn
Garfield 2000-07-28
  • 打赏
  • 举报
回复
我有源程序
nasco 2000-07-28
  • 打赏
  • 举报
回复
如何清除?望大侠指教! :)
谢谢!
Wingsun 2000-07-28
  • 打赏
  • 举报
回复
接收完成鼠标信息后要清除缓冲区,不清除的话你就总是检测到消息的存在。
Borland公司在1981年推出C语言程序设计集成开发环境“Turbo C 2.0”,由于其实用稳定的性能,一直长期工作应用在社会不同领域,得到社会各界的广泛认同。Borland公司为了解决该软件的一些Bug,又于1989年推出了升级版“Turbo C v2.01”,紧接着在1992年,由于功能更为强大的C++面向对象程序设计集成开发环境“Turbo C++ 3.0”的面世,导致“Turbo C v2.01”未能得到有效推广。由于C语言程序设计课程一直采用TC2.0作为教学实验环境,为了减少其的Bug,让同学们更方便的使用,AiY.CN重新找到尘封已久的“Turbo C v2.01”,重新包装上阵,焕发生机! “Turbo C v2.01 重装上阵版”是〖 AiY.CN ☆ 爱游国 〗为了照顾不熟悉DOS环境软件操作的广大初学者,让大家能在Windows环境下方便地安装Turbo C 2.01,而为其完善了Windows下的运行环境,经过重新包装后推荐给学习《C语言程序设计》的广大师生。使用者并不需要熟悉DOS知识,只需要在安装时将 Turbo C v2.01 指定安装在任意文件夹,再不需要手动更改任何选项,就能够正常编译程序。 “Turbo C v2.01 重装上阵版”的主要功能 1、为了照顾不熟悉DOS环境软件操作的广大初学者,让大家能在Windows环境下方便地安装Turbo C v2.01,本安装程序可以将 Turbo C v2.01 安装在任意指定目录,无需修改 Options 菜单里的 Directory 选项,即可正常编译标准 C 程序! 2、安装程序将在开始菜单上建立“〖 程序设计 〗\Turbo C v2.01”菜单,并建立启动 Turbo C 的快捷方式和配置卸载工具,还有其它相关的一些快捷方式; 4、您建立的C程序文件将保存在“安装目录\TC2.01\Project”目录下,开始菜单上会建立“我的 Project 目录”的快捷方式,令您保存更方便; 5、程序输出的.OBJ和.EXE文件将保存在“安装目录\TC2.01\Output”目录下,开始菜单上会建立“输出文件 Output 目录”的快捷方式,令您管理更方便; 6、附带了方便实用的Word/IE选词搜索工具,在Word文档或网页浏览器碰到某些词汇,只需要鼠标一划——即可轻松搜索!再不用新开浏览页面和复制、粘贴,实在是简单快捷;

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧