C&C++
发布时间:2022-04-03 发布网站:大佬教程 code.js-code.com
大佬教程收集整理的这篇文章主要介绍了不太规则的迷宫生成算法2,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
先直接给一个直观的例子:
_ _ _ _ _ _ _ _
╲_╱ ╲_╱ ╲_╱ ╲_╱ ╲_╱ ╲_╱ ╲_╱ ╲
╲_ ╲_ ╲ _ _╱ _╱ _╱ ╱
╱ ╱ ╱ ╲_╱ ╲_ ╲ ╲_ _╱ ╲
╲ ╱ _╱ ╲_ ╲ ╱ ╲_ ╲_ ╲_╱ _╱
╱ ╲_╱ _╱ ╲ ╱ _ ╲_╱ _ ╲_ ╲
╲ ╱ _╱ ╱ ╲_╱ ╲ ╲_ ╲_╱ _╱
╱ ╲_╱ _╱ ╲_ ╱ ╲_╱ ╲ ╱ ╲_ ╲
╲_ ╲ ╱ _╱ ╲_╱ ╲ ╱ ╱ ╲ ╲ ╱
╱ ╱ ╲_ ╱ _╱ ╲ ╱ ╱ ╲_ ╲
╲ ╱ ╲_ ╲_╱ ╲_ ╲ ╱ ╲_╱ ╲_ ╲_╱
╱ ╲_╱ _╱ ╲ ╱ _╱ ╲ ╱ ╲_╱ _╱ ╲
╲ ╱ ╲_ _╱ ╲_ ╱ ╱ ╲_ ╲ ╱
╱ _ _╱ _ ╲_╱ ╲_╱ ╱ _╱ ╲
╲ ╱ ╲_╱ _╱ ╲_╱ ╲_ ╲_╱ ╲_ ╲ ╱
╱ ╲ ╱ _╱ ╱ ╱ _╱ ╲_ ╲ ╱ ╲
╲ ╱ ╲_ ╲ ╱ ╲ ╱ _╱ _╱ _╱ ╱
╱ ╲_ ╲ ╱ ╲_ ╲_╱ ╱ _╱ ╲_╱ ╲
╲ ╱ ╱ _╱ ╲_╱ ╲_╱ ╲ ╱ ╲ _╱
╱ _╱ ╲_ _ _ _╱ _ ╲_ ╲
╲_╱ ╲_╱ ╲_╱ ╲_╱ ╲_╱ ╲_╱ ╲_╱ ╲_
以上的蜂窝形迷宫,看起来已经跳出了
一般的矩形模式的框架,
但实际上,我们仍然可以进行转换,使得几乎
可以继续套用矩形
生成的办法
首先数据结构仍然用的二维数组,但是,表示方式需要变化:
0 0 0 0 0 0 0...
0 0 0 0 0 0 0...
0 0 x 0 x 0 x
0 0 0 x 0 x 0
0 0 x 0 x 0 x
0 0 0 x 0 x 0
0 0 x 0 x 0 x
...
每个x对应着
一个六边形,其值有7位有效位,1位访问标志位,6位连通标志位,
它和相邻哪一块连通,就哪个标志位置为1(同时与它相连的那个x对应的位也要
标记上)
有效数据矩阵的边界留了2,以保证不
会发生访问越界的问题,并且访问标志位置上1
#include <stdlib.h>
#include <time.h>
int dx
Y[][2] =
{{-1,-1},
{-2,0},
{-1,1},
{1,
{2,-1}};
if (yzf
Y[y][x]) return 0;
for (int f=rand()%6,i
=0; i<6; ++i,f=(f+d)%6)
}
void Gen(int w,int h)
int rw = w*2+3,rh = h*2+3;
memset(yzfy,sizeof(yzfy)
);
yzf
Y[y][rw-1] = yzf
Y[y][rw-2] = 1;
yzfy
[0][x] = yzf
Y[1][x] = 11;
yzf
Y[rh-1][x] = yzf
Y[rh-2][x] = 1;
dfs(rand()%(w-1)*2+2,rand()%(h-1)*2+2
);
}
int rw = w*2+3,rh = h*2+3;
for (y=1; y<rh-1; ++y)
for (x=2; x<rw-2; x+=2,printf(" "))
printf((yzf
Y[y][x-1]>>3)&1?" ":"╲"
);
printf((yzf
Y[y+1][x]>>2)&1?" ":"_"
);
printf((yzf
Y[y][x+1]>>1)&1?" ":"╱"
);
if (x>2)printf((yzf
Y[y+1][x-1]>>2)&1?" ":"_"
);
printf(yzf
Y[y][x]&2?" ":"╱"
);
printf((yzf
Y[y][x]>>3)&1?" ":"╲"
);
}
大佬总结
以上是大佬教程为你收集整理的不太规则的迷宫生成算法2全部内容,希望文章能够帮你解决不太规则的迷宫生成算法2所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。