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

news/2024/10/24 18:20:30/

文章目录

  • 一、如何洗牌
    • 思路
    • 洗牌方法的所有代码
  • 二、如何排序扑克牌
    • 思路
    • 排序方法的所有代码
  • 三、如何叫地主
    • 思路
    • 叫地主的所有代码
  • 四、全部代码


一、如何洗牌

思路

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 = 0for 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 + dizhuListnewPlayerOneList = 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 + dizhuListnewPlayerOneList = 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 + dizhuListnewPlayerOneList = 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 = 0for 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 += 1def 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 pokerWeightListdef lookPoker(dizhu):if dizhu == playerOne:playerOneList1 = playerOneList + dizhuListnewPlayerOneList = 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 + dizhuListnewPlayerOneList = 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 + dizhuListnewPlayerOneList = 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()

http://www.ppmy.cn/news/1541634.html

相关文章

MacOS RocketMQ安装

MacOS RocketMQ安装 文章目录 MacOS RocketMQ安装一、下载二、安装修改JVM参数启动关闭测试关闭测试测试收发消息运行自带的生产者测试类运行自带的消费者测试类参考博客:https://blog.csdn.net/zhiyikeji/article/details/140911649 一、下载 打开官网,…

PPT自动化:掌握 python-pptx 的基础元素

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 PPT 📒📝 什么是 Slide?📝 了解 Shape📝 深入 Paragraph📝 探索 Run⚓️ 相关链接 ⚓️📖 介绍 📖 初学python-pptx,掌握 python-pptx 与 PPT 元素的对应关系是至关重要的一步。今天,我们一起来了解一下 PPT 中…

软考(网工)——网络安全

文章目录 🕐网络安全基础1️⃣网络安全威胁类型2️⃣网络攻击类型 🕑现代加密技术1️⃣私钥密码/对称密码体制2️⃣对称加密算法总结3️⃣公钥密码/非对称密码4️⃣混合密码5️⃣国产加密算法 - SM 系列6️⃣认证7️⃣基于公钥的认证 🕒Hash …

若依框架vue3模板

若依框架vue3模板&#xff0c;包含新增、修改、删除、搜索、导出等功能 <template><div class"app-container"><el-form :model"queryParams" ref"queryRef" :inline"true" v-show"showSearch" label-width…

前端遮罩层的应用

最近微信小程序需要开发新手引导功能&#xff0c;发现需要在遮罩层中间抠一个洞出来&#xff0c;但是一直不知道该怎么去做&#xff0c;其实很简单&#xff0c;先展示源码&#xff1a; <template><div class"num01">hello<div class"mask"&…

vue父子传参的方式——Prop

Prop 每一个组件都有一个props的属性&#xff0c;用来接收外部传递的数据 这里我拿一个分页组件为例&#xff1a; 一、基础语法 1、父组件传递数据 父组件在向子组件传递数据时&#xff0c;基础语法如下&#xff1a; <template><div><common-page :pagina…

VS Code用SSH连不上Linux,并且使用其他SSH登录主机时命令行代码无法补全

输入df -h查看磁盘空间 Filesystem Size Used Avail Use% Mounted on devtmpfs 6.8G 0 6.8G 0% /dev tmpfs 6.8G 0 6.8G 0% /dev/shm tmpfs 6.8G 97M 6.7G …

解锁PDF权限密码

目录 背景: 定义与功能&#xff1a; 过程&#xff1a; 主要功能&#xff1a; 使用方式&#xff1a; 使用限制&#xff1a; 注意事项&#xff1a; 总结&#xff1a; 背景: 前段时间自己设置了PDF文件的许可口令&#xff0c;忘了口令导致自己无法编辑内容等&#xff0c;这…