【python实现扑克牌小游戏】python使用权重排序扑克牌

文章目录


一、如何洗牌

思路

1、准备一副有序的牌(使用list来实现)

2、遍历这个list,并将遍历到的元素放入set集合中就能将牌打乱

3、再将其分为四部分(三个玩家牌和地主牌)

洗牌方法的所有代码

python 复制代码
pokerList = []
playerOneList = []
playerTwoList = []
playerThreeList = []
dizhuList = []
def shufflePoker():
    pokerSet = set()
    colourList = ["♣","♠","♦","♥"]
    numList = ["3","4","5","6","7","8","9","10","J","Q","K","A","2"]
    for num in numList:
        for colour in colourList:
            pokerList.append(colour + num)
    pokerList.append("小王")
    pokerList.append("大王")

    for poker in pokerList:
        pokerSet.add(poker)

    count = 0
    for poker in pokerSet:
        if count == 51 or count == 52 or count == 53:
            dizhuList.append(poker)
        elif count % 3 == 0:
            playerOneList.append(poker)
        elif count % 3 == 1:
            playerTwoList.append(poker)
        elif count % 3 == 2:
            playerThreeList.append(poker)
        count += 1

二、如何排序扑克牌

思路

1、设置两个字典dict,里面定义每个花色和扑克数的权重(大小王的权重额外定义):

python 复制代码
num_weights = {"3":1,"4":2,"5":3,"6":4,"7":5,"8":6,"9":7,"10":8,"J":9,"Q":10,"K":11,"A":12,"2":13}
colour_weight = {"♣":1,"♠":2,"♦":3,"♥":4}

2、循环洗完牌之后的集合,计算集合中每张牌的权重:

因为花色和扑克数都有权重,所以用元组(tuple)接收权重最合适,使用list也可以

python 复制代码
	weightList = []
    for poker in playerList:
    	# 大小王的花色和扑克数的权重额外定义
        if poker == "小王":
            weightList.append((14,5))
        elif poker == "大王":
            weightList.append((15,6))
        else:
            poker_colour = poker[:1]
            poker_num = poker[1:]
            # 使用元组接收权重
            weightList.append((num_weights[poker_num],colour_weight[poker_colour]))

3、将转变之后的权重排序:

python 复制代码
sortedWeightList = sorted(weightList)

4、将排序之后的list中的每个元组元素转变为对应的花色和扑克数(在第一步定义的字典中查找):

使用python推导式来获取

排序之后的list循环出来是一个个元组

python 复制代码
pokerWeightList = []
	# 循环遍历出来的是一个个元组
    for poker in sortedWeightList:
        if poker[0] == 14:
            pokerWeightList.append("小王")
        elif poker[0] == 15:
            pokerWeightList.append("大王")
        else:
            colour = [k for k,v in colour_weight.items() if int(poker[1]) == v]
            num = [k for k,v in num_weights.items() if int(poker[0]) == v]
            str1 = colour[0] + num[0]
            pokerWeightList.append(str1)

排序方法的所有代码

python 复制代码
def sortPoker(playerList):
    num_weights = {"3":1,"4":2,"5":3,"6":4,"7":5,"8":6,"9":7,"10":8,"J":9,"Q":10,"K":11,"A":12,"2":13}
    colour_weight = {"♣":1,"♠":2,"♦":3,"♥":4}
    weightList = []
    for poker in playerList:
        if poker == "小王":
            weightList.append((14,5))
        elif poker == "大王":
            weightList.append((15,6))
        else:
            poker_colour = poker[:1]
            poker_num = poker[1:]
            weightList.append((num_weights[poker_num],colour_weight[poker_colour]))

    sortedWeightList = sorted(weightList)
    pokerWeightList = []
    for poker in sortedWeightList:
        if poker[0] == 14:
            pokerWeightList.append("小王")
        elif poker[0] == 15:
            pokerWeightList.append("大王")
        else:
            colour = [k for k,v in colour_weight.items() if int(poker[1]) == v]
            num = [k for k,v in num_weights.items() if int(poker[0]) == v]
            str1 = colour[0] + num[0]
            pokerWeightList.append(str1)
    return pokerWeightList

