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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM