[ create a new paste ] login | about

Link: http://codepad.org/J32F752O    [ raw code | output | fork ]

C, pasted on Nov 16:
#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;
}


Output:

Devide point = 9 8
####################
#       #          #
#       #          #
#       #          #
#                  #
#       #          #
#       #          #
#       #          #
#       #          #
## ########### #####
#       #          #
#       #          #
#       #          #
#       #          #
#       #          #
#       #          #
#       #          #
#       #          #
#       #          #
####################

Devide point = 6 4
####################
#   #   #          #
#       #          #
#   #   #          #
#   #              #
#   #   #          #
### ## ##          #
#   #   #          #
#   #   #          #
## ########### #####
#       #          #
#       #          #
#       #          #
#       #          #
#       #          #
#       #          #
#       #          #
#       #          #
#       #          #
####################

Devide point = 4 2
####################
# # #   #          #
#       #          #
# # #   #          #
# ###              #
#   #   #          #
### ## ##          #
#   #   #          #
#   #   #          #
## ########### #####
#       #          #
#       #          #
#       #          #
#       #          #
#       #          #
#       #          #
#       #          #
#       #          #
#       #          #
####################

Devide point = 3 6
####################
# # #   #          #
#     # #          #
# # # ###          #
# ### #            #
#   #   #          #
### ## ##          #
#   #   #          #
#   #   #          #
## ########### #####
#       #          #
#       #          #
#       #          #
#       #          #
#       #          #
#       #          #
#       #          #
#       #          #
#       #          #
####################

Devide point = 13 2
####################
# # #   #          #
#     # #          #
# # # ###          #
# ### #            #
#   #   #          #
### ## ##          #
#   #   #          #
#   #   #          #
## ########### #####
#       #          #
#       #          #
# #     #          #
### #####          #
# #     #          #
# #     #          #
#       #          #
# #     #          #
# #     #          #
####################

Devide point = 11 4
####################
# # #   #          #
#     # #          #
# # # ###          #
# ### #            #
#   #   #          #
### ## ##          #
#   #   #          #
#   #   #          #
## ########### #####
#       #          #
#   # ###          #
# #     #          #
### #####          #
# #     #          #
# #     #          #
#       #          #
# #     #          #
# #     #          #
####################

Devide point = 16 5
####################
# # #   #          #
#     # #          #
# # # ###          #
# ### #            #
#   #   #          #
### ## ##          #
#   #   #          #
#   #   #          #
## ########### #####
#       #          #
#   # ###          #
# #     #          #
### #####          #
# #     #          #
# #  #  #          #
#    ####          #
# #  #  #          #
# #     #          #
####################

Devide point = 5 17
####################
# # #   #        # #
#     # #        # #
# # # ###        # #
# ### #          # #
#   #   ####### ## #
### ## ##        # #
#   #   #          #
#   #   #        # #
## ########### #####
#       #          #
#   # ###          #
# #     #          #
### #####          #
# #     #          #
# #  #  #          #
#    ####          #
# #  #  #          #
# #     #          #
####################

Devide point = 3 10
####################
# # #   #        # #
#     # # #      # #
# # # ### ### #### #
# ### #   #      # #
#   #   ####### ## #
### ## ##        # #
#   #   #          #
#   #   #        # #
## ########### #####
#       #          #
#   # ###          #
# #     #          #
### #####          #
# #     #          #
# #  #  #          #
#    ####          #
# #  #  #          #
# #     #          #
####################

Devide point = 7 13
####################
# # #   #        # #
#     # # #      # #
# # # ### ### #### #
# ### #   #      # #
#   #   ####### ## #
### ## ##        # #
#   #   #######    #
#   #   #        # #
## ########### #####
#       #          #
#   # ###          #
# #     #          #
### #####          #
# #     #          #
# #  #  #          #
#    ####          #
# #  #  #          #
# #     #          #
####################

Devide point = 13 15
####################
# # #   #        # #
#     # # #      # #
# # # ### ### #### #
# ### #   #      # #
#   #   ####### ## #
### ## ##        # #
#   #   #######    #
#   #   #        # #
## ########### #####
#       #      #   #
#   # ###      #   #
# #     #      #   #
### ####### ###### #
# #     #      #   #
# #  #  #      #   #
#    ####          #
# #  #  #      #   #
# #     #      #   #
####################

Devide point = 11 11
####################
# # #   #        # #
#     # # #      # #
# # # ### ### #### #
# ### #   #      # #
#   #   ####### ## #
### ## ##        # #
#   #   #######    #
#   #   #        # #
## ########### #####
#       #      #   #
#   # ### ## ###   #
# #     #      #   #
### ####### ###### #
# #     #      #   #
# #  #  #      #   #
#    ####          #
# #  #  #      #   #
# #     #      #   #
####################

Devide point = 15 11
####################
# # #   #        # #
#     # # #      # #
# # # ### ### #### #
# ### #   #      # #
#   #   ####### ## #
### ## ##        # #
#   #   #######    #
#   #   #        # #
## ########### #####
#       #      #   #
#   # ### ## ###   #
# #     #      #   #
### ####### ###### #
# #     #      #   #
# #  #  ###### #   #
#    ####  #       #
# #  #  #  #   #   #
# #     #      #   #
####################

Devide point = 17 13
####################
# # #   #        # #
#     # # #      # #
# # # ### ### #### #
# ### #   #      # #
#   #   ####### ## #
### ## ##        # #
#   #   #######    #
#   #   #        # #
## ########### #####
#       #      #   #
#   # ### ## ###   #
# #     #      #   #
### ####### ###### #
# #     #      #   #
# #  #  ###### #   #
#    ####  #       #
# #  #  #  # ###   #
# #     #      #   #
####################

Devide point = 11 17
####################
# # #   #        # #
#     # # #      # #
# # # ### ### #### #
# ### #   #      # #
#   #   ####### ## #
### ## ##        # #
#   #   #######    #
#   #   #        # #
## ########### #####
#       #      #   #
#   # ### ## ### ###
# #     #      #   #
### ####### ###### #
# #     #      #   #
# #  #  ###### #   #
#    ####  #       #
# #  #  #  # ###   #
# #     #      #   #
####################

Devide point = 15 17
####################
# # #   #        # #
#     # # #      # #
# # # ### ### #### #
# ### #   #      # #
#   #   ####### ## #
### ## ##        # #
#   #   #######    #
#   #   #        # #
## ########### #####
#       #      #   #
#   # ### ## ### ###
# #     #      #   #
### ####### ###### #
# #     #      # # #
# #  #  ###### # # #
#    ####  #       #
# #  #  #  # ### # #
# #     #      # # #
####################


Create a new paste based on this one


Comments: