00001
00002
00008 #include <stdio.h>
00009 #include <global.h>
00010 #include <time.h>
00011
00020 char **make_snake_layout(int xsize, int ysize) {
00021 int i, j;
00022
00023
00024 char **maze = (char **)calloc(sizeof(char *), xsize);
00025 for (i = 0; i < xsize; i++) {
00026 maze[i] = (char *)calloc(sizeof(char), ysize);
00027 }
00028
00029
00030 for (i = 0; i < xsize; i++)
00031 maze[i][0] = maze[i][ysize-1] = '#';
00032 for (j = 0; j < ysize; j++)
00033 maze[0][j] = maze[xsize-1][j] = '#';
00034
00035
00036 if (xsize < 8 || ysize < 8)
00037 return maze;
00038
00039
00040
00041
00042 if (RANDOM()%2) {
00043 int n_walls = RANDOM()%((xsize-5)/3)+1;
00044 int spacing = xsize/(n_walls+1);
00045 int orientation = 1;
00046
00047 for (i = spacing; i < xsize-3; i += spacing) {
00048 if (orientation) {
00049 for (j = 1; j < ysize-2; j++) {
00050 maze[i][j] = '#';
00051 }
00052 maze[i][j] = 'D';
00053 } else {
00054 for (j = 2; j < ysize; j++) {
00055 maze[i][j] = '#';
00056 }
00057 maze[i][1] = 'D';
00058 }
00059 orientation ^= 1;
00060 }
00061 } else {
00062 int n_walls = RANDOM()%((ysize-5)/3)+1;
00063 int spacing = ysize/(n_walls+1);
00064 int orientation = 1;
00065
00066 for (i = spacing; i < ysize-3; i += spacing) {
00067 if (orientation) {
00068 for (j = 1; j < xsize-2; j++) {
00069 maze[j][i] = '#';
00070 }
00071 maze[j][i] = 'D';
00072 } else {
00073 for (j = 2; j < xsize; j++) {
00074 maze[j][i] = '#';
00075 }
00076 maze[1][i] = 'D';
00077 }
00078 orientation ^= 1;
00079 }
00080 }
00081
00082
00083 if (RANDOM()%2) {
00084 maze[1][1] = '<';
00085 maze[xsize-2][ysize-2] = '>';
00086 } else {
00087 maze[1][1] = '>';
00088 maze[xsize-2][ysize-2] = '<';
00089 }
00090
00091 return maze;
00092 }