codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#include <stdio.h> #include <stdlib.h> #define SizeX 20 #define SizeY 20 #define myrnd(f,t) rand()%((t)-(f)+1)+(f) typedef struct { int x, y; } point; int map[SizeX][SizeY],i,j; //prototype void pp(); void Devide(int, int, int, int); void pp() { for ( i = 0; i < SizeX; ++i) { for ( j = 0; j < SizeY; ++j) putchar(map[i][j] ? '#' : ' '); puts(""); } } void Devide(int x1, int y1, int x2, int y2) { //no devide if area is small if ((x2 - x1 < 4) || (y2 - y1 < 4)) return; //make new center int xc = myrnd(x1 + 2, x2 - 2); int yc = myrnd(y1 + 2, y2 - 2); printf("\nDevide point = %d %d\n", xc,yc); //make wall for ( i = x1 + 1 + (map[x1][yc] == 0); i < x2 - (map[x2][yc] == 0); ++i) map[i][yc] = 1; for ( i = y1 + 1 + (map[xc][y1] == 0); i < y2 - (map[xc][y2] == 0); ++i) map[xc][i] = 1; //make hole { int i = myrnd(1, 4); if (i != 1) map[myrnd(x1 + 1, xc - 1)][yc] = 0; if (i != 2) map[myrnd(xc + 1, x2 - 1)][yc] = 0; if (i != 3) map[xc][myrnd(y1 + 1, yc - 1)] = 0; if (i != 4) map[xc][myrnd(yc + 1, y2 - 1)] = 0; } pp(); //new devide Devide(x1, y1, xc, yc); Devide(xc, y1, x2, yc); Devide(x1, yc, xc, y2); Devide(xc, yc, x2, y2); } int main() { int i,j; //map initialize for ( i = 0; i < SizeX; ++i) for ( j = 0; j < SizeY; ++j) map[i][j] = (!i) || (i == SizeX - 1) || (!j) || (j == SizeY - 1); Devide(0, 0, SizeX - 1, SizeY - 1); return 0; }
Private
[
?
]
Run code
Submit