| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 517 人关注过本帖
标题:关于keystate函数的问题,我只按了一次左方向键,他就像按了几次一样
只看楼主 加入收藏
bok002121
Rank: 2
等 级:论坛游民
帖 子:90
专家分:26
注 册:2012-11-11
结帖率:87.5%
收藏
已结贴  问题点数:20 回复次数:6 
关于keystate函数的问题,我只按了一次左方向键,他就像按了几次一样


#define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000)? 1 : 0)  while(TRUE)
     {
         if(KEYDOWN(VK_LEFT))
              {
                  if(S[0].DIR==UP_DIR)
                  t.DIR=LEFT_DIR;             //上转左=左
                 else if(S[0].DIR==LEFT_DIR)
                  t.DIR=DOWN_DIR;              //左转左=下
                 else if(S[0].DIR==DOWN_DIR)
                 t.DIR=RIGHT_DIR;             //下转左=右
                 else
                  t.DIR=UP_DIR;                  //右转左=上            
              }
          else if(KEYDOWN(VK_RIGHT))
              {
                  if(S[0].DIR==UP_DIR)
                  t.DIR=RIGHT_DIR;         //上转右=右
                 else if(S[0].DIR==RIGHT_DIR)
                  t.DIR=DOWN_DIR;          //右转右=下
                 else if(S[0].DIR==DOWN_DIR)   
                  t.DIR=LEFT_DIR;             //下转右=左
                 else
                  t.DIR=UP_DIR;            //左转右=上     
              }
              else
              {
                  t.DIR=S[0].DIR;
                  delay(10);   
             }
              if(t.DIR==UP_DIR)
              {
                  t.y=S[0].y-2*SNAKE_D;
                  t.x=S[0].x;
                  for(i=len-1;i>0;i--)
                  S[i]=S[i-1];
                  S[i]=t;
                Draw_Snake(S,len);
                 delay(50);               
             }}
2013-07-25 09:54
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:7 
buzhidao ni shuo shen me

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-07-25 12:26
小xiong
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:388
专家分:1722
注 册:2013-2-8
收藏
得分:7 
是不是可以做成,一次按下和一次松叫一次按键完成,
2013-07-25 12:44
bok002121
Rank: 2
等 级:论坛游民
帖 子:90
专家分:26
注 册:2012-11-11
收藏
得分:0 
回复 3楼 小xiong
不行,在一个瞬间,只存在按下和非按下两个状态........我在想,这样算不算缓存区里面一下积累了几个消息...用fflush(stdin)清楚又不行,用的是c-free5.0
2013-07-25 13:18
bok002121
Rank: 2
等 级:论坛游民
帖 子:90
专家分:26
注 册:2012-11-11
收藏
得分:0 
回复 2楼 yuccn
就是运行的时候,比如,我只按了一次转左,他却转了两次左
2013-07-25 13:20
bok002121
Rank: 2
等 级:论坛游民
帖 子:90
专家分:26
注 册:2012-11-11
收藏
得分:0 
想到原因了。KEYDOWN(vk_code)这个是判断某按键是否被按下,虽然你觉得自己只按了一下,但是,在按下去的那短短时间内,程序已经执行了好几遍了,所以会出现按一下跟按了好几次一样
2013-07-25 23:01
bok002121
Rank: 2
等 级:论坛游民
帖 子:90
专家分:26
注 册:2012-11-11
收藏
得分:0 
回复 3楼 小xiong
小弟愚昧,现在才想到你的意思
2013-07-26 08:11
快速回复:关于keystate函数的问题,我只按了一次左方向键,他就像按了几次一样
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017275 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved