C++-C++贪吃蛇中如何实现长按方向键后可以加速
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
添加一个变量来存放长按状态和当前前进方向
并用一个timer来控制前进,毕竟贪吃蛇应该是没有按键输入时也自动向当前方向前进的
在timer过程中根据方向来前进,根据长按状态来决定前进速度
然后处理WM_KEYDOWN和WM_KEYUP,管理好长按状态和前进方向即可
可以考虑把WM_KEYDOWN消息改成WM_CHAR,WM_CHAR可以接收按键自动重复的消息,也就是长按的时候会发送多个。当然消息的参数会略有差异。
在ChangeSnakeDirect过程中,如果要改变的方向就是当前的前进方向,就立即前进一格。
这样就实现了快进。