Guest User

Flare random collision map

a guest
May 23rd, 2013
472
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  
  3. 1st: A simple cave map radomly generated. Blank fields are the room, zeros are caverock
  4.  
  5. Array printout:
  6.       0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18
  7.  
  8. 0     0  0  0  0  0  0  0  0  0     0  0  0  0  0  0  0  0  0
  9. 1     0  0  0  0  0  0  0                 0  0  0  0  0  0  0
  10. 2     0  0  0  0  0  0  0                 0  0  0  0  0  0  0
  11. 3     0  0  0  0  0  0  0     0  0  0  0  0  0  0  0  0  0  0
  12. 4     0  0  0  0  0  0  0     0  0  0  0  0  0  0  0  0  0  0
  13. 5     0  0  0  0  0  0              0  0  0  0  0  0  0  0  0
  14. 6     0  0  0  0  0  0              0  0  0  0  0  0  0  0  0
  15. 7     0  0  0  0  0  0              0  0  0  0  0  0  0  0  0
  16. 8     0  0  0  0  0  0              0  0  0  0  0  0  0  0  0
  17. 9     0  0  0  0  0  0     0  0  0  0  0  0  0  0  0  0  0  0
  18. 10    0  0  0  0  0  0     0  0  0  0  0  0  0  0  0  0  0  0
  19. 11    0  0  0  0              0  0  0  0  0  0  0  0  0  0  0
  20. 12    0  0  0  0              0  0  0  0  0  0  0  0  0  0  0
  21. 13    0  0  0  0                 0  0  0  0  0  0  0  0  0  0
  22. 14    0  0  0  0                 0  0  0  0  0  0  0  0  0  0
  23. 15    0  0  0  0     0  0  0  0  0  0  0  0  0  0  0  0  0  0
  24. 16    0  0  0  0     0  0  0  0  0  0  0  0  0  0  0  0  0  0
  25.  
  26. 2nd: It identifies the wall tiles (1) in general
  27.  
  28. Array printout:
  29.       0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18
  30.  
  31. 0     0  0  0  0  0  0  1  1  1     1  1  1  0  0  0  0  0  0
  32. 1     0  0  0  0  0  0  1                 1  0  0  0  0  0  0
  33. 2     0  0  0  0  0  0  1                 1  0  0  0  0  0  0
  34. 3     0  0  0  0  0  0  1     1  1  1  1  1  0  0  0  0  0  0
  35. 4     0  0  0  0  0  1  1     1  1  1  0  0  0  0  0  0  0  0
  36. 5     0  0  0  0  0  1              1  0  0  0  0  0  0  0  0
  37. 6     0  0  0  0  0  1              1  0  0  0  0  0  0  0  0
  38. 7     0  0  0  0  0  1              1  0  0  0  0  0  0  0  0
  39. 8     0  0  0  0  0  1              1  0  0  0  0  0  0  0  0
  40. 9     0  0  0  0  0  1     1  1  1  1  0  0  0  0  0  0  0  0
  41. 10    0  0  0  1  1  1     1  1  0  0  0  0  0  0  0  0  0  0
  42. 11    0  0  0  1              1  0  0  0  0  0  0  0  0  0  0
  43. 12    0  0  0  1              1  1  0  0  0  0  0  0  0  0  0
  44. 13    0  0  0  1                 1  0  0  0  0  0  0  0  0  0
  45. 14    0  0  0  1                 1  0  0  0  0  0  0  0  0  0
  46. 15    0  0  0  1     1  1  1  1  1  0  0  0  0  0  0  0  0  0
  47. 16    0  0  0  1     1  0  0  0  0  0  0  0  0  0  0  0  0  0
  48.  
  49. 3rd: Wall tiles are sorted by their tile type (straight/edges, facing up/down etc). Still a bit buggy though.
  50.  
  51. Array printout:
  52.       0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18
  53.  
  54. 0                       U  w  j     i  w  u
  55. 1                       L                 R
  56. 2                       L                 R
  57. 3                       L     I  W  W  W  d
  58. 4                    U  j     i  w  R
  59. 5                    L              R
  60. 6                    L              R
  61. 7                    L              R
  62. 8                    L              R
  63. 9                    L     I  W  W  d
  64. 10             U  w  j     i  R
  65. 11             L              R
  66. 12             L              i  u
  67. 13             L                 R
  68. 14             L                 R
  69. 15             L     I  W  W  W  d
  70. 16             D     R
  71. */
  72. //code starts here:
  73.  
  74. #include <iostream>
  75. #include <stdlib.h>     /* srand, rand */
  76. #include <time.h>       /* time */
  77. using namespace std;
  78.  
  79. const int MaxX=19;
  80. const int MaxY=17;
  81.  
  82.  
  83. void printMyArray(char text[MaxX][MaxY])
  84. {
  85.     int x, y;
  86.     cout << "Array printout:";
  87.     cout << endl;
  88.     // Axis descr
  89.     cout << "      0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18" << endl;
  90.     cout << endl;
  91.     for (y=0; y<MaxY; y++)
  92.     {
  93.         if (y<10)
  94.             cout << y << "   ";
  95.         else
  96.             cout << y << "  ";
  97.        
  98.         // MapOne Anzeige
  99.         for (x=0; x<MaxX; x++)
  100.         {
  101.             cout << "  " << text[x][y];
  102.         }
  103.         cout << endl;
  104.     }
  105.     cout << endl;
  106. }
  107.  
  108. int main()
  109. {
  110.     char MapGen[MaxX][MaxY];
  111.     char MapOne[MaxX][MaxY];
  112.     char MapTwo[MaxX][MaxY];
  113.     int x, y;
  114.     int tunnelsize;
  115.     int varyStart;
  116.     int i, j;
  117.     int beginEdit;
  118.     int start;
  119.     char roomSpace = ' ';
  120.    
  121.     /* initialize random seed: */
  122.     srand (time(NULL));
  123.  
  124.     // fill Maps
  125.     for (y=0; y<MaxY; y++)
  126.     {
  127.         for (x=0; x<MaxX; x++)
  128.         {
  129.             MapGen[x][y] = '0';
  130.             MapOne[x][y] = '0';
  131.         }
  132.     }
  133.    
  134.     // Legend:
  135.     // 1 = Wall
  136.     // " " = Room
  137.     // 0 = Void
  138.    
  139.     // ======================================
  140.     // Simple cave generation on my MapGen
  141.     // ======================================  
  142.     MapGen[9][0] = roomSpace;
  143.  
  144.     for (y=1; y<MaxY-2; y++)
  145.     {
  146.         beginEdit=0;
  147.             for (x=0; x<MaxX; x++)
  148.             {
  149.                 // connect to previous cave space
  150.                 if(MapGen[x][y-1]==roomSpace && beginEdit==0)
  151.                 {
  152.                     tunnelsize = rand() % 5;
  153.                     cout << tunnelsize;
  154.                     varyStart = rand() % 5;
  155.                     if(tunnelsize>varyStart)
  156.                         start=x-tunnelsize+varyStart;
  157.                     else
  158.                         start=x;
  159.                    
  160.                     for (i=0; i<tunnelsize+1; i++)
  161.                         {
  162.                             if ( start+i <MaxX-1 && start+i > 1)
  163.                             {
  164.                                 MapGen[start+i][y]= roomSpace;
  165.                                 MapGen[start+i][y+1]= roomSpace;
  166.                             }
  167.                         }
  168.                     y=y+1;
  169.                     beginEdit=1;
  170.                 }
  171.             }
  172.     }
  173.    
  174.     // y==MaxY
  175.     for (x=0; x<MaxX; x++)
  176.         {
  177.             if(MapGen[x][MaxY-3]==roomSpace)
  178.                 {
  179.                     MapGen[x][MaxY-2]= roomSpace;
  180.                     MapGen[x][MaxY-1]= roomSpace;
  181.                     break;
  182.                 }
  183.         }
  184.  
  185.    
  186.     cout << "MapGen" << endl;
  187.     printMyArray(MapGen);
  188.    
  189.     // MapGen gets some Walls
  190.     for (y=0; y<MaxY; y++)
  191.     {
  192.         for (x=0; x<MaxX; x++)
  193.         {
  194.             // First line (careful about <0 )
  195.             if( MapGen[x][y]=='0' && y==0 )
  196.             {
  197.                 if ( MapGen[x+1][y]==roomSpace ||  MapGen[x-1][y]==roomSpace ||  MapGen[x][y+1]==roomSpace )
  198.                         MapOne[x][y]='1';
  199.                 if ( MapGen[x+1][y+1]==roomSpace || MapGen[x-1][y+1]==roomSpace )
  200.                         MapOne[x][y]='1';
  201.             }
  202.             // last line (careful about >MaxY )
  203.             else if( MapGen[x][y]=='0' && y==MaxY-1 )
  204.             {
  205.                 if ( MapGen[x+1][y]==roomSpace || MapGen[x-1][y]==roomSpace || MapGen[x][y-1]==roomSpace)
  206.                         MapOne[x][y]='1';
  207.                 if ( MapGen[x-1][y-1]==roomSpace ||  MapGen[x+1][y-1]==roomSpace)
  208.                         MapOne[x][y]='1';
  209.             }
  210.             // all other lines / Walls
  211.             else if( MapGen[x][y]=='0' && y!=MaxY && y!=0 )
  212.             {
  213.                 if ( MapGen[x+1][y]==roomSpace ||  MapGen[x-1][y]==roomSpace ||  MapGen[x][y+1]==roomSpace ||  MapGen[x][y-1]==roomSpace)
  214.                         MapOne[x][y]='1';
  215.                 if ( MapGen[x+1][y+1]==roomSpace ||  MapGen[x-1][y-1]==roomSpace ||  MapGen[x-1][y+1]==roomSpace ||  MapGen[x+1][y-1]==roomSpace)
  216.                         MapOne[x][y]='1';
  217.             }
  218.             if(MapGen[x][y]==roomSpace)
  219.                 MapOne[x][y]=roomSpace;
  220.         }
  221.     }
  222.    
  223.     cout << "MapOne" << endl;
  224.     printMyArray(MapOne);
  225.  
  226.    
  227.     // ======================================
  228.     // Change MapOne to Wall Map aka MapTwo
  229.     // ======================================  
  230.     for (y=0; y<MaxY; y++)
  231.     {
  232.         for (x=0; x<MaxX; x++)
  233.         {
  234.             if(MapOne[x][y]=='1')
  235.             {
  236.                 // Wall left (left is void)
  237.                 if(MapOne[x-1][y]=='0')
  238.                 {
  239.                     //Wall Edge left up
  240.                     if(MapOne[x][y-1]=='0')
  241.                         MapTwo[x][y]='U';
  242.                     // Wall Edge left down
  243.                     if(MapOne[x][y+1]=='0')
  244.                         MapTwo[x][y]='D';
  245.                     // Wall left
  246.                     if(MapOne[x][y+1]!='0' && MapOne[x][y-1]!='0')
  247.                         MapTwo[x][y]='L';
  248.                 }
  249.  
  250.                 // Wall right (right is void)
  251.                 if(MapOne[x+1][y]=='0')
  252.                 {
  253.                     //Wall Edge right up
  254.                     if(MapOne[x][y-1]=='0')
  255.                         MapTwo[x][y]='u';
  256.                     // Wall Edge right down
  257.                     if(MapOne[x][y+1]=='0')
  258.                         MapTwo[x][y]='d';
  259.                     // Wall right
  260.                     if(MapOne[x][y+1]!='0' && MapOne[x][y-1]!='0')
  261.                         MapTwo[x][y]='R';
  262.                 }
  263.                 // Wall up (down is room, left right is wall)
  264.                 if( MapOne[x][y+1]==roomSpace && MapOne[x+1][y]=='1' && MapOne[x-1][y]=='1' )
  265.                     MapTwo[x][y]='w';
  266.                 // Wall down (up is room, left right is wall)
  267.                 if( MapOne[x][y-1]==roomSpace && MapOne[x+1][y]=='1' && MapOne[x-1][y]=='1' )
  268.                     MapTwo[x][y]='W';
  269.  
  270.                 // Wall INVERTED Edge left up
  271.                 if( MapOne[x-1][y-1]==roomSpace && MapOne[x][y-1]==roomSpace && MapOne[x-1][y]==roomSpace )
  272.                     MapTwo[x][y]='I';
  273.                 // Wall INVERTED Edge left down
  274.                 if( MapOne[x-1][y+1]==roomSpace && MapOne[x][y+1]==roomSpace && MapOne[x-1][y]==roomSpace )
  275.                     MapTwo[x][y]='i';
  276.                 // Wall INVERTED Edge right up
  277.                 if( MapOne[x+1][y-1]==roomSpace && MapOne[x][y-1]==roomSpace && MapOne[x+1][y]==roomSpace )
  278.                     MapTwo[x][y]='J';
  279.                 // Wall INVERTED Edge right down
  280.                 if( MapOne[x+1][y+1]==roomSpace && MapOne[x][y+1]==roomSpace && MapOne[x+1][y]==roomSpace )
  281.                     MapTwo[x][y]='j';
  282.             }
  283.             else
  284.             {
  285.                 MapTwo[x][y]=' ';
  286.             }
  287.         }
  288.     }
  289.  
  290.     // MapTwo Anzeige
  291.     cout << "MapTwo" << endl;
  292.     printMyArray(MapTwo);
  293.     return 0;
  294. }
RAW Paste Data