【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()
相关推荐
(・Д・)ノ39 分钟前
python打卡day22
python
achene_ql1 小时前
深入探索 RKNN 模型转换之旅
python·目标检测·rk3588·模型部署·rk3566
@十八子德月生2 小时前
8天Python从入门到精通【itheima】-1~5
大数据·开发语言·python·学习
每天一个秃顶小技巧3 小时前
02.Golang 切片(slice)源码分析(一、定义与基础操作实现)
开发语言·后端·python·golang
安特尼4 小时前
招行数字金融挑战赛数据赛道赛题一
人工智能·python·机器学习·金融·数据分析
serve the people4 小时前
解决osx-arm64平台上conda默认源没有提供 python=3.7 的官方编译版本的问题
开发语言·python·conda
多多*5 小时前
Java反射 八股版
java·开发语言·hive·python·sql·log4j·mybatis
正在走向自律5 小时前
从0到1:Python机器学习实战全攻略(8/10)
开发语言·python·机器学习
西西弗Sisyphus6 小时前
Python 处理图像并生成 JSONL 元数据文件 - 灵活text版本
开发语言·python
Taichi呀6 小时前
PyCharm 快捷键指南
ide·python·pycharm