Qt实现贪吃蛇(六)
在上一篇中我们把游戏的绘制说完了,接下来只剩下最后一步就是游戏的操作。操作部分包括两个内容一个是通过按下方向键改变方向,第二是使用定时器让蛇每隔一段时间自动向前一步。
对于第一点只需要重写Qt的键盘事件即可:
void CMainWin::keyPressEvent(QKeyEvent *e) { bool changeRet = false; //表示方向是否正确,不是后退即为正确。 switch (e->key()) //判断按下的按键 { case Qt::Key_Up: changeRet = m_game->getSnake()->setDir(CSnake::E_UP); break; case Qt::Key_Down: changeRet = m_game->getSnake()->setDir(CSnake::E_DOWN); break; case Qt::Key_Left: changeRet = m_game->getSnake()->setDir(CSnake::E_LEFT); break; case Qt::Key_Right: changeRet = m_game->getSnake()->setDir(CSnake::E_RIGHT); break; default: break; } if(m_game->isOver()) //若游戏结束则关闭定时器并提示 { m_timer->stop(); QMessageBox::information(this,"Tip","Game Over!"); } else if(changeRet){ //若方向正确则重新计时 m_timer->stop(); m_timer->start(500); m_gameRender->update(); } }
在键盘事件中先判断按下的是否为方向键,若为方向键则做出相应的方向改变。接着判断按下方向键的结果,若游戏结束,停止定时器并做出提示。若方向正确则重新计时并重绘界面,若方向不正确什么也没做。
对于第二点就更简单了,只需要使用一个定时器。在对应的槽函数中让游戏前进一步。接着判断前进一步的结果。代码如下:
void CMainWin::slot_timeOut() { if(m_game->goAhead()) { m_timer->stop(); QMessageBox::information(this,"Tip","Game Over!"); } m_gameRender->update(); }
至此Qt实现贪吃蛇就结束了,当然这只是最基础的版本。有兴趣的可以优化并扩展出更多的玩法。