Python 纸牌游戏

纸牌游戏

# card.py

from random import shuffle

class Card:
    # 黑桃,红桃,方块,梅花
    suits = ['spades', 'hearts', 'diamonds', 'clubs']

    values = [None, None, '2', '3', '4', '5', '6', '7', '8', '9', '10', '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()

猜你喜欢

转载自www.cnblogs.com/noonjuan/p/10849414.html