98 lines
2.1 KiB
Python
98 lines
2.1 KiB
Python
"""
|
|
面向对象
|
|
枚举 - 一个变量的值只有有限个选择,最适合的类型就是枚举
|
|
通过枚举我们可以定义符号常量,符号常量优于字面常量
|
|
"""
|
|
from enum import Enum, unique
|
|
|
|
import random
|
|
|
|
|
|
@unique
|
|
class Suite(Enum):
|
|
"""花色(枚举)"""
|
|
SPADE, HEART, CLUB, DIAMOND = range(4)
|
|
|
|
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()
|