python实现斗地主发牌

该代码定义了一个斗地主游戏类,包括创建扑克牌、发牌、选择地主和分配底牌的功能。使用随机数生成器为三位玩家分配手牌,然后按顺序将剩余的底牌给选定的地主。最后,对玩家的手牌进行排序并显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 代码如下

import random
#定义扑克牌,也可以用for循环输出
Poker = ['♦3', '♣3', '♥3', '♠3',
         '♦4', '♣4', '♥4', '♠4',
         '♦5', '♣5', '♥5', '♠5',
         '♦6', '♣6', '♥6', '♠6',
         '♦7', '♣7', '♥7', '♠7',
         '♦8', '♣8', '♥8', '♠8',
         '♦9', '♣9', '♥9', '♠9',
         '♦10', '♣10', '♥10', '♠10',
         '♦J', '♣J', '♥J', '♠J',
         '♦Q', '♣Q', '♥Q', '♠Q',
         '♦K', '♣K', '♥K', '♠K',
         '♦A', '♣A', '♥A', '♠A',
         '♦2', '♣2', '♥2', '♠2',
         'BlackJoker','RedJoker']
pai = []
#从大到小排列
for i in range(0,54):
    pai.append(Poker[53-i])
class doudizhu():#定义doudizhu类
    def __init__(self):#定义a,b,c,分别为玩家1,2,3的手牌
        self.a = []
        self.b = []
        self.c = []
    def fapai(self):#定义发牌函数,三个人随机取17张,剩下的Poker中为三张底牌
        for i in range(0,17):
            t = random.randint(0,53-i)
            self.a.append(Poker[t])
            Poker.pop(t)
        for i in range(0, 17):
            t = random.randint(0, 36 - i)
            self.b.append(Poker[t])
            Poker.pop(t)
        for i in range(0, 17):
            t = random.randint(0, 19 - i)
            self.c.append(Poker[t])
            Poker.pop(t)
    def choosedizhu(self):#定义选地主类,随机一位玩家为地主
        dizhu = random.randint(1,3)
        if dizhu == 1:
            player1 = "地主"
        else:player1 = "农民"
        if dizhu == 2:
            player2 = "地主"
        else:player2 = "农民"
        if dizhu == 3:
            player3 = "地主"
        else:player3 = "农民"
        # 要调用到其他函数中
        #类里面的方法想调用另外一个方法,需要在方法体中用self.方法名的方式来调用
        #同样,类里面的方法想调用类的属性,需要用self.属性名的方式
        start.player1 = player1
        start.player2 = player2
        start.player3 = player3
    def givedizhupai(self):#定义发三张底牌给地主的函数
        self.choosedizhu()
        '''
        print(Poker)
        print(self.player1)
        print(self.player2)
        print(self.player3)
        '''
        dizhupai = [Poker[0],Poker[1],Poker[2]]
        if self.player1 == "地主":
            for i in dizhupai:
                self.a.append(i)
        if self.player2 == "地主":
            for i in dizhupai:
                self.b.append(i)
        if self.player3 == "地主":
            for i in dizhupai:
                self.c.append(i)
        '''
        print(self.a)
        print(self.b)
        print(self.c)
        '''
    def sortpai(self):#定义给牌排序的函数
        self.givedizhupai()
        # 用列表推导式,在pai中选出a/b/c中有的牌
        #如果在pai列表中for循环删除,会出现有漏删的情况
        A = [i for i in pai if i in self.a]
        B = [i for i in pai if i in self.b]
        C = [i for i in pai if i in self.c]
        print('玩家1:', self.player1, A)
        print('玩家2:', self.player2, B)
        print('玩家3:', self.player3, C)
if __name__ == '__main__':#作为脚本直接运行
    start = doudizhu()#便于实例化
    start.fapai()
    start.sortpai()
print('底牌是:{} {} {}'.format(Poker[0],Poker[1],Poker[2]))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力中的代码人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值