用python存储纸牌和套装的最佳方式是什么,以便我可以在另一个变量中保存对这些值的引用?例如,如果我有一个名为hand(手牌)的列表,我怎样才能保存可以引用特定卡牌的套装和值的名称的值,以及这些名称和套装值以及卡被储存?用python实现纸牌游戏套牌的最佳方式
回答
最简单的事情是使用元组,其中卡INTS的列表和西装是字符串:
hand = [(1, 'spade'), (10, 'club'), ...]
但最简单的可能不是你想要的。也许你想要一个班级代表一张卡片:
class Card:
def __init__(self, rank, suit):
self.rank = rank
self.suit = suit
def __repr__(self):
letters = {1:'A', 11:'J', 12:'Q', 13:'K'}
letter = letters.get(self.rank, str(self.rank))
return "<Card %s %s>" % (letter, self.suit)
hand = [Card(1, 'spade'), Card(10, 'club')]
你可以简单地使用一个数字,并决定数字和“卡”之间的映射。例如:
号MOD 13 =面值
数DIV 13 =套装(一个1之后)
应该指出的是,对于每张卡片,您都会使用0到51之间的值作为此方法。然后你可以为每个套装分配一个从0到3的数字。 – JSchlather 2010-03-25 19:43:26
扑克服务器倾向于使用2个字符的字符串来标识每个卡,这是很好的因为用编程方式处理很容易,而且对于人来说也很容易阅读。
>>> import random
>>> import itertools
>>> SUITS = 'cdhs'
>>> RANKS = '23456789TJQKA'
>>> DECK = tuple(''.join(card) for card in itertools.product(RANKS, SUITS))
>>> hand = random.sample(DECK, 5)
>>> print hand
['Kh', 'Kc', '6c', '7d', '3d']
编辑:这实际上是直接从扑克模块我写来评估扑克手,你可以看到更多在这里:http://pastebin.com/mzNmCdV5
优秀 - 正是我需要的!谢谢 – matt1024 2010-03-25 19:58:44
值得一提的是,您可以使用字符串:SUITS ='cdhs'和RANKS ='23456789TJQKA',而不是使用SUITS和RANK的元组。 – 2010-03-26 01:17:17
请注意,在这个例子中,牌不会被拿走,这意味着下一个玩家可以得到同样的牌。一个更现实的实现会让DECK成为一个列表,随机卡从中弹出来执行'DECK.pop(r)' – 2017-08-15 08:44:55
import collections
C, H, D, S = "CLUBS", "HEARTS", "DICE", "SPADE"
Card = collections.namedtuple("Card", "suit value")
hand = []
hand.append(Card(C, 3))
hand.append(Card(H, "A"))
hand.append(Card(D, 10))
hand.append(Card(S, "Q"))
for card in hand:
print(card.value, card.suit)
一副牌是由同一系列的的价值(1 - 13)四个西装,这表明笛卡尔产品。列表理解是这样一个优雅的,密集的语法:
values = range(1, 10) + "Jack Queen King".split()
suits = "Diamonds Clubs Hearts Spades".split()
deck_of_cards = ["%s of %s" % (v, s) for v in values for s in suits]
在Python 3:
deck_of_cards = ["{0} of {1}".format(v, s) for v in values for s in suits]
这就是他们是当你把一个全新的甲板开箱;玩你需要洗牌:
from random import shuffle
shuffle(deck_of_cards)
- 1. Mac OS X:实现纸牌游戏GUI的最佳方式
- 2. HTML5纸牌游戏
- 3. MySQL的RAND()足够用于纸牌游戏的“洗牌”牌套牌吗?
- 4. Bluej的纸牌游戏
- 5. vhdl testbench的纸牌游戏?
- 6. 简单的python纸牌游戏
- 7. 纸牌游戏设计
- 8. C,纸牌游戏WAR
- 9. 纸牌游戏模拟list.remove
- 10. HTML 5 Canvas纸牌游戏
- 11. c#,代表,纸牌游戏
- 12. 纸牌游戏设计
- 13. 纸牌游戏:win play
- 14. AI设计纸牌游戏
- 15. 为iPhone制作纸牌游戏的最佳框架是什么?
- 16. 不使用阵列的纸牌游戏
- 17. 如何翻转纸牌游戏中的纸牌?
- 18. Python卡牌游戏
- 19. 关于在html上实现纸牌游戏的建议
- 20. 用纸牌游戏OOP设计Quesiton
- 21. Prolog卡牌游戏:有效套牌
- 22. 如何根据用户的输入添加另一套牌到纸牌游戏
- 23. Java中的纸牌游戏问题
- 24. 在纸牌游戏中的mvc设计
- 25. 开发Android的在线纸牌游戏
- 26. 对单人纸牌游戏的建议
- 27. Android的纸牌游戏随机()
- 28. 与WCF和WPF的纸牌游戏
- 29. 更新纸牌游戏的分数
- 30. 用于我的纸牌游戏应用程序的最佳图书馆
你当然可以使用简单的元组或编码的字符串表示卡,但Ned Batchelder的回答给你更多的功能。如果你在开始像War这样的简单纸牌游戏之前开始进行像Poker这样更复杂的事情,你会看到定义一个Card类的价值,你可以在其中定义丰富的比较运算符,从而更容易比较ace和'10 ',而不是创建一些时髦的专业逻辑,试图比较“A”和王牌的“T”。还要注意,有些游戏有多种可能的值,比如21中的ace可以是1或11 。 – PaulMcG 2010-03-26 04:03:14