| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- """
- 面向对象
- 枚举 - 一个变量的值只有有限个选择,最适合的类型就是枚举
- 通过枚举我们可以定义符号常量,符号常量优于字面常量
- """
- from enum import Enum, unique
- import random
- @unique
- class Suite(Enum):
- """花色(枚举)"""
- SPADE = 0
- HEART = 1
- CLUB = 2
- DIAMOND = 3
- def __lt__(self, other):
- return self.value < other.value
- class Card():
- """牌"""
-
- def __init__(self, suite, face):
- self.suite = suite
- self.face = face
- def __repr__(self):
- return self.__str__()
- def __str__(self):
- suites = ('♠️', '♥️', '♣️', '♦️')
- faces = ('', 'A', '2', '3', '4', '5', '6',
- '7', '8', '9', '10', 'J', 'Q', 'K')
- return f'{suites[self.suite.value]} {faces[self.face]}'
- class Poker():
- """扑克"""
-
- def __init__(self):
- self.index = 0
- self.cards = [Card(suite, face)
- for suite in Suite
- for face in range(1, 14)]
- def shuffle(self):
- """洗牌"""
- self.index = 0
- random.shuffle(self.cards)
- def deal(self):
- """发牌"""
- card = self.cards[self.index]
- self.index += 1
- return card
- @property
- def has_more(self):
- """是否有更多的牌"""
- return self.index < len(self.cards)
- class Player():
- """玩家"""
- def __init__(self, name):
- self.name = name
- self.cards = []
- def get_card(self, card):
- """摸牌"""
- self.cards.append(card)
- def arrange(self):
- """整理手上的牌"""
- self.cards.sort(key=lambda card: (card.suite, card.face))
- def main():
- """主函数"""
- poker = Poker()
- poker.shuffle()
- players = [
- Player('东邪'), Player('西毒'),
- Player('南帝'), Player('北丐')
- ]
- while poker.has_more:
- for player in players:
- player.get_card(poker.deal())
- for player in players:
- player.arrange()
- print(player.name, end=': ')
- print(player.cards)
- if __name__ == '__main__':
- main()
|