【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()
相关推荐
无闻墨客8 分钟前
数据可视化(matplotlib)-------图表样式美化
python·信息可视化·matplotlib
www_pp_20 分钟前
使用Python和OpenCV进行指纹识别与验证
开发语言·python·opencv
HKkuaidou27 分钟前
外星人入侵(python设计小游戏)
python·pygame
豌豆花下猫28 分钟前
Python 潮流周刊#95:像人类一样使用计算机(摘要)
后端·python·ai
测试杂货铺43 分钟前
白盒测试用例的设计
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·测试用例
java资料站1 小时前
linux ntpdate 时间矫正
linux·运维·python
唐古乌梁海1 小时前
【Django】教程-3-数据库相关介绍
python·django
vener_1 小时前
基于Flask的通用登录注册模块,并代理跳转到目标网址
后端·python·flask
Lonwayne1 小时前
当编程语言有了人格
java·javascript·c++·python·php
聪明的一休丶1 小时前
MCP Server 实现一个 天气查询
python·llm·aigc·mcp