예제 #1
0
        //Анимация перемещения элементов
        public void MoveElements(VisualElement a, VisualElement b)
        {
            Position a_pos = new Position(a.Position);
            Position b_pos = new Position(b.Position);

            game.Swap(a_pos, b_pos);
            SwapElements(a_pos, b_pos);
            bool result = game.Remove();

            //Если в результате перемещения не возникает комбинация, то элементы возвращаются на исходные позиции
            if (result == false)
            {
                SwapAnimation Swap = new SwapAnimation(this);
                Swap.AnimationFinish += delegate
                {
                    a_pos = new Position(a.Position);
                    b_pos = new Position(b.Position);
                    game.Swap(a_pos, b_pos);
                    SwapElements(a_pos, b_pos);
                    active = true;
                };

                Swap.Start(b, a);
            }
        }
예제 #2
0
            public void Click()
            {
                if (level.active == false)
                {
                    return;
                }
                if (checkedElement != null)
                {
                    //Выделение первого выбранного элемента
                    if (checkedElement == this)
                    {
                        backColor      = Color.Transparent;
                        checkedElement = null;
                    }
                    else
                    {
                        bool near = false;

                        //Проверка второго выбранного элемента на соседство с первым
                        if ((checkedElement.Position.X == Position.X - 1 && checkedElement.Position.Y == Position.Y) ||
                            (checkedElement.Position.X == Position.X + 1 && checkedElement.Position.Y == Position.Y) ||
                            (checkedElement.Position.X == Position.X && checkedElement.Position.Y == Position.Y - 1) ||
                            (checkedElement.Position.X == Position.X && checkedElement.Position.Y == Position.Y + 1))
                        {
                            near = true;
                        }

                        if (near == false)
                        {
                            //Выбор другого элемента
                            checkedElement.backColor = Color.Transparent;
                            backColor      = Color.DarkSlateBlue;
                            checkedElement = this;
                        }
                        else
                        {
                            //проверка двух соседних элементов
                            checkedElement.backColor = Color.Transparent;
                            level.active             = false;
                            VisualElement el = checkedElement;
                            checkedElement = null;
                            SwapAnimation Swap = new SwapAnimation(level);
                            Swap.AnimationFinish += delegate { level.MoveElements(el, this); };
                            Swap.Start(el, this);
                        }
                    }
                }
                else
                {
                    //выбор элемента
                    backColor      = Color.DarkSlateBlue;
                    checkedElement = this;
                }
                level.Refresh();
            }