三、如何叫地主

思路

输入抢地主的玩家,然后判断输入内容为哪个玩家,并将地主牌和这个玩家的牌合并:

叫地主的所有代码

python 复制代码
def lookPoker(dizhu):
    if dizhu == playerOne:
        playerOneList1 = playerOneList + dizhuList
        newPlayerOneList = sortPoker(playerOneList1)
        newPlayerTwoList = sortPoker(playerTwoList)
        newPlayerThreeList = sortPoker(playerThreeList)
        print(f'{playerOne}玩家的牌是:' + ','.join(newPlayerOneList))
        print(f'{playerTwo}玩家的牌是:' + ','.join(newPlayerTwoList))
        print(f'{playerThree}玩家的牌是:' + ','.join(newPlayerThreeList))
    elif dizhu == playerTwo:
        playerTwoList1 = playerTwoList + dizhuList
        newPlayerOneList = sortPoker(playerOneList)
        newPlayerTwoList = sortPoker(playerTwoList1)
        newPlayerThreeList = sortPoker(playerThreeList)
        print(f'{playerOne}玩家的牌是:' + ','.join(newPlayerOneList))
        print(f'{playerTwo}玩家的牌是:' + ','.join(newPlayerTwoList))
        print(f'{playerThree}玩家的牌是:' + ','.join(newPlayerThreeList))
    elif dizhu == playerThree:
        playerThreeList1 = playerThreeList + dizhuList
        newPlayerOneList = sortPoker(playerOneList)
        newPlayerTwoList = sortPoker(playerTwoList)
        newPlayerThreeList = sortPoker(playerThreeList1)
        print(f'{playerOne}玩家的牌是:' + ','.join(newPlayerOneList))
        print(f'{playerTwo}玩家的牌是:' + ','.join(newPlayerTwoList))
        print(f'{playerThree}玩家的牌是:' + ','.join(newPlayerThreeList))
    else:
        print("没有这个玩家!!!")

四、全部代码

python 复制代码
pokerList = []
playerOneList = []
playerTwoList = []
playerThreeList = []
dizhuList = []
def shufflePoker():
    pokerSet = set()
    colourList = ["♣","♠","♦","♥"]
    numList = ["3","4","5","6","7","8","9","10","J","Q","K","A","2"]
    for num in numList:
        for colour in colourList:
            pokerList.append(colour + num)
    pokerList.append("小王")
    pokerList.append("大王")

    for poker in pokerList:
        pokerSet.add(poker)

    count = 0
    for poker in pokerSet:
        if count == 51 or count == 52 or count == 53:
            dizhuList.append(poker)
        elif count % 3 == 0:
            playerOneList.append(poker)
        elif count % 3 == 1:
            playerTwoList.append(poker)
        elif count % 3 == 2:
            playerThreeList.append(poker)
        count += 1


def sortPoker(playerList):
    num_weights = {"3":1,"4":2,"5":3,"6":4,"7":5,"8":6,"9":7,"10":8,"J":9,"Q":10,"K":11,"A":12,"2":13}
    colour_weight = {"♣":1,"♠":2,"♦":3,"♥":4}
    weightList = []
    for poker in playerList:
        if poker == "小王":
            weightList.append((14,5))
        elif poker == "大王":
            weightList.append((15,6))
        else:
            poker_colour = poker[:1]
            poker_num = poker[1:]
            weightList.append((num_weights[poker_num],colour_weight[poker_colour]))

    sortedWeightList = sorted(weightList)
    pokerWeightList = []
    for poker in sortedWeightList:
        if poker[0] == 14:
            pokerWeightList.append("小王")
        elif poker[0] == 15:
            pokerWeightList.append("大王")
        else:
            colour = [k for k,v in colour_weight.items() if int(poker[1]) == v]
            num = [k for k,v in num_weights.items() if int(poker[0]) == v]
            str1 = colour[0] + num[0]
            pokerWeightList.append(str1)
    return pokerWeightList

