如何在其他列表c#中移动堆栈列表?

时间:2017-12-28 00:42:03

标签: c#

我正在进行纸牌游戏。

我需要帮助才能将多张牌从一堆移到另一堆。

我可以将一张卡移动到另一堆,我不知道如何改变它,因为我使用堆栈列表。

那么如何检查第一个索引的另一个索引呢?

       // valid card at to pile
    public bool TryPushCardsOnPile(Card card, int index)
    {
        Stack<Card> pile = piles[index];
        if (pile.Count() == 0)
        {
            return (card.getRank() == CardRank.King);
        }
        Card topPile = piles[index].Peek();

        if (!topPile.IsVisible())
        {
            return false;
        }
        return (card.IsRed() != topPile.IsRed()) && (card.getRank() == topPile.getRank() - 1);
    }

在表单类

        public void PileClicked(int index)
    {
        if (IsDeckDisplaySelected())
        {
            Card temp = game.deckDisplay.Last();
            if (game.TryPushCardsOnPile(temp, index))
            {
                game.piles[index].Push(temp);
                game.deckDisplay.Remove(temp);
                move++;
            }
            Unselect();
            SelectPile(index);
        }
        else if (IsPileSelected())
        {
            int oldPile = SelectedPile();
            if (index != oldPile)
            {
                Card temp = game.piles[oldPile].Peek();
                if (game.TryPushCardsOnPile (temp, index))
                {
                    game.piles[index].Push(temp);
                    game.piles[oldPile].Pop();
                    if (game.piles[oldPile].FirstOrDefault() != null)
                    {

                        game.piles[oldPile].FirstOrDefault().IsVisible();

                    }
                    move++;
                    Unselect();
                }
                else
                {
                   // game.piles[oldPile].Push(temp);
                   // game.AddToPile(temp, oldPile);
                    Unselect();
                    SelectPile(index);

                }
            }
            else Unselect();
        }
        else
        {
            SelectPile(index);
            game.piles[index].Peek().TurnCardUp();
        }
    }

谢谢

1 个答案:

答案 0 :(得分:1)

虽然使用List或甚至自定义链接列表可能是更好的选择,但很容易将项目块从一个堆栈移动到另一个堆栈:全部弹出,反向,推送到其他堆栈:

 var items = sourceStack.Take(4).Reverse().ToList();
 items.ForEach(x => destinationStack.Push(x));