⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mi_gong.cpp

📁 一个好用的迷宫子程序
💻 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 + -