private void DeleteCardsPromLastPlace()
        {
            Card card = _cardsMove[0];

            switch (card.Place)
            {
            case CardPlace.None:
                //throw new Exception("Card isn`t placed in any column.");
                break;

            case CardPlace.ResultColumn:
                //can`t move this card
                throw new Exception("Can`t move from result column.");
            //break;

            case CardPlace.GameColumn:
                int?iColGame = GameColumns.GetGameColIndex(card);
                if (iColGame != null)
                {
                    for (int index = _cardsMove.Count - 1; index >= 0; index--)
                    {
                        GameColumns.ColGame[(int)iColGame].DeleteCard(_cardsMove[index]);
                    }
                }
                else
                {
                    throw new Exception("Index game column in null.");
                }
                break;

            case CardPlace.AdditionalColumn:
                if (GameColumns.ColAdditional[GameWindowConstants.iColKing].Contains(card))
                {
                    GameColumns.ColAdditional[GameWindowConstants.iColKing].DeleteCard(card);
                }
                else
                {
                    GameColumns.ColAdditional[GameWindowConstants.iColJoker].DeleteCard(card);
                }
                break;

            case CardPlace.Deck:
                if (GameColumns.ColDeck.Contains(card))
                {
                    GameColumns.ColDeck.DeleteCard(card);
                }
                else
                {
                    throw new Exception("Unknown card in deck");
                }
                break;
            }
        }
        private void SetMovingCards(Card card)
        {
            _cardsMove.Clear();

            switch (card.Place)
            {
            case CardPlace.GameColumn:
                int?iColGame = GameColumns.GetGameColIndex(card);
                if (iColGame != null)
                {
                    for (int index = GameColumns.ColGame[(int)iColGame].Count - 1; index >= 0; index--)
                    {
                        Card lastCard = GameColumns.ColGame[(int)iColGame][index];
                        _cardsMove.Add(lastCard);

                        if (lastCard.Equals(card))
                        {
                            break;
                        }
                    }
                }
                else
                {
                    throw new Exception("Index game column in null.");
                }
                break;

            default:
                _cardsMove.Add(card);
                break;
            }

            Effect effect = new DropShadowEffect();

            foreach (Card movingCard in _cardsMove)
            {
                movingCard.Effect = effect;
            }
        }
        /// <summary>
        /// Check all last cards in every game column and in additional columns.
        /// If card suitables set property AllowDrop = true
        /// </summary>
        private void CheckOnAllowDrop(Card card)
        {
            Card lastCard;

            Data.Name  cardName;
            Data.Color cardColor;

            if (card.Place == CardPlace.GameColumn)
            {
                cardName  = GameColumns.ColGame[(int)GameColumns.GetGameColIndex(card)].GetCardMovingNameInColumn(card);
                cardColor = GameColumns.ColGame[(int)GameColumns.GetGameColIndex(card)].GetCardColorInColumn(card);
            }
            else
            {
                cardName  = card.Data.CardName;
                cardColor = card.Data.CardColor;
            }

            //game columns
            for (int index = 0; index < GameColumns.ColGame.Length; index++)
            {
                //set allowDrop = false for every card in column
                GameColumns.ColGame[index].SetAllowDrop();
                //set allowDrop = false for image in this column
                GameImages.GameColImages[index].AllowDrop = false;
                //get last card
                lastCard = GameColumns.ColGame[index].GetLastCard();

                if (lastCard != null)
                {
                    Data.Name  lastCardName  = GameColumns.ColGame[index].GetCardReceivingNameInColumn(lastCard);
                    Data.Color lastCardColor = GameColumns.ColGame[index].GetCardColorInColumn(lastCard);

                    if (lastCardName != Data.Name.Joker)
                    {
                        if (cardName == Data.Name.Joker ||
                            (cardName == lastCardName - 1 && cardColor != lastCardColor))
                        {
                            lastCard.AllowDrop = true;
                        }
                    }
                }
                else
                {
                    if (cardName == Data.Name.Joker || cardName == Data.Name.King)
                    {
                        GameImages.GameColImages[index].AllowDrop = true;
                    }
                }
            }

            lastCard = null;

            //if move 1 card
            if (card.Place != CardPlace.GameColumn ||
                GameColumns.ColGame[(int)GameColumns.GetGameColIndex(card)].GetLastCard().Equals(card))
            {
                //result columns
                for (int index = 0; index < GameColumns.ColResult.Length; index++)
                {
                    //set allowDrop = false for every card in column
                    GameColumns.ColResult[index].SetAllowDrop();
                    //set allowDrop = false for image in this column
                    GameImages.ResultColImages[index].AllowDrop = false;
                    //get last card
                    lastCard = GameColumns.ColResult[index].GetLastCard();

                    if (lastCard != null)
                    {
                        if (card.Data.CardLear == lastCard.Data.CardLear &&
                            card.Data.CardName == lastCard.Data.CardName + 1)
                        {
                            lastCard.AllowDrop = true;
                        }
                    }
                    else
                    {
                        if (card.Data.CardName == Data.Name.Ace)
                        {
                            GameImages.ResultColImages[index].AllowDrop = true;
                        }
                    }
                }

                lastCard = null;

                //additional columns
                for (int index = 0; index < GameColumns.ColAdditional.Length; index++)
                {
                    //set allowDrop = false for every card in column
                    GameColumns.ColAdditional[index].SetAllowDrop();
                    //set allowDrop = false for image in this column
                    GameImages.AdditionalColImages[index].AllowDrop = false;
                    //get last card
                    lastCard = GameColumns.ColAdditional[index].GetLastCard();

                    if (lastCard != null)
                    {
                        if (card.Data.CardName == GameColumns.ColAdditional[index].CardName)
                        {
                            lastCard.AllowDrop = true;
                        }
                    }
                    else
                    {
                        if (card.Data.CardName == GameColumns.ColAdditional[index].CardName)
                        {
                            GameImages.AdditionalColImages[index].AllowDrop = true;
                        }
                    }
                }
            }
        }