def lookPoker(dizhu):
    if dizhu == playerOne:
        playerOneList1 = playerOneList + dizhuList
        newPlayerOneList = sortPoker(playerOneList1)
        newPlayerTwoList = sortPoker(playerTwoList)
        newPlayerThreeList = sortPoker(playerThreeList)
        print(f'{playerOne}玩家的牌是:' + ','.join(newPlayerOneList))
        print(f'{playerTwo}玩家的牌是:' + ','.join(newPlayerTwoList))
        print(f'{playerThree}玩家的牌是:' + ','.join(newPlayerThreeList))
    elif dizhu == playerTwo:
        playerTwoList1 = playerTwoList + dizhuList
        newPlayerOneList = sortPoker(playerOneList)
        newPlayerTwoList = sortPoker(playerTwoList1)
        newPlayerThreeList = sortPoker(playerThreeList)
        print(f'{playerOne}玩家的牌是:' + ','.join(newPlayerOneList))
        print(f'{playerTwo}玩家的牌是:' + ','.join(newPlayerTwoList))
        print(f'{playerThree}玩家的牌是:' + ','.join(newPlayerThreeList))
    elif dizhu == playerThree:
        playerThreeList1 = playerThreeList + dizhuList
        newPlayerOneList = sortPoker(playerOneList)
        newPlayerTwoList = sortPoker(playerTwoList)
        newPlayerThreeList = sortPoker(playerThreeList1)
        print(f'{playerOne}玩家的牌是:' + ','.join(newPlayerOneList))
        print(f'{playerTwo}玩家的牌是:' + ','.join(newPlayerTwoList))
        print(f'{playerThree}玩家的牌是:' + ','.join(newPlayerThreeList))
    else:
        print("没有这个玩家!!!")




print("************* 欢迎进入 欢乐 斗地主 *************")
playerOne = input("请输入第一位玩家的姓名")
playerTwo = input("请输入第二位玩家的姓名")
playerThree = input("请输入第三位玩家的姓名")
def pokerMain():
    print("-"*50)
    print("洗牌中。。。")
    print("-" * 50)
    shufflePoker()
    print("洗牌完成")
    print("-" * 50)
    print("发牌中。。。")
    print("-" * 50)
    print("发牌完成")
    print("-" * 50)

    dizhu = input("请输入叫地主的玩家:")
    lookPoker(dizhu)

pokerMain()
相关推荐
纨妙几秒前
python打卡day59
开发语言·python
waynaqua1 分钟前
FastAPI开发AI应用二:多厂商模型使用指南
python·openai
秋难降4 分钟前
Python 知识 “八股”:给有 C 和 Java 基础的你😁😁😁
java·python·c
FF-Studio17 分钟前
大语言模型(LLM)课程学习(Curriculum Learning)、数据课程(data curriculum)指南:从原理到实践
人工智能·python·深度学习·神经网络·机器学习·语言模型·自然语言处理
像风一样的男人@37 分钟前
python --货车装厢问题
开发语言·python
Y1nhl1 小时前
力扣_链表_python版本
开发语言·python·算法·leetcode·链表·职场和发展
qianbo_insist2 小时前
c++ python 共享内存
开发语言·c++·python
凌览2 小时前
有了 25k Star 的MediaCrawler爬虫库加持,三分钟搞定某红书、某音等平台爬取!
前端·后端·python
这里有鱼汤2 小时前
给你的DeepSeek装上实时行情,让他帮你炒股
后端·python·mcp
Tomorrow'sThinker3 小时前
[特殊字符] Excel 读取收件人 + Outlook 批量发送带附件邮件 —— Python 自动化实战
python·excel·outlook