当前位置: 首页 > article >正文

python实现斗地主

斗地主发牌程序:
模拟一个斗地主发牌程序,实现对三个玩家进行手牌的派发,实现功能:

需要展示 玩家 的所有手牌,要求按照从小到大的顺序排序,相同点数的情况下,按照 黑桃 > 红桃 > 方片 > 梅花 的大小关系排列

import random


class Card:
    def __init__(self, point, color, big):
        self.color = color
        self.point = point
        self.big = big

    def __str__(self):
        return f"({self.point},{self.color})"

    def __repr__(self):
        return f"Card({self.point},{self.color})"


class Player:
    def __init__(self, name, listCard):
        self.name = name
        self.listCard = listCard

    def __str__(self):
        return f"({self.name},{self.listCard})"

    def __repr__(self):
        return f"Player({self.name},{self.listCard})"


def custom_sort(card1):
    return card1.point


listNum = ["3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"]
listColor = ["♣", "♦", "♥", "♠"]
listCard = []
i = 1
for num in listNum:
    for color in listColor:
        listCard.append(Card(num, color, i))
        i += 1
listCard.append(Card("🃏", "红", 200))
listCard.append(Card("🃏", "黑", 100))



print("*" * 10 + " 欢迎进入 XX 斗地主 " + "*" * 10)
aName = input("请输入A玩家姓名:")
aListCard = []
bName = input("请输入B玩家姓名:")
bListCard = []
cName = input("请输入B玩家姓名:")
cListCard = []
print("洗牌中...")
print("洗牌完成!")

print("发牌中...")



while len(listCard) != 3:
    if (len(listCard) - 3) % 3 == 0:
        index = random.randint(0, len(listCard) - 1)
        aListCard.append(listCard.pop(index))
    elif (len(listCard) - 3) % 3 == 1:
        index = random.randint(0, len(listCard) - 1)
        bListCard.append(listCard.pop(index))
    elif (len(listCard) - 3) % 3 == 2:
        index = random.randint(0, len(listCard) - 1)
        cListCard.append(listCard.pop(index))

print("发牌完成!")
landName = input("谁叫地主?")
if landName == aName:
    aListCard.extend(listCard)
elif landName == bName:
    bListCard.extend(listCard)
else:
    cListCard.extend(listCard)

listCard.sort(key=lambda card: card.big)
aListCard.sort(key=lambda card: card.big)
bListCard.sort(key=lambda card: card.big)
cListCard.sort(key=lambda card: card.big)
aPlayer = Player(aName, aListCard)
bPlayer = Player(bName, bListCard)
cPlayer = Player(cName, cListCard)
print(listCard)
print(aPlayer)
print(bPlayer)
print(cPlayer)
********** 欢迎进入 XX 斗地主 **********
请输入A玩家姓名:zhangsan
请输入B玩家姓名:lisi
请输入B玩家姓名:wangwu
洗牌中...
洗牌完成!
发牌中...
发牌完成!
谁叫地主?zhangsan
[Card(7,♦), Card(9,♦), Card(2,♣)]
(zhangsan,[Card(3,♥), Card(3,♠), Card(4,♣), Card(4,♠), Card(5,♣), Card(5,♦), Card(5,♥), Card(7,♦), Card(8,♥), Card(9,♦), Card(10,♣), Card(10,♥), Card(J,♦), Card(J,♥), Card(Q,♣), Card(K,♣), Card(K,♦), Card(K,♠), Card(A,♦), Card(2,♣)])
(lisi,[Card(3,♣), Card(4,♦), Card(4,♥), Card(5,♠), Card(6,♦), Card(6,♥), Card(7,♣), Card(7,♥), Card(9,♣), Card(9,♥), Card(10,♠), Card(J,♠), Card(Q,♦), Card(Q,♥), Card(Q,♠), Card(2,♠), Card(🃏,黑)])
(wangwu,[Card(3,♦), Card(6,♣), Card(6,♠), Card(7,♠), Card(8,♣), Card(8,♦), Card(8,♠), Card(9,♠), Card(10,♦), Card(J,♣), Card(K,♥), Card(A,♣), Card(A,♥), Card(A,♠), Card(2,♦), Card(2,♥), Card(🃏,红)])


http://www.kler.cn/news/365768.html

相关文章:

  • Spark 的 Http Broadcast 和 Torrent Broadcast 广播实现类的对比
  • 模型选择拟合
  • Github 2024-10-25 Java开源项目日报 Top8
  • 集群分发脚本
  • 循环双链表,将L改造为L=(a1,a3,…,an,a4,a2)
  • 排查PHP服务器CPU占用率高的问题
  • qt项目使用其他项目的.ui之指针
  • RabbitMQ安装部署
  • Elliott Wave Prophet,艾略特波浪预测指标!预测未来走势!免费公式!(指标教程)
  • 考研篇——数据结构王道3.2.2_队列的顺序实现
  • 大一物联网要不要转专业,转不了该怎么办?
  • Scala的多态:定义,作用,实现手法
  • AUTOSAR从入门到精通-英飞凌GTM模块
  • Go语言生成UUID的利器:github.com/google/uuid
  • Node.js 路由
  • 文本预处理——构建词云
  • 【云效】阿里云云效:一站式DevOps平台介绍与使用教程(图文)附PPT
  • 2024 项目管理工具大变革:Jira 的替代者是谁?
  • 【数据分享】全国各省份农业-瓜果类面积(1993-2018年)
  • Python+Django+VUE 搭建深度学习训练界面 (持续ing)
  • CRLF、UTF-8这些编辑器右下角的选项的意思
  • STM32Lx GXHT3x SHT3x iic 驱动开发应用详解
  • 【Git】将本地代码提交到github仓库
  • 【Unity 安装教程】
  • Node.js 进阶:V8 垃圾回收机制全解析
  • ClickHouse与各种组件的关系