public Coordinate GetRandomNonRockCoordinate(Random r)
        {
            do
            {
                var randomColumn = r.Next(0, 7);
                var randomRow    = r.Next(0, 7);

                var field = _boardLayout[randomRow, randomColumn];
                if (field.Piece.Type != PieceType.Rock)
                {
                    return(CoordinateProvider.GetCoordinate(randomColumn, randomRow));
                }
            } while(true);
        }
        public static ImportedMoveList FromImportableString(string importableString)
        {
            var chunks = Enumerable.Range(0, importableString.Length / 2).Select(i => importableString.Substring(i * 2, 2));
            var l      = new ImportedMoveList();

            foreach (var chunk in chunks)
            {
                var col = chunk[0];
                var row = Convert.ToInt32(Char.GetNumericValue(chunk[1]));
                var c   = CoordinateProvider.GetCoordinate(col, row);
                l.Add(c);
            }

            return(l);
        }
        public Coordinate GetRandomEmptyCoordinate(Random r)
        {
            if (GetNumberOfFreeSpaces() > 0)
            {
                do
                {
                    var randomColumn = r.Next(0, 7);
                    var randomRow    = r.Next(0, 7);

                    var field = _boardLayout[randomRow, randomColumn];
                    if (field.Piece.Type == PieceType.Empty)
                    {
                        return(CoordinateProvider.GetCoordinate(randomColumn, randomRow));
                    }
                } while(true);
            }
            return(Coordinate.InvalidCoordinate);
        }
        public Board(Field[ , ] initialLayout)
        {
            for (var rowIndex = 0; rowIndex < RowLength; rowIndex++)
            {
                for (var columnIndex = 0; columnIndex < ColLength; columnIndex++)
                {
                    var originalField = initialLayout[rowIndex, columnIndex];
                    var coordinate    = CoordinateProvider.GetCoordinate(columnIndex, rowIndex);

                    var newField  = new Field(new Piece(originalField.Piece.Type, originalField.Piece.OuterColor, originalField.Piece.InnerColor), coordinate);
                    var newField1 = new Field(new Piece(originalField.Piece.Type, originalField.Piece.OuterColor, originalField.Piece.InnerColor), coordinate);

                    _initialLayout[rowIndex, columnIndex] = newField1;
                    _boardLayout[rowIndex, columnIndex]   = newField;

                    if (newField1.Piece.Type != PieceType.Rock)
                    {
                        _maximumFreeSpaces++;
                    }
                }
            }
        }
        public List <Coordinate> GetAllEmptySpaces()
        {
            var emptyCoordinates = new List <Coordinate>();

            if (IsFull())
            {
                return(emptyCoordinates);
            }

            for (var rowIndex = 0; rowIndex < RowLength; rowIndex++)
            {
                for (var columnIndex = 0; columnIndex < ColLength; columnIndex++)
                {
                    var field = _boardLayout[rowIndex, columnIndex];
                    if (field.Piece.Type == PieceType.Empty)
                    {
                        emptyCoordinates.Add(CoordinateProvider.GetCoordinate(columnIndex, rowIndex));
                    }
                }
            }

            return(emptyCoordinates);
        }