Пример #1
0
        /// <summary>
        /// Событие окончания перемещения карт.
        /// Просматриваются новые позиции карты и определяется, куда их переместить.
        /// </summary>
        /// <param name="tableauView">таблица, из которой были перемещены карты</param>
        /// <param name="draggableCards">перемещаемые карты</param>
        public void DragCompleted(TableauView tableauView, DraggableCards draggableCards)
        {
            CardView bottomCardView = draggableCards.BottomCardView;
            Rect     cardRect       = GetCardRect(bottomCardView);

            // Просматриваем перемещение по стопкам.
            for (int i = 0; i < GameTable.Foundations * 2; i++)
            {
                FoundationView view = _foundationViews[i];

                Rect rect = view.Bounds;
                if (cardRect.IntersectsWith(rect))
                {
                    // Проверка правых стопок.
                    if (i >= GameTable.Foundations && draggableCards.Cards.Count != 13)
                    {
                        CancelMove(draggableCards);
                        return;
                    }
                    if (!view.Foundation.IsCorrectMove(bottomCardView.Card))
                    {
                        CancelMove(draggableCards);
                        return;
                    }
                    // Добавляем карты в стопку.
                    _table.MoveCards(draggableCards.Cards, tableauView.Tableau, view.Foundation);
                    tableauView.RefreshView();
                    view.RefreshView();
                    CheckGameOver();
                    return;
                }
            }
            // Просматриваем перемещение по таблицам.
            for (int i = 0; i < GameTable.Tableaus; i++)
            {
                TableauView view = _tableauViews[i];
                if (view.Equals(tableauView))
                {
                    continue;
                }

                Rect rect = view.Bounds;
                if (cardRect.IntersectsWith(rect))
                {
                    if (!view.Tableau.IsCorrectMove(bottomCardView.Card))
                    {
                        CancelMove(draggableCards);
                        return;
                    }
                    // Переносим карты в другую таблицу.
                    _table.MoveCards(draggableCards.Cards, tableauView.Tableau, view.Tableau);
                    tableauView.RefreshView();
                    view.RefreshView();
                    CheckAutoMovesToRightFoundation();
                    return;
                }
            }

            CancelMove(draggableCards);
        }
Пример #2
0
        private void SetFoundations()
        {
            _foundationViews = new FoundationView[GameTable.Foundations * 2];
            for (int i = 0; i < GameTable.Foundations * 2; i++)
            {
                var foundationView = new FoundationView();

                int  num  = i % GameTable.Foundations;
                bool left = i < GameTable.Foundations;

                Grid.SetColumn(foundationView, 2 + i);
                Grid.SetRow(foundationView, 1);
                foundationView.SetFoundation(_table.GetFoundation(num, left), left);

                RootView.Children.Add(foundationView);
                _foundationViews[i] = foundationView;
            }
        }