Advertisement
Geralt1001

Untitled

Feb 6th, 2016
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.21 KB | None | 0 0
  1. char** createLab(int n,int clients)
  2. {
  3.     struct room
  4.     {
  5.         bool left_wall;
  6.         bool top_wall;
  7.         bool visited;
  8.     };
  9.     int size_lab=n;
  10.     bool rand_start=0;
  11.    
  12.    
  13.     room labyrinth[size_lab][size_lab];
  14.  
  15.     int i,j;
  16.    
  17.     for(i=0;i<size_lab;i++)
  18.     {
  19.         for(j=0;j<size_lab;j++)
  20.         {
  21.             labyrinth[i][j].left_wall=1;
  22.             labyrinth[i][j].top_wall=1;
  23.             labyrinth[i][j].visited=0;
  24.         }
  25.     }
  26.    
  27.     int x_hall,y_hall,hall_size,max_hall_size;
  28.  
  29.     int x_start=0;
  30.     int y_start=0;
  31.     if (!rand_start)
  32.     {
  33.         x_start=(rand() % size_lab)+0;
  34.         y_start=(rand() % size_lab)+0;
  35.         rand_start=1;
  36.     }
  37.     int direction=0;
  38.     bool koniec=1;
  39.     while(koniec==1)
  40.     {
  41.         if(labyrinth[x_start][y_start].visited==0)
  42.             labyrinth[x_start][y_start].visited=1;
  43.        
  44.         direction=(rand()%4)+0;
  45.         if (direction==0)
  46.         {
  47.             if (y_start<size_lab-1){
  48.                 if (labyrinth[x_start][y_start+1].visited==0)
  49.                     labyrinth[x_start][y_start+1].top_wall=0;
  50.                 y_start++;
  51.             }  
  52.         }
  53.         else if (direction==1)
  54.         {
  55.             if (y_start>0)
  56.             {
  57.                 if (labyrinth[x_start][y_start-1].visited==0)
  58.                     labyrinth[x_start][y_start].top_wall=0;
  59.                 y_start--;
  60.             }
  61.         }
  62.         else if (direction==2)
  63.         {
  64.             if (x_start>0)
  65.             {
  66.                 if (labyrinth[x_start-1][y_start].visited==0)
  67.                     labyrinth[x_start][y_start].left_wall=0;
  68.                 x_start--;
  69.             }
  70.         }
  71.         else if(direction==3)
  72.         {
  73.             if (x_start<size_lab-1)
  74.             {
  75.                 if (labyrinth[x_start+1][y_start].visited==0)
  76.                     labyrinth[x_start+1][y_start].left_wall=0;
  77.                 x_start++;
  78.             }
  79.         }
  80.    
  81.         for(int i=0;i<size_lab;i++)
  82.         {
  83.             for(int j=0;j<size_lab;j++)
  84.             {
  85.                 if (labyrinth[i][j].visited==0)
  86.                 {
  87.                     koniec=1;
  88.                     break;
  89.                 }
  90.                 else
  91.                     koniec=0;
  92.             }
  93.             if(koniec==1)
  94.                 break;
  95.         }
  96.     }
  97.    
  98.     char perfect [2*size_lab+1][2*size_lab+1];
  99.    
  100.     for(int i=0;i<2*size_lab+1;i++)
  101.     {
  102.         for(int j=0;j<2*size_lab+1;j++)
  103.         {
  104.             if ((i==2*size_lab))
  105.                 perfect[j][i]='1';
  106.             else if ((j==2*size_lab))
  107.                 perfect[j][i]='1';
  108.             else if ((i%2==1)&&(j%2==1))
  109.                 perfect[j][i]='0';
  110.             else if ((i%2==0)&&(j%2==1))
  111.             {
  112.                 if (labyrinth[j/2][i/2].top_wall==0)
  113.                     perfect[j][i]='0';
  114.                 else
  115.                     perfect[j][i]='1';
  116.             }
  117.             else if ((i%2==1)&&(j%2==0))
  118.             {
  119.                 if (labyrinth[j/2][i/2].left_wall==0)
  120.                     perfect[j][i]='0';
  121.                 else
  122.                     perfect[j][i]='1';
  123.             }
  124.             else if ((i%2==0)&&(j%2==0))
  125.                 perfect[j][i]='1';
  126.         }
  127.     }
  128.    
  129.     max_hall_size=size_lab/3;
  130.     int copies_count=size_lab/3;
  131.     for (int k=0;k<copies_count;k++)
  132.     {
  133.         x_hall=(rand() % (2*size_lab-max_hall_size)) + (max_hall_size/2+1);
  134.         y_hall=(rand() % (2*size_lab-max_hall_size)) + (max_hall_size/2+1);
  135.         hall_size=(rand() % (max_hall_size-1)) + 2;
  136.  
  137.         for( i=(x_hall-(hall_size/2));i<(x_hall+hall_size/2+1);i++)
  138.         {
  139.             for(j=(y_hall-(hall_size/2));j<(y_hall+hall_size/2+1);j++)
  140.                 perfect[i][j]='0';
  141.         }
  142.     }
  143.                
  144.     int row[copies_count];
  145.     int column[copies_count];
  146.     for(int k=0;k<copies_count;k++)
  147.     {
  148.         row[k]=(rand() % (2*size_lab-1)) + 1;
  149.         column[k]=(rand() % (2*size_lab-1)) + 1;
  150.     }
  151.     char perfect_with_halls [2*size_lab+1][2*size_lab+1+copies_count];
  152.     int displacement=0;
  153.     int copies;
  154.     for(int j=0;j<2*size_lab+1;j++)
  155.     {
  156.         copies=1;
  157.         for(int k=0;k<copies_count;k++)
  158.             if (column[k]==j)
  159.                 copies++;
  160.            
  161.         for(int l=0;l<copies;l++)
  162.         {
  163.             if (l>0)
  164.                 displacement++;
  165.             for(int i=0;i<2*size_lab+1;i++)
  166.                 perfect_with_halls[i][j+displacement]=perfect[i][j];
  167.         }
  168.     }  
  169.                    
  170.     displacement=0;
  171.     copies=1;
  172.     char ** true_labyrinth = NULL;
  173.    
  174.     true_labyrinth=(char**)calloc(2*size_lab+2, sizeof(char*));
  175.    
  176.     for(int i=0;i<2*size_lab+2;i++)
  177.     {
  178.         true_labyrinth[i]=(char*)calloc(2*size_lab+2,sizeof(char));
  179.     }
  180.  
  181.    
  182.     for(int i=0;i<2*size_lab+1+copies_count;i++)
  183.     {
  184.         copies=1;
  185.             for(int k=0;k<copies_count;k++)
  186.             {
  187.                 if (row[k]==i)
  188.                     copies++;
  189.             }
  190.             for(int l=0;l<copies;l++)
  191.             {
  192.                 if (l>0)
  193.                     displacement++;
  194.                
  195.                 for(int j=0;j<2*size_lab+1+copies_count;j++)
  196.                     true_labyrinth[i+displacement][j]=perfect_with_halls[i][j];
  197.  
  198.             }
  199.     }
  200.                
  201.     for(int i=0;i<2*size_lab+1+copies_count;i++)
  202.     {
  203.         for(int j=0;j<2*size_lab+1+copies_count;j++)
  204.         {
  205.             if (true_labyrinth[j][i]=='0')
  206.                 printf(" ");
  207.             if (true_labyrinth[j][i]=='1')
  208.                 printf("X");
  209.         }
  210.         printf("\n");
  211.     }
  212.     printf("\n");
  213.    
  214.     return true_labyrinth;
  215. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement