/// <summary>
        /// Generate Random Part
        /// </summary>
        public Part(bool[,] field)
        {
            bool[,] element1 = new bool[2, 3] { {true,false,false},
                                                {true,true,true}};

            bool[,] element2 = new bool[2, 3] { {false,true,false},
                                                {true,true,true}};
            bool[,] element3 = new bool[2, 3] { {false,false,false},
                                                {true,true,true}};
            bool[,] element4 = new bool[2, 3] { {true,true,false},
                                                {false,true,true}};
            bool[,] element5 = new bool[2, 3] { {false,true,true},
                                               {false,true,false}};

            List<bool[,]> availableElements = new List<bool[,]>()
            {
                element1,
                element2,
                element3,
                element4,
                element5
            };
            Random rng = new Random();

            this.elements = element2;
            this.position = new Position(0, 0);
            this.field = field;
        }
 public Part(Position position, bool[,] elements, bool[,] field)
 {
     this.position = position;
     this.elements = elements;
     this.field = field;
 }
 private bool CanMoveTo(Position newPosition)
 {
     try
     {
         Console.SetCursorPosition(newPosition.x, newPosition.y);
         switch (direction)
         {
             case Direction.Left:
                 for (int i = 0; i < elements.GetLength(1); i++)
                 {
                     for (int j = 0; j < elements.GetLength(0); j++)
                     {
                         if (elements[j, i] && field[newPosition.x + elements.GetLength(0) - 1 - j, Console.CursorTop])
                         {
                             return false;
                         }
                     }
                     Console.CursorTop++;
                     Console.CursorLeft = newPosition.x;
                 }
                 break;
             case Direction.Right:
                 for (int i = elements.GetLength(1) - 1; i >= 0; i--)
                 {
                     for (int j = 0; j < elements.GetLength(0); j++)
                     {
                         if (elements[j, i] && field[newPosition.x + j, Console.CursorTop])
                         {
                             return false;
                         }
                     }
                     Console.CursorTop++;
                     Console.CursorLeft = newPosition.x;
                 }
                 break;
             case Direction.Up:
                 for (int i = elements.GetLength(0) - 1; i >= 0; i--)
                 {
                     for (int j = elements.GetLength(1) - 1; j >= 0; j--)
                     {
                         if (elements[i, j] && field[newPosition.x + j, Console.CursorTop])
                         {
                             return false;
                         }
                     }
                     Console.CursorTop++;
                     Console.CursorLeft = newPosition.x;
                 }
                 break;
             case Direction.Down:
                 for (int i = 0; i < elements.GetLength(0); i++)
                 {
                     for (int j = 0; j < elements.GetLength(1); j++)
                     {
                         if (elements[i, j] && field[newPosition.x + j, Console.CursorTop])
                         {
                             return false;
                         }
                     }
                     Console.CursorTop++;
                     Console.CursorLeft = newPosition.x;
                 }
                 break;
             default:
                 break;
         }
         return true;
     }
     catch
     {
         return false;
     }
 }