Qt实现贪吃蛇(六)

2017-11-29 22:57:29  阅读 314 次 评论 0 条

    在上一篇中我们把游戏的绘制说完了,接下来只剩下最后一步就是游戏的操作。操作部分包括两个内容一个是通过按下方向键改变方向,第二是使用定时器让蛇每隔一段时间自动向前一步。

    对于第一点只需要重写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实现贪吃蛇就结束了,当然这只是最基础的版本。有兴趣的可以优化并扩展出更多的玩法。

本文地址:http://fearlazy.com/index.php/post/51.html
版权声明:本文为原创文章,版权归 fearlazy 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?