#include <stdio.h>
#include <time.h>
enum {U=1, L=2, R=4, D=8};
int w=32, h=28;
char mz[256][256];
char inv[4] = {3,2,1,0};
char yd[4] = {-1,0,0,1};
char xd[4] = {0,-1,1,0};
char *cell = " │─┘─└─┴││┐┤┌├┬└"; //內部牆壁類型
void link (int x, int y)
{
int i=0, d, dir = rand()%4; //連結牆壁
do{
d = (dir+i) & 3;
if ((mz[x][y] & 1<<d) || //若此方向已選過
mz [x + xd[d]][y + yd[d]]) { //或此方位已有牆壁
i++; continue; //便選擇其他方向
}
mz[x][y] |= 1<<d; //記錄所選方向
x += xd[d]; //朝此方向移動
y += yd[d];
if (x<0 || x>w || y<0 || y>h) break; //若出界則返回
mz[x][y] |= 1<<inv[d]; //紀錄舊點連結方向
dir = rand()%4; i = 0; //隨機選擇方向
}
while (i < 4);
}
void main ()
{
srand (time(0));
int i,j, u=0, r=w, d=h, l=0;
for (i=0;i<=w*h;i++) mz[0][i] = 0; //設定cell的允許方向
for (i=0;i<=w;i++) {mz[i][0] |= L+R; mz[i][h] |= L+R;}
for (j=0;j<=h;j++) {mz[0][j] |= U+D; mz[w][j] |= U+D;}
while (u<d && l<r) { //對每個位置下種子
for (i=l; i<=r; i++) link (i,u); u++; //填充迷宮內部
for (i=u; i<=d; i++) link (r,i); r--;
for (i=r; i>=l; i--) link (i,d); d--;
for (i=d; i>=u; i--) link (l,i); l++;
}
for (i=0; i<=h; i++, puts("")) //印出迷宮
for (j=0; j<=w; j++) {
r = mz[j][i]*2;
if (j==0 && r==22) r-=4;
if (i==0) r==14? r-=6: r==30? r=20:0;
if ((i==h || j==w) && (r==26 || r==28)) r-=24;
printf("%c%c", cell[r], cell[r+1]);
}
getch();
}
輸出:
┐───┬──────┬────┬──────┬────────┐
││┌─┘┌┐─┐┌─┘┌──┐│┌────┐│┌┬─┬─┐┌┐│
││└──┘└─┘├┬┐└─┐│└┘┌─┐┌┘└┘└┐└┐││││
│└┐┌─┐┌─┐│││──┘│┌┬┘│├┘┌┐┌─┘┌┘││││
│┌┘│┌┘│┌┘└┐├┐┌┬┘│└─││┌┤└┘┌─└┐└─┘│
││┌┘└─┘││┌┘│├┘└┐└──┘││├┬─└──┘│┌┬┤
│││┌───│└┘┌┤└─┐├──┌┬─┘││┌┬──┐││││
│└┴┴─┌─┘┌─┘└─┐│├─┌┘│┌┐│┌┘│┌┐│└┘││
││┌──┴──│┌──┬┘││┌┤│││└┬┘─┐││└┐┌┘│
│││─┐┌┐┌┘│┌┐│┌┘│││└┘└┐└─┌┘│└┐└┘││
│││┌┴┘││─┘│├─┘┌┘└──┐┌┘┌─┘┌┘┌┤┌─┤│
│├┴┘┌┐│└┐┌┘└┬┐│┌┬─┌┘└─┘┌┐│─┘│└┐└┤
││┌┐││└┐││┌┐││└┘│┌┘────┘│└┐┌┘─┴─│
│└┘└┘└┐││││└┐└─┐││┌───┐┌┤─┤└───┬┤
│┌────┘│└┐││└┐─┘┌┘└┐┌─┘││┌┘─┬┐┌┘│
├┘┌─┌──┐┌┘│└┐│┌┐└─┐│└───┘└──┘││┌┤
│││┌┘┌─┘│┌┴─││││┌┐└┘───┬──┐┌┐┌┘││
││││─┘┌┐┌┘┌┐│││└┘└┐│┌┐┌┘─┬┘││└─┐│
│├┘└┐┌┘│└┐│└┤└┘│┌┐│││││┌┬┘┌┘│┌─┘│
│├──┘└┐┌┐└┘┌┘┌┐└┘││││┌┘││┌┘┌┘│┌┐│
│├┐┌┬─└┘│┌─┘┌┘│┌─┤└┤├┘─┐││┌┘┌┘│││
││││└───┘└─┐└┐│└─└┐│└─┐││││┌┘─┘││
│││├─────┌─┘─┘└┐┌┐│└─┐└┘││└┘─┬─┘│
││││┌┐│┌┐└─────┘│└┤─┐││┌┘└───┘│┌┤
│┌┘└┘└┤│└┐┌┐┌┐┌┐└─│┌┤│││┌────┐│││
│├───┐││┌┘│└┘│││┌┐││││├┴┘│┌──┘└┘│
││──┐└┴┘└───┐│┌┴┘└┘│││└──┤│┌┐┌┐┌┤
│└──┤───────┘├┘─┬──┘│└───┘└┘└┘└┘│
└───┴────────┴──┴───────────────└
沒有留言:
張貼留言