Advertisement
desdemona

room.cs

Oct 14th, 2014
405
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.84 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace MapeczkiKomorkowe
  8. {
  9.     class Room
  10.     {
  11.         int[,] room;
  12.         int n, s, l, r;
  13.  
  14.         int sizeX, sizeY;
  15.         private int generations;
  16.         private Random random;
  17.         private int sfp;
  18.  
  19.  
  20.         List<List<IntVector2>> nFreeTiles = new List<List<IntVector2>>();
  21.         List<List<IntVector2>> sFreeTiles = new List<List<IntVector2>>();
  22.  
  23.         List<List<IntVector2>> lFreeTiles = new List<List<IntVector2>>();
  24.         List<List<IntVector2>> rFreeTiles = new List<List<IntVector2>>();
  25.  
  26.         public Room(int sizeX, int sizeY, int north, int south, int left, int right, Random rrandom, int startingFloorsPrc)
  27.         {
  28.             this.sizeX = sizeX;
  29.             this.sizeY = sizeY;
  30.  
  31.             room = new int[sizeX, sizeY];
  32.             n = north;
  33.             s = south;
  34.             l = left;
  35.             r = right;
  36.  
  37.             sfp = startingFloorsPrc;
  38.  
  39.             random = rrandom;
  40.         }
  41.  
  42.         private void FillWithVoid()
  43.         {
  44.             for (int i = 0; i < sizeX; i++)
  45.             {
  46.                 for (int j = 0; j < sizeY; j++)
  47.                 {
  48.                     room[i, j] = Tile.VOID;
  49.                 }
  50.             }
  51.         }
  52.  
  53.         private void FillRandomly()
  54.         {
  55.             for (int x = 1; x < sizeX-1; x++)
  56.             {
  57.                 for (int y = 1; y < sizeY-1; y++)
  58.                 {
  59.                     if (random.Next(0, 101) <= sfp)
  60.                         room[x, y] = Tile.FLOOR;
  61.                 }
  62.             }
  63.         }
  64.  
  65.         private void CalculateDoors()
  66.         {
  67.             int sx = sizeX;
  68.             int sy = sizeY;
  69.  
  70.             while (sx % 4 != 0)
  71.             {
  72.                 sx -= 2;
  73.             }
  74.             while (sy % 4 != 0)
  75.             {
  76.                 sy -= 2;
  77.             }
  78.             int passageSizeX = sx/4;
  79.             int passageSizeY = sy/4;
  80.  
  81.             int shiftX = sizeX - sx;
  82.             int shiftY = sizeY = sy;
  83.  
  84.  
  85.             List<IntVector2> temp = new List<IntVector2>();
  86.             for (int i = 0; i < 4; i++)
  87.             {
  88.                 for(int j=0; j<passageSizeX; j++)
  89.                 {
  90.                     temp.Add(new IntVector2(0, i * passageSizeX + j));
  91.                     temp.Add(new IntVector2(1, i * passageSizeX + j));
  92.                 }
  93.                 nFreeTiles.Add(temp);
  94.                 temp.Clear();
  95.             }
  96.             for (int i = 0; i < 4; i++)
  97.             {
  98.                 for (int j = 0; j < passageSizeX; j++)
  99.                 {
  100.                     temp.Add(new IntVector2(sizeY - 1, i * passageSizeX + j));
  101.                     temp.Add(new IntVector2(sizeY - 2, i * passageSizeX + j));
  102.                 }
  103.                 sFreeTiles.Add(temp);
  104.                 temp.Clear();
  105.             }
  106.             for (int i = 0; i < 4; i++)
  107.             {
  108.                 for (int j = 0; j < passageSizeY; j++)
  109.                 {
  110.                     temp.Add(new IntVector2(i * passageSizeY + j, 0));
  111.                     temp.Add(new IntVector2(i * passageSizeY + j, 1));
  112.                 }
  113.                 lFreeTiles.Add(temp);
  114.                 temp.Clear();
  115.             }
  116.             for (int i = 0; i < 4; i++)
  117.             {
  118.                 for (int j = 0; j < passageSizeY; j++)
  119.                 {
  120.                     temp.Add(new IntVector2(i * passageSizeY + j, sizeX - 1));
  121.                     temp.Add(new IntVector2(i * passageSizeY + j, sizeX - 2));
  122.                 }
  123.                 rFreeTiles.Add(temp);
  124.                 temp.Clear();
  125.             }
  126.        
  127.         }
  128.  
  129.         private void PlaceDoors()
  130.         {
  131.             if (n != 0)
  132.             {
  133.                 foreach (IntVector2 iv in nFreeTiles[n-1])
  134.                 {
  135.                     room[iv.x, iv.y] = Tile.FLOOR;
  136.                 }
  137.             }
  138.            
  139.         }
  140.  
  141.         private bool CheckIfAllPassagesExists()
  142.         {
  143.             bool passable = true;
  144.             if (n != 0 && s != 0)
  145.             { }
  146.             if (n != 0 && l != 0)
  147.             { }
  148.             if (n != 0 && r != 0)
  149.             { }
  150.             if (s != 0 && l != 0)
  151.             { }
  152.             if (s != 0 && r != 0)
  153.             { }
  154.             if (r != 0 && l != 0)
  155.             { }
  156.  
  157.  
  158.             return passable;
  159.         }
  160.  
  161.         private int CntCellNeighboursWalls(int x, int y)
  162.         {
  163.  
  164.             int n = 0;
  165.  
  166.             if (room[x + 1, y] == Tile.VOID)
  167.                 n++;
  168.             if (room[x - 1, y] == Tile.VOID)
  169.                 n++;
  170.             if (room[x, y + 1] == Tile.VOID)
  171.                 n++;
  172.             if (room[x, y - 1] == Tile.VOID)
  173.                 n++;
  174.             if (room[x + 1, y + 1] == Tile.VOID)
  175.                 n++;
  176.             if (room[x - 1, y - 1] == Tile.VOID)
  177.                 n++;
  178.             if (room[x + 1, y - 1] == Tile.VOID)
  179.                 n++;
  180.             if (room[x - 1, y + 1] == Tile.VOID)
  181.                 n++;
  182.             return n;
  183.         }
  184.  
  185.         private int CntCellNeighboursWalls2(int x, int y)
  186.         {
  187.             int n = 0;
  188.             for (int i = -2; i < 3; i++)
  189.             {
  190.                 for (int j = -2; j < 3; j++)
  191.                 {
  192.                     if (i != 0 || j != 0)
  193.                     {
  194.                         if (isFineCoords(x + i, y + j))
  195.                         {
  196.                             if (map[x + i, y + j] == VOID)
  197.                                 n++;
  198.                         }
  199.                     }
  200.                 }
  201.             }
  202.  
  203.             return n;
  204.         }
  205.  
  206.         private bool isFineCoords(int x, int y)
  207.         {
  208.             if (x >= 0 && x <= sizeX + 1 && y >= 0 && y <= sizeY + 1)
  209.             { return true; }
  210.             return false;
  211.         }
  212.  
  213.     }
  214. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement