• 大小: 7.50KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2024-04-13
  • 语言: C/C++
  • 标签: 生成  版本  自动  迷宫  

资源简介

可以随机生成n*n的迷宫

资源截图

代码片段和文件信息

#include
#include
#include
#include
#include
#define N 2 //关卡数目
#define M N*50 //地图大小 M*M
using namespace std;

int Map[M + 1][M + 1] = { 0 };
                  
int X=0Y=0;
int EX=0EY=0;
char ch;


int level = 0;//游戏等级

int count;//地图大小
int my_x my_y;//我的位置
char str[2 * (M + 1)*(M + 1)] = { ‘\0‘ };
int IsHaveNeighbor(int X_index int Y_index)
{
int i j flag = 0;
if (level == 0)
{
if ((X_index >= 3 && Map[X_index - 2][Y_index] == 1) || (X_index < count - 3 && Map[X_index + 2][Y_index] == 1) || (Y_index >= 3 && Map[X_index][Y_index - 2] == 1) || (Y_index < count - 3 && Map[X_index][Y_index + 2] == 1))
return 1;
return 0;
}
else if (level == 1)
{
for (i = 0;i < count;i++)
{
for (j = 0;j < count;j++)
{
if (Map[i][j] == 6)//还存在蓝色方块
{
flag++;
}

}
}
return flag;
}
}
void Creat_01(int X_index int Y_index)
{
int rand_position x y flag = 0;
x = X_index;
y = Y_index;
//如果四个方向都没有了,返回上一步,否则,继续
while (1)
{
flag = 0;
flag = IsHaveNeighbor(X_index Y_index);
if (flag == 0)
{
return;
}
else
{
Map[X_index][Y_index] = 5;
x = X_index;
y = Y_index;
while (1)
{
rand_position = rand() % 4;
if (rand_position == 0 && X_index >= 3 && Map[X_index - 2][Y_index] == 1)//上
{
X_index = X_index - 2;
}
else if (rand_position == 1 && X_index < count - 3 && Map[X_index + 2][Y_index] == 1)//下
{
X_index = X_index + 2;
}
else if (rand_position == 2 && Y_index >= 3 && Map[X_index][Y_index - 2] == 1)//左
{
Y_index -= 2;
}
else if (rand_position == 3 && Y_index < count - 3 && Map[X_index][Y_index + 2] == 1)//右
{
Y_index += 2;
}
Map[(x + X_index) / 2][(y + Y_index) / 2] = 5;
Map[X_index][Y_index] = 5;
Creat_01(X_index Y_index);
break;
}
}
}
}
void Creat_02_Change(int X_index int Y_index)
{
if (X_index > 1 && Map[X_index - 1][Y_index] == 0)
Map[X_index - 1][Y_index] = 6;
if (Y_index > 1 && Map[X_index][Y_index - 1] == 0)
Map[X_index][Y_index - 1] = 6;
if (X_index < count - 2 && Map[X_index + 1][Y_index] == 0)
Map[X_index + 1][Y_index] = 6;
if (Y_index < count - 2 && Map[X_index][Y_index + 1] == 0)
Map[X_index][Y_index + 1] = 6;

}
void Creat_02(int X_index int Y_index)
{
int rand_point x = 1 y = 2 flag = 0 i j;
while (1)
{
flag = IsHaveNeighbor(X_index Y_index);
if (flag == 0)
return;
else
{
while (1)
{
//如果目前剩余1个蓝色方块
if (flag == 1)
rand_point = 0;
else
rand_point = rand() % flag;//2个   0  1 随机一个小于flag的数,用于随机选取蓝色方块
   //print();
for (i = 0;i < count;i++)
{
for (j = 0;j < count;j++)
{
if (Map[i][j] == 6 && rand_point == 0)
{
x = i;
y = j;
break;
}
else if (Map[i][j] == 6)
rand_point--;

评论

共有 条评论