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语句几百次被判断成真。程序的问题出在什么地方?
大家一定帮助小弟解决这个问题,先谢过了!
:)
...全文
248 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文档或网页浏览器碰到某些词汇,只需要鼠标一划——即可轻松搜索!再不用新开浏览页面和复制、粘贴,实在是简单快捷;
国际学术期刊Science/AAAS和英特尔在全球首次联袂推出第一季《架构师成长计划》以来,吸引了无数架构师踊跃参与,获得业内广泛赞誉。为持续助力架构师把握数智机遇,构建未来,第二季《架构师成长计划》全新升级,强势归来!业内顶尖架构师大咖齐聚,为架构师群体量身打造系统成长课程,带来涵盖云游戏、云原生、联邦学习、生信大数据、算力网络、云网融合等多个热门话题的前沿技术及案例实践。第一期:超视频时代 音视频架构建设与演进复制链接收看完整内容:https://bizwebcast.intel.cn/eventstart.aspx?eid=298&tc=yxq0921l2d&frm=csdn_2第二期:转化医学研究背景下的高性能计算平台复制链接收看完整内容:https://bizwebcast.intel.cn/eventstart.aspx?eid=311&tc=pzw21rx59o&frm=csdn_2第三期:联邦学习的研究与应用实践复制链接收看完整内容:https://bizwebcast.intel.cn/eventstart.aspx?eid=315&tc=0e8trfvt8i&frm=csdn_2第四期:用架构思维为云原生做减法复制链接收看完整内容:https://bizwebcast.intel.cn/eventstart.aspx?eid=316&tc=i2kgf55ggn&frm=csdn_2第五期:网络智能化技术与演进复制链接收看完整内容:https://bizwebcast.intel.cn/eventstart.aspx?eid=322&tc=ckhvmonqvb&frm=CSDN_2第六期:异构计算 数据心“芯”变革复制链接收看完整内容:https://bizwebcast.intel.cn/eventstart.aspx?eid=325&tc=mzppx1h6ri&frm=csdn_2第七期:筑算力,话东西复制链接收看完整内容:https://bizwebcast.intel.cn/eventstart.aspx?eid=327&tc=gwb7n8x79n&frm=csdn_2第八期:AI驱动的生命科学创新范式之变复制链接收看完整内容:https://bizwebcast.intel.cn/eventstart.aspx?eid=328&tc=zircyqwy9u&frm=csdn_2第九期:软硬一体实现数据库性能优化复制链接收看完整内容:https://bizwebcast.intel.cn/eventstart.aspx?eid=348&tc=4a46kfrb0o&frm=csdn_2第十期:AI规模化应用时代的深度学习平台构建复制链接收看完整内容:https://bizwebcast.intel.cn/eventstart.aspx?eid=349&tc=fm9a1mrumb&frm=csdn_2

69,373

社区成员

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

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