/// <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); }
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; } }