#!/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)
分享到:
相关推荐
麻将癞子胡牌算法,效率超快。4个5个癞子都测试过,python语言写的。
分享一个麻将胡牌算法,支持多癞子,自己对麻将胡牌的理解写的一套快速识别胡牌逻辑,核心逻辑500行代码,仅对同条万进行处理,字花牌不包含在内,易理解,1M次随机胡牌牌型大概3秒左右。原创分享,我的算法也许可以...
【标题】中的“基于PythonMahjong用Python实现的麻将游戏-源码.rar”表明这是一个使用Python编程语言开发的麻将游戏项目,源码被压缩在RAR文件中。这为我们提供了一个学习和研究Python游戏开发的机会,特别是针对...
棋牌的胡牌算法,包括麻将、跑胡子、扑克。实现lua、c++、c#、golang、js、java、python版本。(Ma.zip
本项目聚焦于一个独特的应用——麻将智能出牌,通过Tensorflow这一强大的深度学习框架,实现了自动选择出牌的算法。下面,我们将深入探讨这一系统的实现细节。 首先,我们要理解的是`mahjong_common.py`,这个文件...
棋牌的胡牌算法,包括麻将、跑胡子、扑克。实现 lua 、c++ 、c# 、golang 、js 、java 、python 版本。( Mahjong algorithm ).zip 适合学习/练手、毕业设计、课程设计、期末/期中/大作业、工程实训、相关项目/竞赛...
通过这个项目,你不仅可以掌握Python的基础语法,还能学习到面向对象编程、数据结构、算法设计、错误处理以及测试等高级概念。这将为你在Python编程道路上奠定坚实的基础,同时也为理解和开发其他复杂项目提供了宝贵...
实现 lua 、c++ 、c# 、golang 、js 、java 、python 版本。( Mahjong algorithm ) Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems公司于1995年5月正式发布。它的设计目标是“一次编写,到处运行...
在本项目中,我们探讨的是一个使用Python编程语言实现的基于大众麻将规则的控制台游戏程序。这个项目名为"my-mahjong-master",旨在提供一个简单但功能完整的麻将游戏体验,让玩家可以在命令行界面中进行游戏。下面...
这个项目的核心是利用Python语言构建一个具有图形界面的麻将游戏,并结合蒙特卡洛方法实现AI算法,使得计算机可以智能地进行游戏对战。 1. **Python编程**:Python是一种高级、易学且功能强大的编程语言,因其简洁...
麻将,作为一款策略和运气并重的传统中国桌面游戏,其电子化版本需要程序员运用编程语言来模拟游戏规则,包括洗牌、发牌、胡牌条件、计分系统以及网络对战功能。 【描述】:“一个简单的麻将程序源码,可以局域网...
这是一个基于Python的毕业设计项目,主要内容是开发一款图形化的麻将游戏,并且包含了蒙特卡洛方法实现的人工智能(AI)模块。这个项目对于学习Python编程、图形界面设计以及人工智能算法有着很高的教育价值。 首先...
在本项目"game_majiang.rar"中,我们聚焦于使用Python编程语言实现四川麻将的算法,以及构建一个包含电脑AI玩家的简单游戏交互界面。四川麻将是麻将的一种变种,具有独特的规则和玩法,例如"血战到底"、"杠上开花"等...
2. **麻将游戏逻辑**:机器人需要实现麻将的规则和算法,包括洗牌、发牌、判定胡牌条件等。这通常涉及复杂的逻辑,可能需要用到数据结构和算法。 3. **用户交互**:机器人需要能够理解用户的输入,例如接收麻将操作...
7. **游戏逻辑**:麻将游戏的逻辑复杂,包括发牌、胡牌规则、碰杠操作等。源码中会有相应的逻辑处理函数,开发者需要理解这些函数如何实现麻将游戏的规则。 8. **对象模型和类的设计**:源码中可能会包含各种类,如...
虽然没有提供更多的具体信息,但我们可以推测该程序可能包含了麻将游戏的各种基本功能,如洗牌、发牌、玩家操作、胡牌判断等,是初学者了解麻将游戏算法和编程实践的良好起点。 【标签】"麻将"明确了主题,这个程序...
4. **游戏逻辑**:麻将游戏的规则复杂,包括胡牌条件、碰杠操作等,都需要编程实现。开发者需要编写严谨的算法来处理各种可能的游戏状态,确保游戏的规则正确无误。这可能涉及到数据结构设计,如使用数组或链表来...
1. **游戏规则实现**:房卡麻将的规则与传统麻将略有不同,通常包括创建房间、邀请好友、设定房间规则(如番数限制、胡牌条件等)等。开发者需要深入理解麻将规则,并将其转化为可执行的算法。 2. **数据库设计**:...
4. 长沙麻将胡牌判断:这个问题可以通过哈希表记录每个花色的牌数量,然后按照胡牌规则检查。首先,确定每个花色的牌是否满足条件,接着寻找对子,最后检查剩余牌能否组合成顺子或刻子。设计数据结构时,可以使用一...