问题描述
界面如下在classwizard中加了按键响应处理函数voidC贪吃蛇Dlg::OnKeyDown(UINTnChar,UINTnRepCnt,UINTnFlags){//MessageBox(L"游111戏:");//TODO:在此添加消息处理程序代码和/或调用默认值switch(nChar){caseVK_LEFT:dir=left;break;caseVK_RIGHT:dir=right;break;caseVK_UP:dir=up;break;caseVK_DOWN:dir=down;break;}CDialogEx::OnKeyDown(nChar,nRepCnt,nFlags);}开始游戏按钮加了处理函数,如下voidC贪吃蛇Dlg::OnBnClickedStart(){GetDlgItem(IDC_SUSPEND)->EnableWindow(TRUE);//GetDlgItem(IDD_MY_DIALOG)->;SetTimer(1,100,NULL);}voidC贪吃蛇Dlg::OnTimer(UINT_PTRnIDEvent){switch(nIDEvent){case1:switch(dir){caseup:X0-=1;break;casedown:X0+=1;break;caseleft:Y0-=1;break;caseright:Y0+=1;break;default:break;}if(X0<0||X0>=NUM-1||Y0<0||Y0>=NUM-1||snake[X0][Y0]>0){MessageBox(L"游戏结束n得分:"+score);KillTimer(1);}elseif(snake[X0][Y0]==0){for(inti=0;i<NUM-1;i++)for(intj=0;j<NUM-1;j++){if(snake[i][j]>0){if(snake[i][j]==lenth)snake[i][j]=0;elsesnake[i][j]++;}}snake[X0][Y0]=1;}else{for(inti=0;i<NUM-1;i++)for(intj=0;j<NUM-1;j++){if(snake[i][j]>0)snake[i][j]++;}lenth++;UpdateData();score++;UpdateData(FALSE);snake[X0][Y0]=1;X1=abs(rand()%(NUM-2));Y1=abs(rand()%(NUM-2));if(snake[X1][Y1]==0)snake[X1][Y1]==-1;}break;}Invalidate();CDialogEx::OnTimer(nIDEvent);}问题:点击开始后,对话框不响应按键消息,我按了上下左右没有反应,焦点一直在右边的开始游戏,暂停,退出按钮上切换当蛇撞到了边界,游戏结束的MessageBox无限循环的弹出来,求大神分析问题所在
解决方案
解决方案二:
定时器100毫米也太密了吧?不要用定时器。你这个还用定时器?