Qt实现贪吃蛇(三)

2017-11-22 22:08:52  阅读 277 次 评论 0 条

    上一篇中提到蛇有两种行为。我们说了前进,接下来看看转弯:

bool CSnake::setDir(E_DIR dir)
{
    if(isCorrectDir(dir))
    {
        f_goDir = dir;
        E_GO_RET ret = goAhead(); //前进一步
        if(ret == E_GETFOOD)
        {
            f_game->randFood();
        }else if(ret == E_DIE){
            f_game->setIsOver(true);
        }

        return true;
    }

    return false;
}

    实际上转弯只是设置一个方向,然后再调用前进一步的方法就完事了。这里有个返回值是bool类型,表示转弯成功与否,因为蛇是不能后退的。是否后退的判断如下:

bool CSnake::isCorrectDir(E_DIR dir)
{
    if(f_snake.size() < 2) //只有一节,哪个方向都可以
        return true;

    s_body firstBody = f_snake.at(f_snake.size() - 1);
    s_body secondBody = f_snake.at(f_snake.size() - 2);
    s_body nextBody = goStep(firstBody.bx,firstBody.by,dir);

    return !(secondBody.bx == nextBody.bx && secondBody.by == nextBody.by); //如果头部的前进一步位置与第二节位置相同,表示向后走了
}



Qt实现贪吃蛇(四)

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

发表评论


表情

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