c 实现走迷宫流程图_走迷宫——C++ 算法实现

#include #include#include#include#include"Mazer.h"

using namespacestd;

MyMazer::MyMazer()

{

m_cPerson= 'Y';

m_cFaceto=_up;

m_speed=LOW;

m_iNowLocal.X= 0;//行

m_iNowLocal.Y = 1;//列

m_iPreviousLocal.X = 0;

m_iPreviousLocal.Y= 0;

m_iSteps= 0;

MyMazeMap m_mazeMap;

m_mazeMap.getMap();

}

MyMazer::MyMazer(MyMazeMap _mazeMap)

{

m_cPerson= 'Y';

m_cFaceto=_up;

m_speed=LOW;

m_iNowLocal.X= 0;//行

m_iNowLocal.Y = 1;//列

m_iPreviousLocal.X = 0;

m_iPreviousLocal.Y= 0;

m_mazeMap=_mazeMap;

m_mazeMap.getMap();//m_mazeMap.getExitPosition();//m_mazeMap.detTerpoint(originPoint, destination);

}

MyMazer::~MyMazer()

{

}void MyMazer::setPersonPosition(int x, int y)//人当前位置

{

m_iNowLocal.X=x;

m_iNowLocal.Y=y;

}int MyMazer::getSteps()//获取步数

{returnm_iSteps;

}void MyMazer::setPersonSpeed(Speed _speed)//人移动的速度

{

m_speed=_speed;

}void MyMazer::setPersonChar(char person)//表示人的字符

{

m_cPerson=person;

}

Faceto MyMazer::turn(Faceto _faceto)//人转向之后的朝向 基于右手算法,定义下一步往哪走

{

m_cFaceto=_faceto;if (m_cFaceto ==_up)

{if (m_mazeMap.getMap()[m_iNowLocal.X][m_iNowLocal.Y + 1] != WALL)//右边界不是墙

{

m_cFaceto=_right;

}else if (m_mazeMap.getMap()[m_iNowLocal.X - 1][m_iNowLocal.Y] != WALL)//上边界不是墙

{

m_cFaceto=_up;

}else if (m_mazeMap.getMap()[m_iNowLocal.X][m_iNowLocal.Y - 1] != WALL)//左边界不是墙

{

m_cFaceto=_left;

}else if (m_mazeMap.getMap()[m_iNowLocal.X + 1][m_iNowLocal.Y] != WALL)//下边界不是墙

{

m_cFaceto=_down;

}

}else if (m_cFaceto ==_right)

{if (m_mazeMap.getMap()[m_iNowLocal.X + 1][m_iNowLocal.Y] != WALL)//下边界不是墙

{

m_cFaceto=_down;

}else if (m_mazeMap.getMap()[m_iNowLocal.X][m_iNowLocal.Y + 1] != WALL)//右边界不是墙

{

m_cFaceto=_right;

}else if (m_mazeMap.getMap()[m_iNowLocal.X - 1][m_iNowLocal.Y] != WALL)//上边界不是墙

{

m_cFaceto=_up;

}else if (m_mazeMap.getMap()[m_iNowLocal.X][m_iNowLocal.Y - 1] != WALL)//左边界不是墙

{

m_cFaceto=_left;

}

}else if (m_cFaceto ==_down)

{if (m_mazeMap.getMap()[m_iNowLocal.X][m_iNowLocal.Y - 1] != WALL)//左边界不是墙

{

m_cFaceto=_left;

}else if (m_mazeMap.getMap()[m_iNowLocal.X + 1][m_iNowLocal.Y] != WALL)//下边界不是墙

{

m_cFaceto=_down;

}else if (m_mazeMap.getMap()[m_iNowLocal.X][m_iNowLocal.Y + 1] != WALL)//右边界不是墙

{

m_cFaceto=_right;

}else if (m_mazeMap.getMap()[m_iNowLocal.X - 1][m_iNowLocal.Y] != WALL)//上边界不是墙

{

m_cFaceto=_up;

}

}else if (m_cFaceto ==_left)

{if (m_mazeMap.getMap()[m_iNowLocal.X - 1][m_iNowLocal.Y] != WALL)//上边界不是墙

{

m_cFaceto=_up;

}else if (m_mazeMap.getMap()[m_iNowLocal.X][m_iNowLocal.Y - 1] != WALL)//左边界不是墙

{

m_cFaceto=_left;

}else if (m_mazeMap.getMap()[m_iNowLocal.X + 1][m_iNowLocal.Y] != WALL)//下边界不是墙

{

m_cFaceto=_down;

}else if (m_mazeMap.getMap()[m_iNowLocal.X][m_iNowLocal.Y + 1] != WALL)//右边界不是墙

{

m_cFaceto=_right;

}

}returnm_cFaceto;

}void MyMazer::start(Faceto _faceto)//游戏开始函数

