python设计麻将_麻将胡牌算法,python版本
#!/usr/bin/env python
#coding=utf-8
#######################################################
#C 语言版
#马勇波 陈欣庆
#解放军理工大学工程兵工程学院研究生二队,南京 210007)
#PYTHON版
#ixafei
#NJUPT
#######################################################
class Mahjong:
def __init__(self):
pass
"""判断是否胡牌"""
def zp_HU(self,list):
_kingPos=None
_yuShu=None
_kingExist=False
_j=0
#满足3,3,3,3,2模型
for _p in list:
_yuShu=_p[0]%3
if _yuShu==1:
return False
if _yuShu==2:
if(_kingExist):
return False
_kingPos=_j
_kingExist=True
_j=_j+1
#先计算没有将牌的LIST
_j=0
for _p in list:
if _kingPos==_j:
pass
else:
if not self.Analyze(_p,_j==3):
return False
_j=_j+1
#该列表中包含将牌,采用轮训迭代方式,效率较低
#指示除掉将后能否通过
_success=False
_jlist=list[_kingPos]+[]
_j=0
for _card in _jlist:
if _j==0:
pass
else:
if _card>=2:
_jlist[_j]-=2
_jlist[0]-=2
if self.Analyze(_jlist,_kingPos==3):
_success=True
if _success:
break
_j=_j+1
return _success
#分解为“刻” “顺”组合
def Analyze(self,list,flag):
if list[0]==0:
return True
#寻找第一张牌
_j=0
for _p in list:
if _j==0:
pass
else:
if _p!=0:
break
_j=_j+1
result=None
if list[_j]>=3:
list[_j]-=3
list[0]-=3
result=self.Analyze(list,flag)
list[_j]+=3
list[0]+=3
return result
#做为顺牌
if not flag and _j<8 and list[_j+1]>0 and list[_j+2]>0:
list[_j]=list[_j]-1
list[_j+1]=list[_j+1]-1
list[_j+2]=list[_j+2]-1
list[0]=list[0]-3
result=self.Analyze(list,flag)
#还原这3张牌
list[_j]=list[_j]+1
list[_j+1]=list[_j+1]+1
list[_j+2]=list[_j+2]+1
list[0]=list[0]+3
return result
return False
#计算LIST中的总数
def countList(self,list):
_a=0
for i in list:
_a=_a+i
return _a
#转化为二维数组
def list2array(self,list):
"""麻将游戏规则中心
具体如下表
============================================
0 1 2 3 4 5 6 7 8
============================================
一万 二万 三万 四万 五万 六万 七万 八万 九万
============================================
9 10 11 12 13 14 15 16 17
============================================
一条 二条 三条 四条 五条 六条 七条 八条 九条
============================================
18 19 20 21 22 23 24 25 26
============================================
一筒 二筒 三筒 四筒 五筒 六筒 七筒 八筒 九筒
============================================
27 28 29 30 31 32 33 34 35
============================================
东风 南风 西风 北风 红中 发财 白板 花1 花2
============================================
[0,1-9]
0表示总数,1-9分别用各自的个数表示
[8,8,8,8,7,6,5,4,3,2,1,0,0,0]
转化为
[[14, 3, 1, 1, 1, 1, 1, 1, 1, 4], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
"""
_allPai=[]
_w=[]
_t=[]
_s=[]
_z=[]
for k in range(0,9):
_w.append(list.count(k))
for k in range(9,18):
_t.append(list.count(k))
for k in range(18,27):
_s.append(list.count(k))
for k in range(27,36):
_z.append(list.count(k))
_w.insert(0,self.countList(_w))
_t.insert(0,self.countList(_t))
_s.insert(0,self.countList(_s))
_z.insert(0,self.countList(_z))
_allPai.append(_w)
_allPai.append(_t)
_allPai.append(_s)
_allPai.append(_z)
return _allPai
if __name__=="__main__":
_pai=[
[6,1,4,1],
[3,1,1,1],
[0],
[5,2,3]
]
print _pai
MAHJONG=Mahjong()
print MAHJONG.zp_HU(_pai)
list=[0,1,1,1,1,2,9,10,11,27,27,28,28,28]
list2=[8,8,8,8,7,6,5,4,3,2,1,0,0,0]
pai2=MAHJONG.list2array(list2)
print pai2
print MAHJONG.zp_HU(pai2)
分享到:
2008-06-05 20:43
浏览 4900
评论
python设计麻将_麻将胡牌算法,python版本相关推荐
- python数据结构题目_《数据结构与算法Python语言描述》习题第二章第三题(python版)...
ADT Rational: #定义有理数的抽象数据类型 Rational(self, int num, int den) #构造有理数num/den +(self, Rational r2) #求出本 ...
- 包含癞子的麻将胡牌算法
记录一下麻将的通用胡牌算法实现,只要满足M x ABC + N x DDD + EE 即可胡牌. 在这里先分析一下最简单的胡牌思路:先找出所有可能的将牌,若除去两张将牌之外的所有牌都能成扑,则可胡牌. ...
- 麻将胡牌算法,带癞子
貌似去年去面试一家公司,问了麻将的算法.虽然之前做过广东麻将,但是胡牌算法在服务端,就没有在意. 现在在网上搜了一些算法试了试 = =! 麻将普通的胡牌就是刻子+顺子+将.癞子可以充当任意一张牌. 参 ...
- 麻将普通胡牌算法JS版(含癞子,非轮训)
记录一下麻将的通用胡牌算法实现,只要满足X*ABC + Y*DDD + EE 即可胡牌. 在这里先分析一下最简单的胡牌思路:先找出所有可能的将牌,若除去两张将牌之外的所有牌都能成刻或顺,则可胡牌. 将 ...
- 高效查表判断胡牌算法的lua版本
来源于日本论坛的一套用于麻将的判断胡牌算法,运用查表方式实现.原文链接(http://hp.vector.co.jp/authors/VA046927/mjscore/mjalgorism.html) ...
- 麻将胡牌算法带癞子 python实现
姐姐:你去帮我和闺蜜打麻将? 学霸哥哥:可是我不会打麻将呀! 姐姐:你不是学霸吗?我教你一个麻将公式,我闺蜜可是单身哟! 学霸哥哥:什么公式? 姐姐:麻将胡牌公式: AAA*M+ABC*N+BB,WM ...
- 麻将胡牌算法的一种设计及其分析
马勇波 陈欣庆 (解放军理工大学工程兵工程学院研究生二队,南京 210007) 摘 要 文章通过一个二维数组定义麻将的数据结构,并在此基础上设计了一种判断麻将是否胡牌的算法,该算法主 ...
- 可带癞子的通用麻将胡牌算法
本文原创文章,转载注明出处,博客地址 https://segmentfault.com/u/to... 第一时间看后续精彩文章.觉得好的话,顺手分享到朋友圈吧,感谢支持. 笔者前段时间做过一款地方麻将 ...
- 癞子麻将胡牌算法实现
最先实现的就是算法的实现. 需求:碰杠胡 ,不能吃 ,不能听 ,仅仅能自摸胡,当中癞子能够做随意牌可是不能碰和杠. 写的时候还不会玩麻将,还是老板教的.^_^ 最麻烦的是胡牌算法.之前搜到的都是不包 ...
- node.js——麻将算法(五)胡牌算法的一些优化处理方案(有赖子版)
以前有赖子判胡算法 http://blog.csdn.net/sm9sun/article/details/65632646 以前的帖子说明了处理赖子的两种方案:枚举代替及插空补缺,并最终选择了枚举遍 ...
最新文章
- 掌握这些PPT技巧,让你的工作效率提高10倍
- mysql now str,数据库学习之MySQL (十)—— 日期和时间函数 NOW STR_TO_DATE DATE_FORMAT 流程控制函数 IF IFNULL CASE...
- oracle修改10到20,Oracle 10.2.0.5 RMAN迁移并升级11.2.0.4一例
- java url gbk编码转换_如何在一个utf-8编码的HTML中 在javascript中url跳转时把url中的汉字改为GBK编码...
- work hard, think harder
- python 多分类情感_python 文本情感分类
- struts2 表单提交乱码问题解决办法
- 2017.6.15 数字表格 思考记录
- 设计灵感|春节新年到!充满年味的海报给你参考
- 前端人员必须掌握哪些技术?常见缓存种类有什么?
- mysql网络异常_网络连接配置出现异常_网络连接配置无法修复_Mysql网络连接的性能配置项...
- 这个爬虫是你五一假期所需要的!
- Servlet3.0之八:基于Servlet3.0的文件上传@MultipartConfig
- 恶意代码分析实战Lab3-1
- 第三方支付接口申请和开发
- 论文笔记:ALA loss:Adaptive Logit Adjustment Loss for Long-Tailed Visual Recognition
- Python多进程写Kafka
- 【Python安装系统】win10系统从零开始安装Python并为不同项目设置开发环境——以安装TensorFlow2为例
- Monitoring(监控)
- STM32如何快速驱动一款12864LCD液晶模块 3分钟点亮 STM32例程
热门文章
- 对标剑桥、斯坦福!西湖大学城来了!
- 矩阵运算实现求样本与样本之间欧式距离
- 名编辑电子杂志大师,简单操作生成漂亮的电子画册,永久使用!
- UE4+制作手柄画笔
- 浅谈android源码之system
- dataFEED OPC Suite V5.20轻松应对Windows DCOM安全更新
- SteamVR+HTC VIVE开发之旅 Interactable组件解析
- arcgis做dijkstra_改进的Dijkstra算法在GIS路径规划中的应用
- Cocos2d-x 3.2 大富翁游戏项目开发-第六部分 地图设计
- [转贴]Gloomy对Windows内核的分析(研究CreateProcess)