我正在进行纸牌游戏。
我需要帮助才能将多张牌从一堆移到另一堆。
我可以将一张卡移动到另一堆,我不知道如何改变它,因为我使用堆栈列表。
那么如何检查第一个索引的另一个索引呢?
// 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();
}
}
谢谢
答案 0 :(得分:1)
虽然使用List或甚至自定义链接列表可能是更好的选择,但很容易将项目块从一个堆栈移动到另一个堆栈:全部弹出,反向,推送到其他堆栈:
var items = sourceStack.Take(4).Reverse().ToList();
items.ForEach(x => destinationStack.Push(x));