一个同时按键的有关问题(WM_KEYDOWN)相关,各位大侠帮忙看看。50分相送

一个同时按键的问题(WM_KEYDOWN)相关,各位大侠帮忙看看。50分相送!
我做的一个EVC版本下面的贪食蛇游戏,遇到一个同时按键产生的怪问题。正常情况下,我按上,下,左,右方向键改变蛇的前进方向,没有问题。可是,如果,当前蛇往右移动,我按左键   +   上键或下键,就会判定为死亡,同样,当前蛇往上方移动,我按下键   +   左键或右键,也会出现死亡。
case   WM_KEYDOWN:
            switch   (wParam)
        {
case   VK_UP:
        if(theGSnake.GetCurrentDirect()   ==   SNK_DOWN)
      {
::MessageBeep(0);

        }
      else
      {
theGSnake.ChangeDirect(SNK_UP);
        }
    break;
case   VK_DOWN:                              

if(theGSnake.GetCurrentDirect()   ==   SNK_UP)
{
::MessageBeep(0);
}
else
{
          theGSnake.ChangeDirect(SNK_DOWN);
}
break;
case   VK_RIGHT:

if(theGSnake.GetCurrentDirect()   ==   SNK_LEFT)
{
::MessageBeep(0);
}
else
{
          theGSnake.ChangeDirect(SNK_RIGHT);
}
break;  
case   VK_LEFT:

if(theGSnake.GetCurrentDirect()   ==   SNK_RIGHT)
{
::MessageBeep(0);
}
else
{
          theGSnake.ChangeDirect(SNK_LEFT);
}
break;

为什么同时按键就会出现问题?怎么样让程序只接受一个键的消息?就是说如果我同时按上键和左键程序只接受最先按得那个键的消息,后面的就舍去。麻烦大家帮忙出出主意!


------解决方案--------------------
GetAsynKeyState判断
------解决方案--------------------
有点奇怪``按楼主说的,如果当前蛇是往上这个方面走,那么照游戏规则来说,我按方向键down应该是没有反应的,我按左它就转左,右就转右,为什么会死亡呢??搞不懂楼主的意思``:(
------解决方案--------------------
LZ的问题是程序结构错误造成的。
LZ不应该在按键后马上对蛇的行进方向生效。
应该这样处理才对:
蛇的每次行进会有一个时间间隔,在上次的时间间隔里,如果有按键那么将此按键记录下来扔进按键缓冲中去,但蛇此时并不能立刻转头而是要等到时间间隔结束了,才从记录下来的按键缓冲中取出最早的按键进行处理,如果取不到则保持行进方向。这样的话,如果在同一个时间间隔内有多个按键,这些按键也只是放入缓冲而已,并不是马上执行,时间间隔结束也只是取出一个按键,也就是说并不会因为多个按键同时操作导致方向判断错误造成死掉。除此之外,就是按键缓冲区大小的设定,推荐可以记录2个就够了最多不要超过3个,超过缓冲区大小的按键操作应该抛弃。
------解决方案--------------------
我觉得你得说一下 "死亡 "在你的程序里是如何被触发的。如果是撞墙,你在一大片空旷区域实验就不该出问题,如果还是出了问题,说明是撞到了自身。

我觉得你不妨将响应按键的优先顺序改一下,既 上 右 下 左, 总之不要把上下,或者左右 连起来,应该可以解决你的问题。

猜测而已!