【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()
相关推荐
知行合一。。。3 小时前
Python--04--数据容器(总结)
开发语言·python
架构师老Y3 小时前
008、容器化部署:Docker与Python应用打包
python·容器·架构
lifewange4 小时前
pytest-类中测试方法、多文件批量执行
开发语言·python·pytest
pluvium274 小时前
记对 xonsh shell 的使用, 脚本编写, 迁移及调优
linux·python·shell·xonsh
2401_827499994 小时前
python项目实战09-AI智能伴侣(ai_partner_5-6)
开发语言·python
PD我是你的真爱粉4 小时前
MCP 协议详解:从架构、工作流到 Python 技术栈落地
开发语言·python·架构
ZhengEnCi5 小时前
P2G-Python字符串方法完全指南-split、join、strip、replace的Python编程利器
python
是小蟹呀^5 小时前
【总结】LangChain中工具的使用
python·langchain·agent·tool
宝贝儿好5 小时前
【LLM】第二章:文本表示:词袋模型、小案例:基于文本的推荐系统(酒店推荐)
人工智能·python·深度学习·神经网络·自然语言处理·机器人·语音识别
王夏奇5 小时前
pythonUI界面弹窗设置的几种办法
python·ui