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); //如果头部的前进一步位置与第二节位置相同,表示向后走了 }