31 #define RANDOM_OPTIONS 0 32 #define REGULAR_SPIRAL 1 35 #define MAX_SPIRAL_OPT 8 41 #define MIN(x, y) (((x) < (y)) ? (x) : (y)) 44 #define MAX(x, y) (((x) < (y)) ? (y) : (x)) 47 #define MAX_FINE .454545 49 extern int surround_check(
char **maze,
int i,
int j,
int xsize,
int ysize);
73 char **maze = (
char **)calloc(
sizeof(
char *), xsize);
75 for (i = 0; i < xsize; i++) {
76 maze[i] = (
char *)calloc(
sizeof(
char), ysize);
80 for (i = 0; i < xsize; i++)
81 for (j = 0; j < ysize; j++) {
101 if (
RANDOM()%2 && (option®ULAR_SPIRAL)) {
112 float pitch = (
RANDOM()%5)/10.+10./22.;
114 xscale = yscale = pitch;
117 if ((option&FIT_SPIRAL) && (xsize != ysize)) {
119 xscale *= (float)xsize/(
float)ysize;
121 yscale *= (float)ysize/(
float)xsize;
125 if (option®ULAR_SPIRAL) {
126 float scale =
MIN(xscale, yscale);
128 xscale = yscale = scale;
132 while ((fabsf(x) < SizeX) && (fabsf(y) < SizeY)) {
133 x = parm*cos(parm)*xscale;
134 y = parm*sin(parm)*yscale;
135 maze[(int)(ic+x)][(int)(jc+y)] =
'\0';
139 maze[(int)(ic+x+0.5)][(int)(jc+y+0.5)] =
'<';
142 maze[ic][jc+1] =
'>';
160 int i, j, ic = xsize/2, jc = ysize/2;
165 for (i = ic-1, j = jc; i > 0 && layout[i][j] ==
'#'; i--) {
169 for (i = ic+1, j = jc; i < xsize-1 && layout[i][j] ==
'#'; i++) {
177 for (i = ic, j = jc-1; j > 0 && layout[i][j] ==
'#'; j--) {
181 for (i = ic, j = jc+1; j < ysize-1 && layout[i][j] ==
'#'; j++) {
188 layout[ic][jc/2] = 0;
189 layout[ic/2][jc] = 0;
190 layout[ic][jc/2+jc] = 0;
191 layout[ic/2+ic][jc] = 0;
192 for (i = ic-1, j = jc/2; i > 0 && layout[i][j] ==
'#'; i--) {
197 for (i = ic+1, j = jc/2; i < xsize-1 && layout[i][j] ==
'#'; i++) {
202 for (i = ic/2, j = jc-1; j > 0 && layout[i][j] ==
'#'; j--) {
207 for (i = ic/2, j = jc+1; j < ysize-1 && layout[i][j] ==
'#'; j++) {
214 for (i = 0; i < xsize; i++)
215 for (j = 0; j < ysize; j++) {
216 if (layout[i][j] ==
'D') {
218 if (si != 3 && si != 12) {
char ** map_gen_spiral(int xsize, int ysize, int option, int _unused_layers)
void connect_spirals(int xsize, int ysize, int sym, char **layout)
int surround_check(char **maze, int i, int j, int xsize, int ysize)