【问题标题】:Queue in which values can be removed that aren't on top可以删除不在顶部的值的队列
【发布时间】:2016-08-03 03:56:37
【问题描述】:
我正在使用 pygame 为我正在进行的项目创建纸牌游戏“spit”的计算机化版本。在 Spit 中,玩家有 5 个手牌堆,最多可存放 5 张牌,最上面的牌面朝上,其余的牌面朝下。当一张牌从牌堆中取出并放在游戏堆上时,我希望手牌堆的剩余值“向上移动”,以便列表中的第二个值现在是第一个。
为此,我计划使用队列,但这样做有问题。
在游戏中,当一个手堆为空时,您可以从另一个手堆中取出一张面朝下的牌,翻转后放入空手堆,这样就不会再有空手堆了。这称为储存。
这是我的问题,这在队列中是不可能的。有解决办法吗?或者我可以用来替换它的另一个表单堆栈?
感谢您抽出宝贵时间,期待您的回答。
【问题讨论】:
标签:
stack
queue
pygame
playing-cards
【解决方案1】:
似乎列表可以在这里完成这项工作。你可以用一个列表来表示每个手牌,索引 0 是最下面的牌。然后,您可以使用 list.pop() 方法来获取和移除列表中的最后一张牌(可见的一张),当它在棋盘上播放时。
对于囤积,如果我理解正确的话,你可以在任何堆栈中获取任何卡片(除了最上面的那张,它是可见的),把它拿出来放在空堆栈的顶部(这将是一个空列表)。你可以这样做:
firstList[0] = chosenCard #Get the chosen card from the first pile
del firstList[0] #Delete the downmost card. The new list will have element
#firstList[0] equal to the old firstList[1], like a stack
secondList.append(chosenCard) #Add the card to the end of the list (top of the stack)