#!/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版本相关推荐

  1. python数据结构题目_《数据结构与算法Python语言描述》习题第二章第三题(python版)...

    ADT Rational: #定义有理数的抽象数据类型 Rational(self, int num, int den) #构造有理数num/den +(self, Rational r2) #求出本 ...

  2. 包含癞子的麻将胡牌算法

    记录一下麻将的通用胡牌算法实现,只要满足M x ABC + N x DDD + EE 即可胡牌. 在这里先分析一下最简单的胡牌思路:先找出所有可能的将牌,若除去两张将牌之外的所有牌都能成扑,则可胡牌. ...

  3. 麻将胡牌算法,带癞子

    貌似去年去面试一家公司,问了麻将的算法.虽然之前做过广东麻将,但是胡牌算法在服务端,就没有在意. 现在在网上搜了一些算法试了试 = =! 麻将普通的胡牌就是刻子+顺子+将.癞子可以充当任意一张牌. 参 ...

  4. 麻将普通胡牌算法JS版(含癞子,非轮训)

    记录一下麻将的通用胡牌算法实现,只要满足X*ABC + Y*DDD + EE 即可胡牌. 在这里先分析一下最简单的胡牌思路:先找出所有可能的将牌,若除去两张将牌之外的所有牌都能成刻或顺,则可胡牌. 将 ...

  5. 高效查表判断胡牌算法的lua版本

    来源于日本论坛的一套用于麻将的判断胡牌算法,运用查表方式实现.原文链接(http://hp.vector.co.jp/authors/VA046927/mjscore/mjalgorism.html) ...

  6. 麻将胡牌算法带癞子 python实现

    姐姐:你去帮我和闺蜜打麻将? 学霸哥哥:可是我不会打麻将呀! 姐姐:你不是学霸吗?我教你一个麻将公式,我闺蜜可是单身哟! 学霸哥哥:什么公式? 姐姐:麻将胡牌公式: AAA*M+ABC*N+BB,WM ...

  7. 麻将胡牌算法的一种设计及其分析

    马勇波  陈欣庆 (解放军理工大学工程兵工程学院研究生二队,南京 210007)       摘  要  文章通过一个二维数组定义麻将的数据结构,并在此基础上设计了一种判断麻将是否胡牌的算法,该算法主 ...

  8. 可带癞子的通用麻将胡牌算法

    本文原创文章,转载注明出处,博客地址 https://segmentfault.com/u/to... 第一时间看后续精彩文章.觉得好的话,顺手分享到朋友圈吧,感谢支持. 笔者前段时间做过一款地方麻将 ...

  9. 癞子麻将胡牌算法实现

    最先实现的就是算法的实现. 需求:碰杠胡  ,不能吃 ,不能听 ,仅仅能自摸胡,当中癞子能够做随意牌可是不能碰和杠. 写的时候还不会玩麻将,还是老板教的.^_^ 最麻烦的是胡牌算法.之前搜到的都是不包 ...

  10. node.js——麻将算法(五)胡牌算法的一些优化处理方案(有赖子版)

    以前有赖子判胡算法 http://blog.csdn.net/sm9sun/article/details/65632646 以前的帖子说明了处理赖子的两种方案:枚举代替及插空补缺,并最终选择了枚举遍 ...

最新文章

  1. 掌握这些PPT技巧,让你的工作效率提高10倍
  2. mysql now str,数据库学习之MySQL (十)—— 日期和时间函数 NOW STR_TO_DATE DATE_FORMAT 流程控制函数 IF IFNULL CASE...
  3. oracle修改10到20,Oracle 10.2.0.5 RMAN迁移并升级11.2.0.4一例
  4. java url gbk编码转换_如何在一个utf-8编码的HTML中 在javascript中url跳转时把url中的汉字改为GBK编码...
  5. work hard, think harder
  6. python 多分类情感_python 文本情感分类
  7. struts2 表单提交乱码问题解决办法
  8. 2017.6.15 数字表格 思考记录
  9. 设计灵感|春节新年到!充满年味的海报给你参考
  10. 前端人员必须掌握哪些技术?常见缓存种类有什么?
  11. mysql网络异常_网络连接配置出现异常_网络连接配置无法修复_Mysql网络连接的性能配置项...
  12. 这个爬虫是你五一假期所需要的!
  13. Servlet3.0之八:基于Servlet3.0的文件上传@MultipartConfig
  14. 恶意代码分析实战Lab3-1
  15. 第三方支付接口申请和开发
  16. 论文笔记:ALA loss:Adaptive Logit Adjustment Loss for Long-Tailed Visual Recognition
  17. Python多进程写Kafka
  18. 【Python安装系统】win10系统从零开始安装Python并为不同项目设置开发环境——以安装TensorFlow2为例
  19. Monitoring(监控)
  20. STM32如何快速驱动一款12864LCD液晶模块 3分钟点亮 STM32例程

热门文章

  1. 对标剑桥、斯坦福!西湖大学城来了!
  2. 矩阵运算实现求样本与样本之间欧式距离
  3. 名编辑电子杂志大师,简单操作生成漂亮的电子画册,永久使用!
  4. UE4+制作手柄画笔
  5. 浅谈android源码之system
  6. dataFEED OPC Suite V5.20轻松应对Windows DCOM安全更新
  7. SteamVR+HTC VIVE开发之旅 Interactable组件解析
  8. arcgis做dijkstra_改进的Dijkstra算法在GIS路径规划中的应用
  9. Cocos2d-x 3.2 大富翁游戏项目开发-第六部分 地图设计
  10. [转贴]Gloomy对Windows内核的分析(研究CreateProcess)