bool Mazer::moveForward() //声明可以进行主观判断如何前进的方法 { //检查右侧是否是墙,如果是墙,检查前方是否是墙,如果不是墙则前进,前进后检查是否是出口 int rightX; int rightY; int forwardX; int forwardY; switch(forward) { case SOUTH: rightX = m_iPosX - 1; rightY = m_iPosY; forwardX = m_iPosX; forwardY = m_iPosY + 1; break; case NORTH: rightX = m_iPosX + 1; rightY = m_iPosY; forwardX = m_iPosX; forwardY = m_iPosY - 1; break; case WEST: rightX = m_iPosX; rightY = m_iPosY - 1; forwardX = m_iPosX - 1; forwardY = m_iPosY; break; case EAST: rightX = m_iPosX; rightY = m_iPosY + 1; forwardX = m_iPosX + 1; forwardY = m_iPosY; break; } //如果右侧是墙 //system("PAUSE"); if(MazeMap::checkWallOrNot(rightX,rightY)) { //检测前方也是墙壁 if(MazeMap::checkWallOrNot(forwardX,forwardY)) { //按逆时针换一个方向 turnLeft(); return NO; } //检测前方是通路 else { //向前移动 goAhead(); return YES; } } //如果右侧是通路 else { Sleep(3000); turnRight(); goAhead(); return YES; } }
/* * 函数名称:moveForward * 函数功能:人向前走一步 * 返回内容:YES:移动一次 NO:没有移动 */ bool MazePerson::moveForward() { //检查当前位置是否合法 if(MazeMap::checkWallOrNot(positionX,positionY)) { //检测到当前位置是墙,提示用户设计非法并返回 gotoxy(0,23); cout << "检测到当前设定的起始位置是墙壁,请重新设定。" << endl; outOrNot = true; return NO; } //判断如果前一个位置的坐标是10000,则直接在当前位置绘制人 if(preX == 10000 || preY == 10000) { gotoxy(positionX,positionY); cout << personPic; Sleep(5000); } //检查右侧是否是墙,如果是墙,检查前方是否是墙,如果不是墙则前进,前进后检查是否是出口 int rightX; int rightY; int forwardX; int forwardY; switch(forward) { case SOUTH: rightX = positionX - 1; rightY = positionY; forwardX = positionX; forwardY = positionY + 1; break; case NORTH: rightX = positionX + 1; rightY = positionY; forwardX = positionX; forwardY = positionY - 1; break; case WEST: rightX = positionX; rightY = positionY - 1; forwardX = positionX - 1; forwardY = positionY; break; case EAST: rightX = positionX; rightY = positionY + 1; forwardX = positionX + 1; forwardY = positionY; break; } //如果右侧是墙 //system("PAUSE"); if(MazeMap::checkWallOrNot(rightX,rightY)) { //检测前方也是墙壁 if(MazeMap::checkWallOrNot(forwardX,forwardY)) { //按逆时针换一个方向 turnLeft(); return NO; } //检测前方是通路 else { //向前移动 goAhead(); return YES; } } //如果右侧是通路 else { Sleep(3000); turnRight(); goAhead(); return YES; } }