2、就算赢了,同比我们的游戏,只要将兔子围住就可以了。12bool GameCtrl::judgeSuccess(){ //获取当前可遍历的方向34567891011 vector moveDirs; this->getCurDirs(moveDirs,m_rabbitPos); for (auto it:moveDirs) { if (!m_gameMap[m_rabbitPos.ver+it->ver][m_rabbitPos.hor+it->hor]->isObt){
3、 return false; } } return true;}实现起来的话,遍历当前兔子可以移动到的位置是不是都是障碍就行了,如果都是说明成功了,否则则没有成功。关于游戏失败,只要当兔子此时的位置只要到达任意一条边界边上,则就说明兔子成功的逃脱了,游戏也失败了。123456bool GameCtrl::judgeFail(){ if (m_rabbitPos.hor==0
4、
5、m_rabbitPos.ver==0
6、
7、m_rabbitPos.hor==NUM_MAPROWANDCOW
8、-1
9、
10、m_rabbitPos.ver==NUM_MAPROWANDCOW-1) { return true; } return false;}ok,我们已经添加了完了成功和失败的判定,现在我们来添加积分的管理。分析一下,在这个游戏中积分是什么,其实就是兔子移动的次数(step)。如果你能在兔子移动越少的情况下将兔子围住,当然就说明你越牛X。在头文件中添加响应的成员变量和接口函数:123456//当前移动步数 int m_step; public: //得到当前移动步数 int
11、 getStep(){return m_step;};什么时候step增加呢?肯定是兔子移动的时候啊,我们修改下rabbitMove函数:123int GameCtrl::rabbitMove() { Dir d = this->getRabbitMoveDir(); if (Dir::none!=d) {45678910111213 //增加移动次数 m_step++; m_rabbitPos=(*m_moveVec[(int)d])+m_rabbitPos;