Qt实现贪吃蛇(三)

阿里云拼团返场活动: 点击加入

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

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实现贪吃蛇(四)

腾讯云活动继续: 看一看(竞争好激烈^_^)

演示站
上一篇:Android 7.0 无法使用socket的问题
下一篇:Qt实现贪吃蛇(四)

发表评论