示例#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 SetTableau()
        {
            _tableauViews = new TableauView[GameTable.Tableaus];
            for (int i = 0; i < GameTable.Tableaus; i++)
            {
                var tableauView = new TableauView();

                Grid.SetColumn(tableauView, i);
                Grid.SetRow(tableauView, 2);
                Panel.SetZIndex(tableauView, 0);
                tableauView.SetTableau(_table.GetTableau(i));

                RootView.Children.Add(tableauView);
                _tableauViews[i] = tableauView;
            }
        }
示例#3
0
 /// <summary>
 /// Проверка автоматических перемещений в правую стопку из таблиц.
 /// </summary>
 private void CheckAutoMovesToRightFoundation()
 {
     for (int i = 0; i < GameTable.Tableaus; i++)
     {
         TableauView view = _tableauViews[i];
         if (!view.Tableau.CheckFillKingToAce())
         {
             continue;
         }
         // Найдена последовательность от короля до туза.
         // Ищем, куда её переместить.
         for (int j = 0; j < GameTable.Foundations; j++)
         {
             Foundation fn = _table.GetFoundation(j, false);
             if (fn.GetTopCard() == null)
             {
                 _table.MoveCards(view.Tableau.GetDraggableTopCards(), view.Tableau, fn);
                 break;
             }
         }
         RefreshView();
         CheckGameOver();
     }
 }