--- deliantra/server/random_maps/snake.C 2007/01/18 19:42:10 1.5 +++ deliantra/server/random_maps/snake.C 2008/04/11 21:09:53 1.7 @@ -10,32 +10,20 @@ */ - -#include #include -#include - - - +#include "random_map.h" +#include "rproto.h" -char ** +Maze make_snake_layout (int xsize, int ysize, int options) { int i, j; - /* allocate that array, set it up */ - char **maze = (char **) calloc (sizeof (char *), xsize); - - for (i = 0; i < xsize; i++) - { - maze[i] = (char *) calloc (sizeof (char), ysize); - } + Maze maze (xsize, ysize); /* write the outer walls */ - for (i = 0; i < xsize; i++) - maze[i][0] = maze[i][ysize - 1] = '#'; - for (j = 0; j < ysize; j++) - maze[0][j] = maze[xsize - 1][j] = '#'; + for (i = 0; i < xsize; i++) maze[i][0] = maze[i][ysize - 1] = '#'; + for (j = 0; j < ysize; j++) maze[0][j] = maze[xsize - 1][j] = '#'; /* Bail out if the size is too small to make a snake. */ if (xsize < 8 || ysize < 8) @@ -46,7 +34,7 @@ if (rndm (2)) { /* vertical orientation */ - int n_walls = RANDOM () % ((xsize - 5) / 3) + 1; + int n_walls = rndm (xsize - 5) / 3 + 1; int spacing = xsize / (n_walls + 1); int orientation = 1; @@ -55,25 +43,24 @@ if (orientation) { for (j = 1; j < ysize - 2; j++) - { - maze[i][j] = '#'; - } + maze[i][j] = '#'; + maze[i][j] = 'D'; } else { for (j = 2; j < ysize; j++) - { - maze[i][j] = '#'; - } + maze[i][j] = '#'; + maze[i][1] = 'D'; } + orientation ^= 1; /* toggle the value of orientation */ } } else { /* horizontal orientation */ - int n_walls = RANDOM () % ((ysize - 5) / 3) + 1; + int n_walls = rndm (ysize - 5) / 3 + 1; int spacing = ysize / (n_walls + 1); int orientation = 1; @@ -82,19 +69,18 @@ if (orientation) { for (j = 1; j < xsize - 2; j++) - { - maze[j][i] = '#'; - } + maze[j][i] = '#'; + maze[j][i] = 'D'; } else { for (j = 2; j < xsize; j++) - { - maze[j][i] = '#'; - } + maze[j][i] = '#'; + maze[1][i] = 'D'; } + orientation ^= 1; /* toggle the value of orientation */ } } @@ -111,6 +97,6 @@ maze[xsize - 2][ysize - 2] = '<'; } - return maze; } +