# 扑克游戏
from random import randrange
'''
suite 英[swiːt]
美[swiːt]
n. (尤指旅馆的) 一套房间,套房; 一套家具; 组曲(由三个或更多相关部分组成);
[例句]They had a fabulous time during their week in a suite at the Paris Hilton.
他们在巴黎希尔顿酒店的套房里度过了非常愉快的一周。
[其他] 复数:suites
'''
class Card(object):
# 一张牌
def __init__(self, suite, face):
self._suite = suite
self._face = face
@property
def suite(self):
return self.suite
@property
def face(self):
return self._face
def __str__(self):
all_suites = ('♤', '♡', '♣', '♦')
if self._face == 1:
face_str = 'A'
elif self._face == 11:
face_str = 'J'
elif self._face == 12:
face_str = 'Q'
elif self._face == 13:
face_str = 'K'
else:
face_str = str(self._face)
return '%s%s' % (all_suites[self._suite], face_str)
class Poker(object):
"""一副牌"""
def __init__(self):
self._cards = []
self._current = 0
for suite in range(4):
for face in range(1, 14):
card = Card(suite, face)
self._cards.append(card)
@property
def card(self):
return self._cards
def shuffle(self):
"""洗牌,随机乱序"""
self._current = 0
cards_len = len(self._cards)
for index in range(cards_len):
pos = randrange(cards_len)
self._cards[index], self._cards[pos] = self._cards[pos], self._cards[index]
@property
def next(self):
"""发牌"""
card = self._cards[self._current]
self._current += 1
return card
@property
def has_next(self):
"""还有没有牌"""
return self._current < len(self._cards)
class Player(object):
def __init__(self, name):
self._name = name
self._cards_on_hand = []
@property
def name(self):
return self._name
@property
def cards_on_hand(self):
return self._cards_on_hand
def get(self, card):
"""摸牌"""
self._cards_on_hand.append(card)
def arrange(self, card_key):
"""玩家整理手上的牌"""
self._cards_on_hand.sort(key=card_key)
# 排序规则 根据花色再根据点数排
def get_key(card):
return card.suite, card.face
def main():
p = Poker()
p.shuffle()
players = [Player('东邪'),Player('西毒'),Player('南帝'),Player('北丐')]
for _ in range(13):
for player in players:
player.get(p.next)
for player in players:
print(player.name+':', end=' ')
for card in player.cards_on_hand:
print(card, end=' ')
print()
if __name__ == '__main__':
main()