Influenced by this post http://qiita.com/jay/items/ee5bd3bbabb0d57f294d
Trump.py
import random
class Trump:
""" Trump Card class
"""
MARK_SPADE = 'S'
MARK_CLUB = 'C'
MARK_DIA = 'D'
MARK_HEART = 'H'
MARK_LIST = [MARK_SPADE, MARK_CLUB, MARK_DIA, MARK_HEART]
EFUDA_LIST = ['A'] + list(map(str, range(2, 11))) + ['J', 'Q', 'K', 'A']
card_stacks = []
def __init__(self, mark=None, num=None):
self.mark = mark if mark is not None else random.choice(Trump.MARK_LIST)
self.num = num if num is not None else random.randrange(1, 13)
def get_efuda(self):
return Trump.EFUDA_LIST[self.num]
def stack_init():
Trump.card_stacks = [Trump(mark=m, num=n + 1) for m in Trump.MARK_LIST for n in range(13)]
random.shuffle(Trump.card_stacks)
def stack_draw(num=1):
cards = Trump.card_stacks[0:num]
Trump.card_stacks = Trump.card_stacks[num:]
return cards
def __str__(self):
return "<Trump: %s-%s>" % (self.mark, self.get_efuda())
def __repr__(self):
return self.__str__()
class IndianTrump(Trump):
#It becomes stronger in the order of club <dia <heart <spade.
MARK_RANK = {Trump.MARK_SPADE: 4, Trump.MARK_CLUB: 1, Trump.MARK_DIA: 2, Trump.MARK_HEART: 3}
def __lt__(self, other):
if self.mark is not other.mark:
return IndianTrump.MARK_RANK[self.mark] < IndianTrump.MARK_RANK[other.mark]
return (self.num - 1) % 13 < (other.num - 1) % 13
def stack_init():
IndianTrump.card_stacks = [IndianTrump(mark=m, num=n + 1) for m in IndianTrump.MARK_LIST for n in range(13)]
random.shuffle(IndianTrump.card_stacks)
def stack_draw(num=1):
cards = IndianTrump.card_stacks[0:num]
IndianTrump.card_stacks = IndianTrump.card_stacks[num:]
return cards
def __str__(self):
return "<IndianTrump: %s-%s>" % (self.mark, self.get_efuda())
if __name__ == '__main__':
print("--- Trump Draw ---")
Trump.stack_init()
#Randomly draw 5 cards
cards = Trump.stack_draw(5)
print(cards)
print(len(cards))
#Draw all remaining cards
cards = Trump.stack_draw(52)
print(cards)
print(len(cards))
#The card is empty
cards = Trump.stack_draw()
print(cards)
print(len(cards))
#Reset stack
Trump.stack_init()
#Draw one card
cards = Trump.stack_draw()
print(cards)
print(len(cards))
print("--- Indian Porker ---")
IndianTrump.stack_init()
for i in range(8):
card_a, card_b = IndianTrump.stack_draw(2)
print("CardA: " + str(card_a), "CardB: " + str(card_b))
print("CardA %s CardB" % (">" if (card_a > card_b) else "<"), "\n")
Recommended Posts