Python设计诈金花游戏

2023-10-08 12:59
文章标签 python 设计 游戏 金花

本文主要是介绍Python设计诈金花游戏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

诈金花游戏也叫做炸三张或者是三张牌,是风靡全球的一种比较流行的扑克牌游戏玩法,这种玩法比较简单,老少皆宜,受到了广大网友的喜爱。在诈金花游戏中,玩家想要取得胜利,要凭借自己的智慧和判断力。

一、规则

不同地区会有所不同。本篇以如下规则编写。

1、牌点大小

从大到小依次为:

A、K、Q、J、10、9、8、7、6、5、4、3、2

2、牌型

诈金花游戏中的牌型一般有6种,从大到小依次为:

1.豹子。也就是三张完全一样的牌,其中三个A是最大的,三个2是最小的。

2.顺金。即同花顺,指的是三张牌,上面的点数是连续排列的,而且花色相同。最大的牌型是AKQ,最小的牌型是A23。注意A使用了两次,AKQ中A权值最大,A23中的A权值最小(此时当1用)。

3.同花。指的是三张牌,花色完全相同。其中牌型最大的是AKQ,最小的是352。

4.顺子。指的是三张牌牌面上的点数是连续的,但是花色不同。其中AKQ最大,A23最小,A与顺金处理相同。

5.对子。指的是三张牌中有两张牌是一对,也就是点数相同。盘面最大的是AAK,最小的是223。当对子相当时比较单张。

6.单张牌。出现单张牌的情况下,最大的牌是AKJ,最小的是352。

7.当牌型和点数相同,以花式大小作为比较依据,花式从大到小依次为:

♦、

扑克牌花式输入码如下:

图1 Python处理扑克牌花式符号

也可以从Word中输入复制到Python。

插入→符号→“字体”选“Arial”然后选“子集”为“其他符号”,从中选取扑克牌花式符号(见图2)。

图2 在Word中输入扑克牌花式符号

二、玩法

1、诈金花游戏通常参与的玩家有2~6个人不等(一般5人)。

2、游戏所使用的扑克牌为一副扑克牌,除了大小王之外的52张牌,从庄家开始发牌,每名玩家三张牌。

3、按规则确定牌的大小,最大的为“赢”家。

三、思路

针对诈金花游戏这个问题,首先需要构造一副扑克牌,然后是发牌(本例是给每位玩家随机发三张,而不是按玩家发三轮)。

牌面排序,按'2'~'A'赋权值2~14,按权值排倒序,排序后的3张牌第1张赋权值100,第2张赋权值10,第3张权值为1。

牌面相同时按花式,牌面权值大于花式,所以花式权值赋小数,乘100后仍小于1,故取''为0.001, ''为0.002, ''为0.003, ''为0.004。

一级排序为牌型,按牌型大小赋值,'单张'为1, '对子'为2, '顺子'为3, '同花'为4, '顺金'为5, '豹子'为6。

各种排序权值保存在字典sort_dic中。

sort_dic = {'2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, '10': 10, 'J': 11, 'Q': 12, 'K': 13, 'A': 14,

            '': 0.001, '': 0.002, '': 0.003, '': 0.004,

            '单张': 1, '对子': 2, '顺子': 3, '同花': 4, '顺金': 5, '豹子': 6}

四、解决方案

用13张牌和四个花式生成一副52张牌,然后用随机数模块的sample ()方法:

random.sample(puke, 3)

生成每位玩家的3张牌。

然后按牌面点数值+花式值生成牌面值,再按牌面值排倒序,对三张牌进行排序(此时按点数排、点数相同按花式排)。

需要对特殊的A32进行调整,原因是A32是最小顺子,此时A当1用,调整为32A,A的牌面点数值由14调整为1(A的牌面点数值-13)。

然后判断牌型,对于“对子”,如后2张为“对子”,需将单张调整到最后。

由于“同花”高于“对子”,所以先判是否为“同花”再着判“对子”,即“对子同花”按“同花”论。

最后以一位“牌型”+“第1张牌牌面值*100+第2张牌牌面值*10+第3张牌牌面值”生成排序码,以排序码排倒序,确定玩家排序,求出“赢”家。

具体代码如下:

