📄 mi_gong.cpp
字号:
#include<stdlib.h>
#include<iostream.h>
#include"Stack_Mg.h"
#include"Mi_Gong.h"
void GO::InitMi_Gong(int x,int y,int zz)
{
int i(0),j(0);
for(i=0;i<x;i++)
for(j=0;j<y;j++)
{
m[i][j].Pass='0';
m[i][j].mx=i;
m[i][j].my=j;
m[i][j].NumPort=0;
m[i][j].PassTimes=0;
}
for(i=1;i<x-1;i++)
for(j=1;j<y-1;j++)
{
if(rand()%zz!=0) //根据随机数能不能被zz整除来生成障碍
m[i][j].Pass='1';
else
m[i][j].Pass='0';
}
m[1][1].Pass='#'; //出口初始化为'#'
m[i-1][j-1].Pass='&'; //入口初始化为'&'
cout<<endl;
cout<<"初始化好的迷宫:";
for(i=0;i<x;i++)
{
cout<<endl;
for(j=0;j<y;j++)
cout<<m[i][j].Pass<<" ";
}
cout<<endl<<endl;
NowPort=m[i-2][j-2];
PrePort=m[i-2][j-2];
m[i-2][j-2].Pass='1';
}
bool GO::GoOn(GO& Z)
{
int x(0),y(0),xx(0),yy(0);
x=Z.NowPort.mx;
y=Z.NowPort.my;
xx=Z.PrePort.mx;
yy=Z.PrePort.my;
char temp('0');
temp=Z.m[xx][yy].Pass;
Z.m[xx][yy].Pass='0';
//如果现在的位置的四个方向不可以通过或者找到终点
if(Z.m[x][y+1].Pass=='0'&&Z.m[x][y-1].Pass=='0'&&Z.m[x+1][y].Pass=='0'&&Z.m[x-1][y].Pass=='0'||Z.m[x][y].Pass=='#')
{
Z.m[xx][yy].Pass=temp;
return false;
}
else
{
Z.m[xx][yy].Pass=temp;
return true;
}
}
/*找下一步*/
void GO::FindPort(GO& Z)
{
char Find_X('#');
int w1=Z.NowPort.my-Z.PrePort.my;
int w2=Z.NowPort.mx-Z.PrePort.mx;
if(w1<0&&w2==0)
{
Find_X='0';//在来时的左边
}
else if(w1>0&&w2==0)
{
Find_X='1';//在右边
}
else if(w1==0&&w2<0)
{
Find_X='2';//在上边
}
else if(w1==0&&w2>0)
{
Find_X='3';//在下边
}
else if(w1==0&&w2==0)
{
Find_X='4';//在原处
}
else
cout<<"FindPort() has problem!"<<endl;
switch(Find_X)
{
case '0':
if(Z.m[Z.NowPort.mx-1][Z.NowPort.my].Pass!='0'&&Z.m[Z.NowPort.mx-1][Z.NowPort.my].PassTimes<Z.Get_NumPort())
{//往上走
Z.PrePort=Z.NowPort;
Z.NowPort=Z.m[Z.NowPort.mx-1][Z.NowPort.my];
Z.NowPort.PassTimes=Z.NowPort.PassTimes+1;
cout<<"往上走"<<endl;
return;
}
else if(Z.m[Z.NowPort.mx][Z.NowPort.my-1].Pass!='0'&&Z.m[Z.NowPort.mx][Z.NowPort.my-1].PassTimes<Z.Get_NumPort())
{//往左走
Z.PrePort=Z.NowPort;
Z.NowPort=Z.m[Z.NowPort.mx][Z.NowPort.my-1];
Z.NowPort.PassTimes=Z.NowPort.PassTimes+1;
cout<<"往左走"<<endl;
return;
}
else if(Z.m[Z.NowPort.mx+1][Z.NowPort.my].Pass!='0'&&Z.m[Z.NowPort.mx+1][Z.NowPort.my].PassTimes<Z.Get_NumPort())
{//往下走
Z.PrePort=Z.NowPort;
Z.NowPort=Z.m[Z.NowPort.mx+1][Z.NowPort.my];
Z.NowPort.PassTimes=Z.NowPort.PassTimes+1;
cout<<"往下走"<<endl;
return;
}
else
{
NowPort.Pass='#';
cout<<"没有路可走!!"<<endl;
}
break;
case '1':
if(Z.m[Z.NowPort.mx+1][Z.NowPort.my].Pass!='0'&&Z.m[Z.NowPort.mx+1][Z.NowPort.my].PassTimes<Z.Get_NumPort())
{//往下走
Z.PrePort=Z.NowPort;
Z.NowPort=Z.m[Z.NowPort.mx+1][Z.NowPort.my];
Z.NowPort.PassTimes=Z.NowPort.PassTimes+1;
cout<<"往下走"<<endl;
return;
}
else if(Z.m[Z.NowPort.mx][Z.NowPort.my+1].Pass!='0'&&Z.m[Z.NowPort.mx][Z.NowPort.my+1].PassTimes<Z.Get_NumPort())
{//往右走
Z.PrePort=Z.NowPort;
Z.NowPort=Z.m[Z.NowPort.mx][Z.NowPort.my+1];
Z.NowPort.PassTimes=Z.NowPort.PassTimes+1;
cout<<"往右走"<<endl;
return;
}
else if(Z.m[Z.NowPort.mx-1][Z.NowPort.my].Pass!='0'&&Z.m[Z.NowPort.mx-1][Z.NowPort.my].PassTimes<Z.Get_NumPort())
{//往上走
Z.PrePort=Z.NowPort;
Z.NowPort=Z.m[Z.NowPort.mx-1][Z.NowPort.my];
Z.NowPort.PassTimes=Z.NowPort.PassTimes+1;
cout<<"往上走"<<endl;
return;
}
else
{
NowPort.Pass='#';
cout<<"没有路可走!!"<<endl;
}
break;
case '2':
if(Z.m[Z.NowPort.mx][Z.NowPort.my+1].Pass!='0'&&Z.m[Z.NowPort.mx][Z.NowPort.my+1].PassTimes<Z.Get_NumPort())
{//往右走
Z.PrePort=Z.NowPort;
Z.NowPort=Z.m[Z.NowPort.mx][Z.NowPort.my+1];
Z.NowPort.PassTimes=Z.NowPort.PassTimes+1;
cout<<"往右走"<<endl;
return;
}
else if(Z.m[Z.NowPort.mx-1][Z.NowPort.my].Pass!='0'&&Z.m[Z.NowPort.mx-1][Z.NowPort.my].PassTimes<Z.Get_NumPort())
{//往上走
Z.PrePort=Z.NowPort;
Z.NowPort=Z.m[Z.NowPort.mx-1][Z.NowPort.my];
Z.NowPort.PassTimes=Z.NowPort.PassTimes+1;
cout<<"往上走"<<endl;
return;
}
else if(Z.m[Z.NowPort.mx][Z.NowPort.my-1].Pass!='0'&&Z.m[Z.NowPort.mx][Z.NowPort.my-1].PassTimes<Z.Get_NumPort())
{//往左走
Z.PrePort=Z.NowPort;
Z.NowPort=Z.m[Z.NowPort.mx][Z.NowPort.my-1];
Z.NowPort.PassTimes=Z.NowPort.PassTimes+1;
cout<<"往左走"<<endl;
return;
}
else
{
NowPort.Pass='#';
cout<<"没有路可走!!"<<endl;
}
break;
case '3':
if(Z.m[Z.NowPort.mx][Z.NowPort.my-1].Pass!='0'&&Z.m[Z.NowPort.mx][Z.NowPort.my-1].PassTimes<Z.Get_NumPort())
{//往左走
Z.PrePort=Z.NowPort;
Z.NowPort=Z.m[Z.NowPort.mx][Z.NowPort.my-1];
Z.NowPort.PassTimes=Z.NowPort.PassTimes+1;
cout<<"往左走"<<endl;
return;
}
else if(Z.m[Z.NowPort.mx+1][Z.NowPort.my].Pass!='0'&&Z.m[Z.NowPort.mx+1][Z.NowPort.my].PassTimes<Z.Get_NumPort())
{//往下走
Z.PrePort=Z.NowPort;
Z.NowPort=Z.m[Z.NowPort.mx+1][Z.NowPort.my];
Z.NowPort.PassTimes=Z.NowPort.PassTimes+1;
cout<<"往下走"<<endl;
return;
}
else if(Z.m[Z.NowPort.mx][Z.NowPort.my+1].Pass!='0'&&Z.m[Z.NowPort.mx][Z.NowPort.my+1].PassTimes<Z.Get_NumPort())
{//往右走
Z.PrePort=Z.NowPort;
Z.NowPort=Z.m[Z.NowPort.mx][Z.NowPort.my+1];
Z.NowPort.PassTimes=Z.NowPort.PassTimes+1;
cout<<"往右走"<<endl;
return;
}
else
{
NowPort.Pass='#';
cout<<"没有路可走!!"<<endl;
}
break;
case '4':
if(Z.m[Z.NowPort.mx-1][Z.NowPort.my].Pass!='0'&&Z.m[Z.NowPort.mx-1][Z.NowPort.my].PassTimes<Z.Get_NumPort())
{//往上走
Z.PrePort=Z.NowPort;
Z.NowPort=Z.m[Z.NowPort.mx-1][Z.NowPort.my];
Z.NowPort.PassTimes=Z.NowPort.PassTimes+1;
cout<<"往上走"<<endl;
return;
}
else if(Z.m[Z.NowPort.mx][Z.NowPort.my-1].Pass!='0'&&Z.m[Z.NowPort.mx][Z.NowPort.my-1].PassTimes<Z.Get_NumPort())
{//往左走
Z.PrePort=Z.NowPort;
Z.NowPort=Z.m[Z.NowPort.mx][Z.NowPort.my-1];
Z.NowPort.PassTimes=Z.NowPort.PassTimes+1;
cout<<"往左走"<<endl;
return;
}
else
{
NowPort.Pass='#';
cout<<"没有路可走!!"<<endl;
}
break;
default:
{
NowPort.Pass='#';
cout<<"没有路可走!!"<<endl;
return;
}
}
}
void GO::GoBack()
{
Mi_Gong M;
int x(0),y(0),xx(0),yy(0);
x=NowPort.mx;
y=NowPort.my;
xx=PrePort.mx;
yy=PrePort.my;
char temp('0');
temp=m[xx][yy].Pass;
m[xx][yy].Pass='0';
if(m[x][y+1].Pass=='0'&&m[x][y-1].Pass=='0'&&m[x+1][y].Pass=='0'&&m[x-1][y].Pass=='0'&&PrePort.PassTimes<2)
{
M=NowPort;
NowPort=PrePort;
PrePort=M;
NowPort.PassTimes=NowPort.PassTimes+1;
m[xx][yy].Pass=temp;
cout<<"后退"<<endl;
}
else
{
NowPort.Pass='#';
m[xx][yy].Pass=temp;
cout<<"没有路可走!!"<<endl;
}
}
int GO::Get_NumPort()
{
int e(0),s(0),w(0),n(0);
if(m[NowPort.mx][NowPort.my+1].Pass=='1')
e=1;
else
e=0;
if(m[NowPort.mx][NowPort.my-1].Pass=='1')
w=1;
else
w=0;
if(m[NowPort.mx-1][NowPort.my].Pass=='1')
n=1;
else
n=0;
if(m[NowPort.mx+1][NowPort.my].Pass=='1')
s=1;
else
s=0;
return e+w+n+s;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -