#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(); }輸出:
┐───┬──────┬────┬──────┬────────┐ ││┌─┘┌┐─┐┌─┘┌──┐│┌────┐│┌┬─┬─┐┌┐│ ││└──┘└─┘├┬┐└─┐│└┘┌─┐┌┘└┘└┐└┐││││ │└┐┌─┐┌─┐│││──┘│┌┬┘│├┘┌┐┌─┘┌┘││││ │┌┘│┌┘│┌┘└┐├┐┌┬┘│└─││┌┤└┘┌─└┐└─┘│ ││┌┘└─┘││┌┘│├┘└┐└──┘││├┬─└──┘│┌┬┤ │││┌───│└┘┌┤└─┐├──┌┬─┘││┌┬──┐││││ │└┴┴─┌─┘┌─┘└─┐│├─┌┘│┌┐│┌┘│┌┐│└┘││ ││┌──┴──│┌──┬┘││┌┤│││└┬┘─┐││└┐┌┘│ │││─┐┌┐┌┘│┌┐│┌┘│││└┘└┐└─┌┘│└┐└┘││ │││┌┴┘││─┘│├─┘┌┘└──┐┌┘┌─┘┌┘┌┤┌─┤│ │├┴┘┌┐│└┐┌┘└┬┐│┌┬─┌┘└─┘┌┐│─┘│└┐└┤ ││┌┐││└┐││┌┐││└┘│┌┘────┘│└┐┌┘─┴─│ │└┘└┘└┐││││└┐└─┐││┌───┐┌┤─┤└───┬┤ │┌────┘│└┐││└┐─┘┌┘└┐┌─┘││┌┘─┬┐┌┘│ ├┘┌─┌──┐┌┘│└┐│┌┐└─┐│└───┘└──┘││┌┤ │││┌┘┌─┘│┌┴─││││┌┐└┘───┬──┐┌┐┌┘││ ││││─┘┌┐┌┘┌┐│││└┘└┐│┌┐┌┘─┬┘││└─┐│ │├┘└┐┌┘│└┐│└┤└┘│┌┐│││││┌┬┘┌┘│┌─┘│ │├──┘└┐┌┐└┘┌┘┌┐└┘││││┌┘││┌┘┌┘│┌┐│ │├┐┌┬─└┘│┌─┘┌┘│┌─┤└┤├┘─┐││┌┘┌┘│││ ││││└───┘└─┐└┐│└─└┐│└─┐││││┌┘─┘││ │││├─────┌─┘─┘└┐┌┐│└─┐└┘││└┘─┬─┘│ ││││┌┐│┌┐└─────┘│└┤─┐││┌┘└───┘│┌┤ │┌┘└┘└┤│└┐┌┐┌┐┌┐└─│┌┤│││┌────┐│││ │├───┐││┌┘│└┘│││┌┐││││├┴┘│┌──┘└┘│ ││──┐└┴┘└───┐│┌┴┘└┘│││└──┤│┌┐┌┐┌┤ │└──┤───────┘├┘─┬──┘│└───┘└┘└┘└┘│ └───┴────────┴──┴───────────────└
沒有留言:
張貼留言