#############################################
# 设计 Zhang Ruilin   创建 2022-11-29 17:21 #
# 诈金花:一位玩家3张牌,分豹子、同花顺 (顺 #
# 金)、同花、顺子、对子和单张,A最大,2最小 #
#############################################
import randompuke = []		# 存储扑克牌
num_lst = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']
hua_lst = '♣♦♥♠'	# ['梅花', '方块', '红桃', '黑桃']sort_dic = {'2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8,'9': 9, '10': 10, 'J': 11, 'Q': 12, 'K': 13, 'A': 14,'♣': 0.001, '♦': 0.002, '♥': 0.003, '♠': 0.004,'单张': 1, '对子': 2, '顺子': 3, '同花': 4, '顺金': 5, '豹子': 6}
count_dic = {}		# 存储玩家排名# 生成52张扑克牌
for hua in hua_lst:for num in num_lst:puke.append(hua + num)
player_dic = {'玩家1': [], '玩家2': [], '玩家3': [], '玩家4': [], '玩家5': []}# 随机给五个玩家发牌
for key, value in player_dic.items():plate = random.sample(puke, 3)	# 从52张扑克中随机抽3张player_dic[key] = plate		# 发给指定玩家 for i in plate:puke.remove(i)			# 删除已发牌,以免重发def sort_ret(_value):			# 对玩家的牌进行分析,生成排序码_lst = []				# 排序:第1个为排序码,后为(牌面, 分值)元组for i in _value: # i[1:]为点数,i[:1]为花式rec = sort_dic[i[:1]]+sort_dic[i[1:]]_lst.append((i,rec))_lst.sort(key=lambda x: x[1],reverse=True)if _lst[0][0][1:]+_lst[1][0][1:]+_lst[2][0][1:]=='A32':	# 最小顺子,A当1l = _lst[1:]l.append((_lst[0][0],float(f'{_lst[0][1]-13:.1f}')))_lst = lif _lst[0][0][1:] == _lst[1][0][1:] and _lst[1][0][1:] == _lst[2][0][1:]:_lst.insert(0,('豹子',sort_dic['豹子']))elif int(_lst[0][1]) == int(_lst[1][1])+1 and int(_lst[1][1]) == int(_lst[2][1])+1:if _lst[0][0][:1]==_lst[1][0][:1]==_lst[2][0][:1]:	# 顺金=同花顺_lst.insert(0,('顺金',sort_dic['顺金']))else:_lst.insert(0,('顺子',sort_dic['顺子']))elif _lst[0][0][:1]==_lst[1][0][:1]==_lst[2][0][:1]:_lst.insert(0,('同花',sort_dic['同花']))elif _lst[0][0][1:]==_lst[1][0][1:] or _lst[1][0][1:]==_lst[2][0][1:]:if _lst[1][0][1:]==_lst[2][0][1:]:	# 对子放前,单张调后l = _lst[1:]l.append(_lst[0])_lst = l    _lst.insert(0,('对子',sort_dic['对子']))else:_lst.insert(0,('单张',sort_dic['单张']))#s_result=f'{_lst[0][1]}{int(_lst[1][1]*10):03}{int(_lst[2][1]*10):03}{int(_lst[3][1]*10):03}'s_result=f'{_lst[0][1]}{int((_lst[1][1]*100+_lst[2][1]*10+_lst[3][1])*1000+0.5):07}'_lst.insert(0,s_result)		# 插入排序码,牌型+三张牌大小(同点按花式) return _lstif __name__ == '__main__':for key, value in player_dic.items():count_dic[key] = sort_ret(value)# 对牌面进行牌型分析和生成排序码print(key + "的牌为:", value)	# 输出各玩家的牌面# 对玩家按排序码进行排序,排序依据为sort_diccount_lst = sorted(count_dic.items(),key=lambda x: x[1], reverse=True)print("最终排名:")			# 输出玩家排名、牌型、排序后的牌面for i, v in enumerate(count_lst):print(v[0] + '\t', v[1][1][0] + '\t', v[1][2][0],v[1][3][0],v[1][4][0],'\t赢' if i == 0 else '')

部分运行实例见图3。

图3 部分运行实例

这篇关于Python设计诈金花游戏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/165437

相关文章

Python实现文件下载、Cookie以及重定向的方法代码

《Python实现文件下载、Cookie以及重定向的方法代码》本文主要介绍了如何使用Python的requests模块进行网络请求操作,涵盖了从文件下载、Cookie处理到重定向与历史请求等多个方面,... 目录前言一、下载网络文件(一)基本步骤(二)分段下载大文件(三)常见问题二、requests模块处理

Python判断for循环最后一次的6种方法

《Python判断for循环最后一次的6种方法》在Python中,通常我们不会直接判断for循环是否正在执行最后一次迭代,因为Python的for循环是基于可迭代对象的,它不知道也不关心迭代的内部状态... 目录1.使用enuhttp://www.chinasem.cnmerate()和len()来判断for

使用Python实现高效的端口扫描器

《使用Python实现高效的端口扫描器》在网络安全领域,端口扫描是一项基本而重要的技能,通过端口扫描,可以发现目标主机上开放的服务和端口,这对于安全评估、渗透测试等有着不可忽视的作用,本文将介绍如何使... 目录1. 端口扫描的基本原理2. 使用python实现端口扫描2.1 安装必要的库2.2 编写端口扫

使用Python实现操作mongodb详解

《使用Python实现操作mongodb详解》这篇文章主要为大家详细介绍了使用Python实现操作mongodb的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、示例二、常用指令三、遇到的问题一、示例from pymongo import MongoClientf

使用Python合并 Excel单元格指定行列或单元格范围

《使用Python合并Excel单元格指定行列或单元格范围》合并Excel单元格是Excel数据处理和表格设计中的一项常用操作,本文将介绍如何通过Python合并Excel中的指定行列或单... 目录python Excel库安装Python合并Excel 中的指定行Python合并Excel 中的指定列P

一文详解Python中数据清洗与处理的常用方法

《一文详解Python中数据清洗与处理的常用方法》在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下... 目录缺失值处理重复值处理异常值处理数据类型转换文本清洗数据分组统计数据分箱数据标准化在数据处理与分析过

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3