用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