C++-C++贪吃蛇中如何实现长按方向键后可以加速

发布于 2017-01-25 13:28:44 字数 1412 浏览 1728 评论 2

LRESULT CALLBACK WndProc(HWND hWnd,UINT message,
WPARAM wParam,LPARAM lParam)
{

switch(message)
{
case WM_TIMER :
OnTimer((UINT)wParam);
break;

case WM_KEYDOWN:
switch(wParam)
{
case VK_ESCAPE:
exit(0);
break;
case VK_UP:
table.ChangeSnakeDirect(S_UP);
break;
case VK_DOWN:
table.ChangeSnakeDirect(S_DOWN);
break;
case VK_LEFT:
table.ChangeSnakeDirect(S_LEFT);
break;
case VK_RIGHT:
table.ChangeSnakeDirect(S_RIGHT);
break;
case VK_SPACE:
if( uGameState == GAME_STATE_END )
{
StartGame();
break;
}

}
return 0;
case WM_SETCURSOR:
SetCursor(NULL);
return 0;
case WM_DESTROY:
ReleaseDC(hWnd,picDC);
ReleaseDC(hWnd,bufferDC);
ReleaseDC(hWnd,windowDC);
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd,message,wParam,lParam);
}
能在这段代码改吗?怎么改啊?谢谢。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

想挽留 2017-10-18 18:35:04

添加一个变量来存放长按状态和当前前进方向
并用一个timer来控制前进,毕竟贪吃蛇应该是没有按键输入时也自动向当前方向前进的
在timer过程中根据方向来前进,根据长按状态来决定前进速度

然后处理WM_KEYDOWN和WM_KEYUP,管理好长按状态和前进方向即可

夜无邪 2017-05-05 08:05:20

可以考虑把WM_KEYDOWN消息改成WM_CHAR,WM_CHAR可以接收按键自动重复的消息,也就是长按的时候会发送多个。当然消息的参数会略有差异。
在ChangeSnakeDirect过程中,如果要改变的方向就是当前的前进方向,就立即前进一格。
这样就实现了快进。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文