Guest User

Quick hacked up C++ version

a guest
Jul 24th, 2013
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.20 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. #include <vector>
  6. #include <inttypes.h>
  7.  
  8. using std::vector;
  9.  
  10. const uint32_t TILE_DIM = 50;
  11. const uint32_t MIW = 2;
  12. const uint32_t MAXWID = 8;
  13.  
  14. double b_noise = 19.191919191919191919191919191919191919191919191919191919191919191919191919191919;
  15.  
  16. uint32_t nextRandomScaledInt( uint32_t scaleFactor)
  17. {
  18.     b_noise = b_noise * b_noise;
  19.     int i_noise = (int)b_noise;
  20.     b_noise = b_noise - i_noise;
  21.  
  22.     double noise_out = b_noise * (scaleFactor-1);
  23.  
  24.     b_noise = b_noise + 19;
  25.  
  26.     return (uint32_t)noise_out;
  27. }
  28.  
  29. struct Tile
  30. {
  31.     int X;
  32.     int Y;
  33.     int T;
  34. };
  35.  
  36. struct Room
  37. {
  38.     int startX;
  39.     int endX;
  40.     int startY;
  41.     int endY;
  42. //    int W;
  43. //    int H;
  44.     int N;
  45. };
  46.  
  47. struct Lev
  48. {
  49. //    struct Tile ts[2500];
  50. //    struct Room rs[100];
  51. //    int lenrs;
  52.     vector<Tile> ts;
  53.     vector<Room> rs;
  54.     uint32_t lenrs;
  55.     Lev() :
  56.         ts( 2500 ),
  57.         rs( 100 ),
  58.         lenrs( 0 )
  59.     {
  60.     };
  61. };
  62.  
  63. int CheckColl( int startX, int endX, int startY, int endY, vector<Room> & rs, int lenrs )
  64. //int CheckColl( int startX, int endX, int startY, int endY, int w, int h, vector<Room> & rs, int lenrs )
  65. {
  66.     int testStartX( startX - 1 );
  67.     int testEndX( endX + 1 );
  68.     int testStartY( startY - 1 );
  69.     int testEndY( endY + 1 );
  70.     int i = 0;
  71.     for( i = 0; i < lenrs; i++ )
  72.     {
  73.         int & rstartX = rs[i].startX;
  74.         int & rendX = rs[i].endX;
  75.         int & rstartY = rs[i].startY;
  76.         int & rendY = rs[i].endY;
  77. //        int rw = rs[i].W;
  78. //        int rh = rs[i].H;
  79.         int RoomOkay;
  80.  
  81.         if( rendX < testStartX || rstartX > testEndX )
  82. //            if( ( rendX + 1 ) < startX || rstartX > ( endX + 1 ) )
  83. //        if( ( rstartX + rw + 1 ) < startX || rstartX > ( startX + w + 1 ) )
  84.         {
  85.             RoomOkay = 1;
  86.         }
  87.         else if( rendY < testStartY || rstartY > testEndY )
  88. //            else if( ( rendY + 1 ) < startY || rstartY > ( endY + 1 ) )
  89. //        else if( ( rstartY + rh + 1 ) < startY || rstartY > ( startY + h + 1 ) )
  90.         {
  91.             RoomOkay = 1;
  92.         }
  93.         else
  94.         {
  95.             RoomOkay = 0;
  96.         }
  97.         if( RoomOkay == 0 )
  98.             return 1;
  99.     }
  100.     return 0;
  101. }
  102.  
  103. void MakeRoom( vector<Room> & rs, int & lenrs )
  104. {
  105.     //int startX = rand() % TILE_DIM;
  106.     //int startY = rand() % TILE_DIM;
  107.     //int w = rand() % MAXWID + MIW;
  108.     //int h = rand() % MAXWID + MIW;
  109.     int startX = nextRandomScaledInt(TILE_DIM);
  110.     int startY = nextRandomScaledInt( TILE_DIM );
  111.     int w = nextRandomScaledInt( MAXWID ) + MIW;
  112.     int h = nextRandomScaledInt( MAXWID ) + MIW;
  113.     int endX = startX + w;
  114.     int endY = startY + h;
  115.  
  116.     if( endX >= TILE_DIM || endY >= TILE_DIM || startX == 0 || startY == 0 )
  117.         return;
  118.     int nocrash = CheckColl( startX, endX, startY, endY, rs, lenrs );
  119. //    int nocrash = CheckColl( startX, endX, startY, endY, w, h, rs, lenrs );
  120.     if( nocrash == 0 )
  121.     {
  122.         rs[lenrs].startX = startX;
  123.         rs[lenrs].endX = endX;
  124.         rs[lenrs].startY = startY;
  125.         rs[lenrs].endY = endY;
  126. //        rs[lenrs].W = w;
  127. //        rs[lenrs].H = h;
  128.         rs[lenrs].N = lenrs;
  129.         lenrs = lenrs + 1;
  130.     }
  131. }
  132.  
  133. void Room2Tiles( Room & r, vector<Tile> & ts )
  134. {
  135.     const int & startX = r.startX;
  136.     const int & endX = r.endX;
  137.     const int & startY = r.startY;
  138.     const int & endY = r.endY;
  139. //    const int & w = r.W;
  140. //    const int & h = r.H;
  141.     int xi;
  142.     int yi;
  143.     for( xi = startX; xi <= endX; xi++ )
  144.     {
  145.         for( yi = startY; yi <= endY; yi++ )
  146.         {
  147.             int num = yi * TILE_DIM + xi;
  148.             ts[num].T = 1;
  149.         }
  150.     }
  151. }
  152.  
  153. void PrintLev( Lev & l )
  154. {
  155.     int i = 0;
  156.     for( i = 0; i < 2500; i++ )
  157.     {
  158.         printf( "%d", l.ts[i].T );
  159.         if( i % ( TILE_DIM ) == 49 && i != 0 )
  160.             printf( "\n" );
  161.     }
  162. }
  163.  
  164. int main( int argc, char* argv[] )
  165. {
  166.     int v = atoi( argv[1] );
  167.     printf( "The random seed is: %d \n", v );
  168.     srand( v );
  169.  
  170.     char doubleNoiseStarter[4096];
  171.     sprintf( doubleNoiseStarter, "19.8%s", argv[1] );
  172.     b_noise = atof( doubleNoiseStarter );
  173.     printf("Set noise seed to %lf\n", b_noise );
  174.  
  175.     int i;
  176.     int ii;
  177.     vector<Lev> ls(100);
  178.     int lenLS = 0;
  179.     vector<Room> rs( 100 );
  180.  
  181.     vector<Tile> ts( 2500 );
  182.     for( ii = 0; ii < 2500; ii++ )
  183.     {
  184.         ts[ii].X = ii % TILE_DIM;
  185.         ts[ii].Y = ii / TILE_DIM;
  186.     }
  187.  
  188.     for( i = 0; i < 100; i++ )
  189.     {
  190.         int lenrs = 0;
  191.         for( ii = 0; ii < 50000; ii++ )
  192.         {
  193.             MakeRoom( rs, lenrs );
  194.             if( lenrs == 99 )
  195.             {
  196.                 break;
  197.             }
  198.         }
  199.         for( ii = 0; ii < 2500; ii++ )
  200.         {
  201.             ts[ii].T = 0;
  202.         }
  203.         for( ii = 0; ii < lenrs; ii++ )
  204.         {
  205.             Room2Tiles( rs[ii], ts );
  206.         }
  207.  
  208.         ls[lenLS].rs = rs;
  209.         ls[lenLS].ts = ts;
  210.         ls[lenLS].lenrs = lenrs;
  211.         lenLS++;
  212.     }
  213.  
  214.     Lev & templ( ls[0] );
  215.  
  216.     for( i = 1; i < 100; i++ )
  217.     {
  218.         if( ls[i].lenrs > templ.lenrs )
  219.         {
  220.             templ = ls[i];
  221.         }
  222.     }
  223.     PrintLev( templ );
  224.  
  225. }
Add Comment
Please, Sign In to add comment