Exemplo n.º 1
0
        private sbyte[,] RemoveCombos(sbyte[,] source, Vector2[] combos)
        {
            sbyte[,] gridCopy = (sbyte[, ])source.Clone();
            if (combos == null || combos.Length == 0)
            {
                return(gridCopy);
            }

            foreach (var p in combos)
            {
                gridCopy[(int)p.x, (int)p.y] = 0;
            }

            int xStart = (int)combos[0].x;
            int xEnd   = (int)combos[combos.Length - 1].x;

            gridCopy = ForceFall(gridCopy, xStart, xEnd);

            return(gridCopy);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Apply the move to the simplified grid and returns the new grid (with uncleared combos)
        /// </summary>
        public sbyte[,] GetGridWithMove(sbyte[,] baseGrid, AIMove move)
        {
            // Copy array
            sbyte[,] gridCopy = (sbyte[, ])baseGrid.Clone();
            int x1    = move.x;
            int x2    = move.x + move.direction;
            int yBase = move.y;

            // Swap
            sbyte a = baseGrid[x1, yBase];
            sbyte b = baseGrid[x2, yBase];

            gridCopy[x1, yBase] = b;
            gridCopy[x2, yBase] = a;

            // Do the fall checks from bot to top
            int pxStart = x1 < x2 ? x1 : x2;
            int pxMax   = x1 > x2 ? x1 : x2;

            gridCopy = ForceFall(gridCopy, pxStart, pxMax);

            return(gridCopy);
        }
Exemplo n.º 3
0
 // Use this method to get an array representation of the board.
 // Use this e.g. for smart custom evaluation functions.
 public sbyte[,] ToArray()
 {
     return((sbyte[, ])(board.Clone()));
 }
Exemplo n.º 4
0
        //Поиск комбинаций и их удаление с поля
        public bool Remove()
        {
            List <Line> lines = new List <Line>();

            sbyte[,] matrix_clone = (sbyte[, ])matrix.Clone();
            sbyte[,] empty_matrix = new sbyte[Rows, Columns]; //Нужна для добавления элементов-бонусов
            sbyte values;

            int hor_count, ver_count;

            //Поиск горизонтальных линий
            for (int y = 0; y < Rows; y++)
            {
                for (int x = 0; x < Columns; x++)
                {
                    if (matrix_clone[y, x] == -1)
                    {
                        continue;
                    }

                    hor_count = 1;

                    for (int i = x + 1; i < Columns; i++)
                    {
                        if (matrix_clone[y, i] >= 0 && matrix_clone[y, i] <= 4)
                        {
                            if (matrix_clone[y, x] >= 0 && matrix_clone[y, x] <= 4)
                            {
                                if (matrix_clone[y, i] == matrix_clone[y, x])
                                {
                                    hor_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            else if (matrix_clone[y, x] >= 5 && matrix_clone[y, x] <= 9)
                            {
                                if (matrix_clone[y, i] == matrix_clone[y, x] - 5)
                                {
                                    hor_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            else if (matrix_clone[y, x] >= 10 && matrix_clone[y, x] <= 14)
                            {
                                if (matrix_clone[y, i] == matrix_clone[y, x] - 10)
                                {
                                    hor_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            if (matrix_clone[y, x] >= 15 && matrix_clone[y, x] <= 19)
                            {
                                if (matrix_clone[y, i] == matrix_clone[y, x] - 15)
                                {
                                    hor_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }
                        else if (matrix_clone[y, i] >= 5 && matrix_clone[y, i] <= 9)
                        {
                            if (matrix_clone[y, x] >= 0 && matrix_clone[y, x] <= 4)
                            {
                                if (matrix_clone[y, i] - 5 == matrix_clone[y, x])
                                {
                                    hor_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            else if (matrix_clone[y, x] >= 5 && matrix_clone[y, x] <= 9)
                            {
                                if (matrix_clone[y, i] - 5 == matrix_clone[y, x] - 5)
                                {
                                    hor_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            else if (matrix_clone[y, x] >= 10 && matrix_clone[y, x] <= 14)
                            {
                                if (matrix_clone[y, i] - 5 == matrix_clone[y, x] - 10)
                                {
                                    hor_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            if (matrix_clone[y, x] >= 15 && matrix_clone[y, x] <= 19)
                            {
                                if (matrix_clone[y, i] - 5 == matrix_clone[y, x] - 15)
                                {
                                    hor_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }
                        else if (matrix_clone[y, i] >= 10 && matrix_clone[y, i] <= 14)
                        {
                            if (matrix_clone[y, x] >= 0 && matrix_clone[y, x] <= 4)
                            {
                                if (matrix_clone[y, i] - 10 == matrix_clone[y, x])
                                {
                                    hor_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            else if (matrix_clone[y, x] >= 5 && matrix_clone[y, x] <= 9)
                            {
                                if (matrix_clone[y, i] - 10 == matrix_clone[y, x] - 5)
                                {
                                    hor_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            else if (matrix_clone[y, x] >= 10 && matrix_clone[y, x] <= 14)
                            {
                                if (matrix_clone[y, i] - 10 == matrix_clone[y, x] - 10)
                                {
                                    hor_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            if (matrix_clone[y, x] >= 15 && matrix_clone[y, x] <= 19)
                            {
                                if (matrix_clone[y, i] - 10 == matrix_clone[y, x] - 15)
                                {
                                    hor_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }
                        else if (matrix_clone[y, i] >= 15 && matrix_clone[y, i] <= 19)
                        {
                            if (matrix_clone[y, x] >= 0 && matrix_clone[y, x] <= 4)
                            {
                                if (matrix_clone[y, i] - 15 == matrix_clone[y, x])
                                {
                                    hor_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            else if (matrix_clone[y, x] >= 5 && matrix_clone[y, x] <= 9)
                            {
                                if (matrix_clone[y, i] - 15 == matrix_clone[y, x] - 5)
                                {
                                    hor_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            else if (matrix_clone[y, x] >= 10 && matrix_clone[y, x] <= 14)
                            {
                                if (matrix_clone[y, i] - 15 == matrix_clone[y, x] - 10)
                                {
                                    hor_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            if (matrix_clone[y, x] >= 15 && matrix_clone[y, x] <= 19)
                            {
                                if (matrix_clone[y, i] - 15 == matrix_clone[y, x] - 15)
                                {
                                    hor_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }
                    }

                    if (hor_count >= 3)
                    {
                        //Запоминаем, где нужно добавить бонус Line (горизонтальный)
                        if (hor_count == 4)
                        {
                            values = matrix_clone[y, x];

                            if (values == 0)
                            {
                                empty_matrix[y, x] = 5;
                            }
                            else if (values == 1)
                            {
                                empty_matrix[y, x] = 6;
                            }
                            else if (values == 2)
                            {
                                empty_matrix[y, x] = 7;
                            }
                            else if (values == 3)
                            {
                                empty_matrix[y, x] = 8;
                            }
                            else if (values == 4)
                            {
                                empty_matrix[y, x] = 9;
                            }
                        }
                        //Запоминаем, где нужно добавить бонус Bomb
                        if (hor_count == 5)
                        {
                            values = matrix_clone[y, x];

                            if (values == 0)
                            {
                                empty_matrix[y, x] = 15;
                            }
                            else if (values == 1)
                            {
                                empty_matrix[y, x] = 16;
                            }
                            else if (values == 2)
                            {
                                empty_matrix[y, x] = 17;
                            }
                            else if (values == 3)
                            {
                                empty_matrix[y, x] = 18;
                            }
                            else if (values == 4)
                            {
                                empty_matrix[y, x] = 19;
                            }
                        }
                        for (int i = x; i < x + hor_count; ++i)
                        {
                            matrix_clone[y, i] = -1;
                        }

                        lines.Add(new Line(new Position(x, y), new Position(x + hor_count - 1, y)));
                    }
                }
            }

            matrix_clone = (sbyte[, ])matrix.Clone();

            //Поиск вертикальных линий
            for (int y = 0; y < Rows; y++)
            {
                for (int x = 0; x < Columns; x++)
                {
                    if (matrix_clone[y, x] == -1)
                    {
                        continue;
                    }

                    ver_count = 1;

                    for (int i = y + 1; i < Rows; i++)
                    {
                        if (matrix_clone[i, x] >= 0 && matrix_clone[i, x] <= 4)
                        {
                            if (matrix_clone[y, x] >= 0 && matrix_clone[y, x] <= 4)
                            {
                                if (matrix_clone[i, x] == matrix_clone[y, x])
                                {
                                    ver_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            else if (matrix_clone[y, x] >= 5 && matrix_clone[y, x] <= 9)
                            {
                                if (matrix_clone[i, x] == matrix_clone[y, x] - 5)
                                {
                                    ver_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            else if (matrix_clone[y, x] >= 10 && matrix_clone[y, x] <= 14)
                            {
                                if (matrix_clone[i, x] == matrix_clone[y, x] - 10)
                                {
                                    ver_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            else if (matrix_clone[y, x] >= 15 && matrix_clone[y, x] <= 19)
                            {
                                if (matrix_clone[i, x] == matrix_clone[y, x] - 15)
                                {
                                    ver_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }
                        else if (matrix_clone[i, x] >= 5 && matrix_clone[i, x] <= 9)
                        {
                            if (matrix_clone[y, x] >= 0 && matrix_clone[y, x] <= 4)
                            {
                                if (matrix_clone[i, x] - 5 == matrix_clone[y, x])
                                {
                                    ver_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            else if (matrix_clone[y, x] >= 5 && matrix_clone[y, x] <= 9)
                            {
                                if (matrix_clone[i, x] - 5 == matrix_clone[y, x] - 5)
                                {
                                    ver_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            else if (matrix_clone[y, x] >= 10 && matrix_clone[y, x] <= 14)
                            {
                                if (matrix_clone[i, x] - 5 == matrix_clone[y, x] - 10)
                                {
                                    ver_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            else if (matrix_clone[y, x] >= 15 && matrix_clone[y, x] <= 19)
                            {
                                if (matrix_clone[i, x] - 5 == matrix_clone[y, x] - 15)
                                {
                                    ver_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }
                        else if (matrix_clone[i, x] >= 10 && matrix_clone[i, x] <= 14)
                        {
                            if (matrix_clone[y, x] >= 0 && matrix_clone[y, x] <= 4)
                            {
                                if (matrix_clone[i, x] - 10 == matrix_clone[y, x])
                                {
                                    ver_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            else if (matrix_clone[y, x] >= 5 && matrix_clone[y, x] <= 9)
                            {
                                if (matrix_clone[i, x] - 10 == matrix_clone[y, x] - 5)
                                {
                                    ver_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            else if (matrix_clone[y, x] >= 10 && matrix_clone[y, x] <= 14)
                            {
                                if (matrix_clone[i, x] - 10 == matrix_clone[y, x] - 10)
                                {
                                    ver_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            else if (matrix_clone[y, x] >= 15 && matrix_clone[y, x] <= 19)
                            {
                                if (matrix_clone[i, x] - 10 == matrix_clone[y, x] - 15)
                                {
                                    ver_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }
                        else if (matrix_clone[i, x] >= 15 && matrix_clone[i, x] <= 19)
                        {
                            if (matrix_clone[y, x] >= 0 && matrix_clone[y, x] <= 4)
                            {
                                if (matrix_clone[i, x] - 15 == matrix_clone[y, x])
                                {
                                    ver_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            else if (matrix_clone[y, x] >= 5 && matrix_clone[y, x] <= 9)
                            {
                                if (matrix_clone[i, x] - 15 == matrix_clone[y, x] - 5)
                                {
                                    ver_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            else if (matrix_clone[y, x] >= 10 && matrix_clone[y, x] <= 14)
                            {
                                if (matrix_clone[i, x] - 15 == matrix_clone[y, x] - 10)
                                {
                                    ver_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            else if (matrix_clone[y, x] >= 15 && matrix_clone[y, x] <= 19)
                            {
                                if (matrix_clone[i, x] - 15 == matrix_clone[y, x] - 15)
                                {
                                    ver_count++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }
                    }

                    if (ver_count >= 3)
                    {
                        //Запоминаем, где нужно добавить бонус Line (вертикальный)
                        if (ver_count == 4)
                        {
                            values = matrix_clone[y, x];

                            if (values == 0)
                            {
                                empty_matrix[y, x] = 10;
                            }
                            else if (values == 1)
                            {
                                empty_matrix[y, x] = 11;
                            }
                            else if (values == 2)
                            {
                                empty_matrix[y, x] = 12;
                            }
                            else if (values == 3)
                            {
                                empty_matrix[y, x] = 13;
                            }
                            else if (values == 4)
                            {
                                empty_matrix[y, x] = 14;
                            }
                        }
                        //Запоминаем, где нужно добавить бонус Bomb
                        if (ver_count == 5)
                        {
                            values = matrix_clone[y, x];

                            if (values == 0)
                            {
                                empty_matrix[y, x] = 15;
                            }
                            else if (values == 1)
                            {
                                empty_matrix[y, x] = 16;
                            }
                            else if (values == 2)
                            {
                                empty_matrix[y, x] = 17;
                            }
                            else if (values == 3)
                            {
                                empty_matrix[y, x] = 18;
                            }
                            else if (values == 4)
                            {
                                empty_matrix[y, x] = 19;
                            }
                        }
                        for (int i = y; i < y + ver_count; i++)
                        {
                            matrix_clone[i, x] = -1;
                        }

                        lines.Add(new Line(new Position(x, y), new Position(x, y + ver_count - 1)));
                    }
                }
            }

            if (lines.Count == 0)
            {
                return(false);
            }

            int baseValue = 10;

            //Удаление линий с игрового поля
            foreach (Line line in lines)
            {
                int count = 0;

                //Горизонтальные линии
                if (line.Start.Y == line.Finish.Y)
                {
                    for (int i = line.Start.X; i <= line.Finish.X; i++)
                    {
                        if (matrix[line.Start.Y, i] >= 0 && matrix[line.Start.Y, i] <= 4)
                        {
                            matrix[line.Start.Y, i] = -1;

                            if (ElementRemoved != null)
                            {
                                ElementRemoved(i, line.Start.Y);
                            }

                            count++;
                        }
                        else if (matrix[line.Start.Y, i] >= 5 && matrix[line.Start.Y, i] <= 9)
                        {
                            for (int j = 0; j < Columns; j++)
                            {
                                matrix[line.Start.Y, j] = -1;

                                if (ElementRemoved != null)
                                {
                                    ElementRemoved(j, line.Start.Y);
                                }

                                count++;
                            }
                        }
                        else if (matrix[line.Start.Y, i] >= 10 && matrix[line.Start.Y, i] <= 14)
                        {
                            for (int j = 0; j < Rows; j++)
                            {
                                matrix[j, i] = -1;

                                if (ElementRemoved != null)
                                {
                                    ElementRemoved(i, j);
                                }

                                count++;
                            }
                        }
                        else if (matrix[line.Start.Y, i] >= 15 && matrix[line.Start.Y, i] <= 19)
                        {
                            if (line.Start.Y == 0 && i == 0)
                            {
                                for (int j = line.Start.Y; j < line.Start.Y + 1; j++)
                                {
                                    for (int m = i; m < i + 1; m++)
                                    {
                                        matrix[j, m] = -1;

                                        if (ElementRemoved != null)
                                        {
                                            ElementRemoved(m, j);
                                        }

                                        count++;
                                    }
                                }
                            }
                            else if (line.Start.Y == 0 && i == Columns)
                            {
                                for (int j = line.Start.Y; j < line.Start.Y + 1; j++)
                                {
                                    for (int m = i - 1; m < i; m++)
                                    {
                                        matrix[j, m] = -1;

                                        if (ElementRemoved != null)
                                        {
                                            ElementRemoved(m, j);
                                        }

                                        count++;
                                    }
                                }
                            }
                            else if (line.Start.Y == Rows && i == Columns)
                            {
                                for (int j = line.Start.Y - 1; j < line.Start.Y; j++)
                                {
                                    for (int m = i - 1; m < i; m++)
                                    {
                                        matrix[j, m] = -1;

                                        if (ElementRemoved != null)
                                        {
                                            ElementRemoved(m, j);
                                        }

                                        count++;
                                    }
                                }
                            }
                            else if (line.Start.Y == Rows && i == 0)
                            {
                                for (int j = line.Start.Y - 1; j < line.Start.Y; j++)
                                {
                                    for (int m = i; m < i + 1; m++)
                                    {
                                        matrix[j, m] = -1;

                                        if (ElementRemoved != null)
                                        {
                                            ElementRemoved(m, j);
                                        }

                                        count++;
                                    }
                                }
                            }
                            else if (line.Start.Y == 0 && (i > 0 && i < Columns))
                            {
                                for (int j = line.Start.Y; j < line.Start.Y + 1; j++)
                                {
                                    for (int m = i - 1; m < i + 1; m++)
                                    {
                                        matrix[j, m] = -1;

                                        if (ElementRemoved != null)
                                        {
                                            ElementRemoved(m, j);
                                        }

                                        count++;
                                    }
                                }
                            }
                            else if (line.Start.Y == Rows && (i > 0 && i < Columns))
                            {
                                for (int j = line.Start.Y - 1; j < line.Start.Y; j++)
                                {
                                    for (int m = i - 1; m < i + 1; m++)
                                    {
                                        matrix[j, m] = -1;

                                        if (ElementRemoved != null)
                                        {
                                            ElementRemoved(m, j);
                                        }

                                        count++;
                                    }
                                }
                            }
                            else if ((line.Start.Y > 0 && line.Start.Y < Rows) && i == 0)
                            {
                                for (int j = line.Start.Y - 1; j < line.Start.Y + 1; j++)
                                {
                                    for (int m = i; m < i + 1; m++)
                                    {
                                        matrix[j, m] = -1;

                                        if (ElementRemoved != null)
                                        {
                                            ElementRemoved(m, j);
                                        }

                                        count++;
                                    }
                                }
                            }
                            else if ((line.Start.Y > 0 && line.Start.Y < Rows) && i == Columns)
                            {
                                for (int j = line.Start.Y - 1; j < line.Start.Y + 1; j++)
                                {
                                    for (int m = i - 1; m < i; m++)
                                    {
                                        matrix[j, m] = -1;

                                        if (ElementRemoved != null)
                                        {
                                            ElementRemoved(m, j);
                                        }

                                        count++;
                                    }
                                }
                            }
                            else if ((line.Start.Y > 0 && line.Start.Y < Rows) && (i > 0 && i < Columns))
                            {
                                for (int j = line.Start.Y - 1; j < line.Start.Y + 1; j++)
                                {
                                    for (int m = i - 1; m < i + 1; m++)
                                    {
                                        matrix[j, m] = -1;

                                        if (ElementRemoved != null)
                                        {
                                            ElementRemoved(m, j);
                                        }

                                        count++;
                                    }
                                }
                            }
                        }
                    }
                }
                //Вертикальные линии
                else
                {
                    for (int i = line.Start.Y; i <= line.Finish.Y; i++)
                    {
                        if (matrix[i, line.Start.X] >= 0 && matrix[i, line.Start.X] <= 4)
                        {
                            matrix[i, line.Start.X] = -1;

                            if (ElementRemoved != null)
                            {
                                ElementRemoved(line.Start.X, i);
                            }

                            count++;
                        }
                        else if (matrix[i, line.Start.X] >= 5 && matrix[i, line.Start.X] <= 9)
                        {
                            for (int j = 0; j < Columns; j++)
                            {
                                matrix[i, j] = -1;

                                if (ElementRemoved != null)
                                {
                                    ElementRemoved(j, line.Start.Y);
                                }

                                count++;
                            }
                        }
                        else if (matrix[i, line.Start.X] >= 10 && matrix[i, line.Start.X] <= 14)
                        {
                            for (int j = 0; j < Rows; j++)
                            {
                                matrix[j, line.Start.X] = -1;

                                if (ElementRemoved != null)
                                {
                                    ElementRemoved(i, j);
                                }

                                count++;
                            }
                        }
                        else if (matrix[i, line.Start.X] >= 15 && matrix[i, line.Start.X] <= 19)
                        {
                            if (line.Start.X == 0 && i == 0)
                            {
                                for (int j = i; j < i + 1; j++)
                                {
                                    for (int m = line.Start.X; m < line.Start.X + 1; m++)
                                    {
                                        matrix[j, m] = -1;

                                        if (ElementRemoved != null)
                                        {
                                            ElementRemoved(m, j);
                                        }

                                        count++;
                                    }
                                }
                            }
                            else if (line.Start.X == 0 && i == Rows)
                            {
                                for (int j = i - 1; j < i; j++)
                                {
                                    for (int m = line.Start.X; m < line.Start.X + 1; m++)
                                    {
                                        matrix[j, m] = -1;

                                        if (ElementRemoved != null)
                                        {
                                            ElementRemoved(m, j);
                                        }

                                        count++;
                                    }
                                }
                            }
                            else if (line.Start.X == Columns && i == Rows)
                            {
                                for (int j = i - 1; j < i; j++)
                                {
                                    for (int m = line.Start.X - 1; m < line.Start.X; m++)
                                    {
                                        matrix[j, m] = -1;

                                        if (ElementRemoved != null)
                                        {
                                            ElementRemoved(m, j);
                                        }

                                        count++;
                                    }
                                }
                            }
                            else if (line.Start.X == Columns && i == 0)
                            {
                                for (int j = i; j < i + 1; j++)
                                {
                                    for (int m = line.Start.X - 1; m < line.Start.X; m++)
                                    {
                                        matrix[j, m] = -1;

                                        if (ElementRemoved != null)
                                        {
                                            ElementRemoved(m, j);
                                        }

                                        count++;
                                    }
                                }
                            }
                            else if (line.Start.X == 0 && (i > 0 && i < Rows))
                            {
                                for (int j = i - 1; j < i + 1; j++)
                                {
                                    for (int m = line.Start.X; m < line.Start.X + 1; m++)
                                    {
                                        matrix[j, m] = -1;

                                        if (ElementRemoved != null)
                                        {
                                            ElementRemoved(m, j);
                                        }

                                        count++;
                                    }
                                }
                            }
                            else if (line.Start.X == Rows && (i > 0 && i < Rows))
                            {
                                for (int j = i - 1; j < i + 1; j++)
                                {
                                    for (int m = line.Start.X - 1; m < line.Start.X; m++)
                                    {
                                        matrix[j, m] = -1;

                                        if (ElementRemoved != null)
                                        {
                                            ElementRemoved(m, j);
                                        }

                                        count++;
                                    }
                                }
                            }
                            else if ((line.Start.X > 0 && line.Start.X < Rows) && i == 0)
                            {
                                for (int j = i; j < i + 1; j++)
                                {
                                    for (int m = line.Start.X - 1; m < line.Start.X + 1; m++)
                                    {
                                        matrix[j, m] = -1;

                                        if (ElementRemoved != null)
                                        {
                                            ElementRemoved(m, j);
                                        }

                                        count++;
                                    }
                                }
                            }
                            else if ((line.Start.X > 0 && line.Start.X < Rows) && i == Columns)
                            {
                                for (int j = i - 1; j < i; j++)
                                {
                                    for (int m = line.Start.X - 1; m < line.Start.X + 1; m++)
                                    {
                                        matrix[j, m] = -1;

                                        if (ElementRemoved != null)
                                        {
                                            ElementRemoved(m, j);
                                        }

                                        count++;
                                    }
                                }
                            }
                            else if ((line.Start.X > 0 && line.Start.X < Rows) && (i > 0 && i < Columns))
                            {
                                for (int j = i - 1; j < i + 1; j++)
                                {
                                    for (int m = line.Start.X - 1; m < line.Start.X + 1; m++)
                                    {
                                        matrix[j, m] = -1;

                                        if (ElementRemoved != null)
                                        {
                                            ElementRemoved(m, j);
                                        }

                                        count++;
                                    }
                                }
                            }
                        }
                    }
                }

                //Набор очков
                Scores += count * baseValue;
            }

            //Расстановка элементов-бонусов
            for (int y = 0; y < Rows; y++)
            {
                for (int x = 0; x < Columns; x++)
                {
                    values = empty_matrix[y, x];

                    if (values >= 5)
                    {
                        matrix[y, x] = empty_matrix[y, x];
                    }
                }
            }

            if (MatchesRemoved != null)
            {
                MatchesRemoved();
            }

            return(true);
        }