# card.py
from random import shuffle
class Card:
# 黑桃,红桃,方块,梅花
suits = ['spades', 'hearts', 'diamonds', 'clubs']
values = [None, None, '', '', '', '', '', '', '', '', '', 'Jack', 'Queen', 'King', 'Ace']
def __init__(self, v, s):
"""suits和value的值都为整型数(index)"""
self.value = v
self.suit = s
def __lt__(self, c2):
"""less than"""
if self.value < c2.value:
return True
if self.value == c2.value:
if self.suit < c2.suit:
return True
else:
return False
return False
def __gt__(self, c2):
"""greater than"""
if self.value > c2.value:
return True
if self.value == c2.value:
if self.suit > c2.value:
return True
else:
return False
return False
def __repr__(self):
v = self.values[self.value] + ' of ' + self.suits[self.suit]
return v
class Deck:
def __init__(self):
# 将52张牌都添加到cards列表中
self.cards = []
for i in range(2, 15):
for j in range(4):
self.cards.append(Card(i, j))
# 调用shuffle方法洗牌(随机排列cards)
shuffle(self.cards)
def rm_card(self):
# 抽牌
if len(self.cards) == 0:
return
return self.cards.pop()
class Player:
def __init__(self, name):
self.wins = 0
self.card = None
self.name = name
class Game:
def __init__(self):
name1 = input('p1 name ')
name2 = input('p2 name ')
self.deck = Deck()
self.p1 = Player(name1)
self.p2 = Player(name2)
def wins(self, winner):
print("{} wins this round".format(winner))
def draw(self, p1n, p1c, p2n, p2c):
print("{} drew {}; {} drew {}".format(p1n, p1c, p2n, p2c))
def play_game(self):
cards = self.deck.cards
print('beginning War!')
while len(cards) >= 2:
response = input('q to quit. Any key to play:')
if response.lower() =='q':
break
p1c = self.deck.rm_card()
p2c = self.deck.rm_card()
p1n = self.p1.name
p2n = self.p2.name
self.draw(p1n, p1c, p2n, p2c)
if p1c > p2c:
self.p1.wins += 1
self.wins(self.p1.name)
else:
self.p2.wins += 1
self.wins(self.p2.name)
win = self.winner(self.p1, self.p2)
print('War is over. {} wins'.format(win))
def winner(self, p1, p2):
if p1.wins > p2.wins:
return p1.name
if p1.wins < p2.wins:
return p2.name
return 'It was a tie!'
if __name__ == '__main__':
game = Game()
game.play_game()