扑克牌游戏-比大小(类学习)

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):
        # suit和value值都为整数型
        self.value=v
        self.suit=s

    def __lt__(self,c2):            #比较2张牌的方法,覆盖类Object小于方法
        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):        #比较2张牌的方法,大于
            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 __repr__(self):
        v=self.values[self.value]+" of "+self.suits[self.suit]
        return v

class Deck:                                   #牌堆类
    def __init__(self):
        self.cards=[]
        for i in range(2,15):
            for j in range(4):
                self.cards.append(Card(i,j))
        shuffle(self.cards)               #随机排列扑克牌

    def rm_card(self):
        if len(self.cards)==0:
            return                #牌堆里没有牌则返回None
        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):
        w="{} wins this round.".format(winner)
        print(w)

    def draw(self,p1n,p1c,p2n,p2c):
        d="{} drew {} {} drew {}".format(p1n,p1c,p2n,p2c)
        print(d)

    def play_game(self):
        cards=self.deck.cards
        print("beginning War!")
        while len(cards)>=2:
            m="q to quit,Any"+"key to play:"
            response=input(m)
            if response=="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)
        if win=="It was a tie!":
            print(win)
        else:
            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!"

game=Game()
game.play_game()
              

 

posted @ 2022-11-28 22:12  【小桥流水人家】  阅读(600)  评论(0编辑  收藏  举报