{char tempcPer = 'Y';

tempcPer=m_cPerson;

m_iSteps= 1;double speed_num = 0;if (m_speed ==LOW)

speed_num= 2;else if (m_speed ==MID)

speed_num= 1;else if (m_speed ==FAST)

speed_num= 0.5;

m_cFaceto=_faceto;//画第一个点的位置

setPersonChar(tempcPer);

gotoxy(m_iNowLocal.Y, m_iNowLocal.X);

cout<

gotoxy(0, m_mazeMap.getRow() + 2);

cout<< "步数统计:" << m_iSteps <

Sleep(speed_num* 1000);while (1)

{

m_iPreviousLocal=m_iNowLocal;switch(m_cFaceto)

{case 0://_up

{

m_iNowLocal.X= m_iNowLocal.X - 1;break;

}case 1://_down

{

m_iNowLocal.X+= 1;break;

}case 2://_left

{

m_iNowLocal.Y= m_iNowLocal.Y - 1;break;

}case 3://_right

{

m_iNowLocal.Y+= 1;break;

}

}

m_iSteps++;//记录步长//从二维数组下面的二行输出当前走的步数

gotoxy(0, m_mazeMap.getRow() + 2);

cout<< "步数统计:" << m_iSteps <

if ((m_iNowLocal.X == 0 || m_iNowLocal.X ==m_mazeMap.getRow()-1 ) || (m_iNowLocal.Y == m_mazeMap.getCol()-1 || (m_iNowLocal.Y == 0)))

{//判断有没有走到出口的位置,到了,结束循环

setPersonChar(' ');

gotoxy(m_iPreviousLocal.Y, m_iPreviousLocal.X);

cout<

Sleep(0.05 * 1000);

setPersonChar(tempcPer);

gotoxy(m_iNowLocal.Y, m_iNowLocal.X);

cout<

Sleep(speed_num* 1000);break;

}//当前要走的位置不是出口位置,移动位置,

m_cFaceto = turn(m_cFaceto);//判断当前位置的下一个位置的方向

setPersonChar(' ');

gotoxy(m_iPreviousLocal.Y, m_iPreviousLocal.X);

cout<

Sleep(0.05 * 1000);

setPersonChar(tempcPer);

gotoxy(m_iNowLocal.Y, m_iNowLocal.X);

cout<

/*gotoxy(0, m_mazeMap.getRow()+2);

cout << "步数统计:" << m_iSteps << endl;*/Sleep(speed_num* 1000);

}

setPersonChar(' ');

gotoxy(0, m_mazeMap.getCol());

cout<< endl << endl << endl <

cout<< "走的步数:" << m_iSteps <

cout<< "出口坐标:" << "(" << m_iNowLocal.X << "," << m_iNowLocal.Y << ")" <

cout<< "Finally the maze!" <

}void MyMazer::gotoxy(int x, int y)//动画控制

{

COORD cd;

cd.X=x;

cd.Y=y;

HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleCursorPosition(handle, cd);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值