pyhton麻将胡牌听牌判断,pyhton麻将胡牌,pyhton麻将胡牌听牌
pyhton麻将胡牌听牌判断,pyhton麻将胡牌,pyhton麻将胡牌听牌
pyhton麻将胡牌听牌判断第一版代码有缩进问题,第二版没有了;另外第二版在第一版的基础增加听牌的判断;
1.[代码][Python]代码
#-*- coding: utf-8 -*-import random'''' 麻将牌数据结构 万 1x | 筒 2x | 条 3x| 东西南北中发白 41-47'''class game(): TYPE = 10 # 只有万字牌(筒和条不放进来) def __init__(self): self.leave = [] self.user = []self.check = Check() #self.leave_bak = [] self.create() # 创建牌数据 def create(self): for i in range(4): start = game.TYPE for j in range(start,start+9): self.leave.append(j) for k in range(41,48): self.leave.append(k) class Check(): def __init__(self):pass def bar(self,_list):rs = self.findSame(_list,4)return rs def bump(self,_list):rs = self.findSame(_list,3)return rs def findSame(self,_list,num):return _list.count(_list[0]) == num def eat(self,_list):return _list[1] == _list[0] + 1 and _list[1] == _list[2] - 1 def hasBar(self,_list):pass def win(self,_list, j):if len(_list) == 0 : return Truefor i in _list: #print _list if _list[0] < 40: #只有字牌可以吃 if len(_list) >= 3 and self.eat(_list) : #常规吃判断 return self.win(_list[3:],j) if len(_list) >= 6 : #11 22 33 三小对吃类型 _l = [_list,_list[2:],_list[4:]] rs = False for k in _l : rs = self.findSame(k,2) if rs and self.eat([_list[0],_list[2],_list[4]]): return self.win(_list[6:],j) if self.bump(_list) : #碰return self.win(_list[3:],j) if _list.count(_list[0]) == 2 and j == False : # 将j = Truereturn self.win(_list[2:],j) break #不断的话会重复判断return Falseclass User(): def __init__(self,_uid): self.uid = _uid self.bird = []def main(): _game = game() num = 200 for i in range(num):random.shuffle(_game.leave)_l = _game.leave[:14]_l.sort()rs = _game.check.win(_l,False)print i,_l,rs_game.create() if __name__ == '__main__': main()第二版:新增听牌判断如果落听Check.lis会有数据#-*- coding: utf-8 -*-import random'''' 麻将牌数据结构 万 1x | 筒 2x | 条 3x| 东西南北中发白 41-47'''class game(): TYPE = 10 # 只有万字牌(筒和条不放进来) def __init__(self): self.leave = [] self.user = [] self.check = Check() #self.leave_bak = [] self.create() # 创建牌数据 def create(self): for i in range(4): start = game.TYPE for j in range(start,start+9): self.leave.append(j) for k in range(41,48): self.leave.append(k) # def getBird(self): random.shuffle(self.leave) print 'last%s'%self.leave self.user.append(User('roy')) self.user.append(User('tt')) for i in self.user: i.bird = self.leave[:13] i.bird.sort() self.leave = self.leave[13:] print 'user %s bird %s'%(i.uid,i.bird) print 'next%s'%self.leaveclass Check(): def __init__(self): self.gn = 0 # 排列组合数目 胡牌是五组 self.lis = [] def bar(self,_list): rs = self.findSame(_list,4) return rs def bump(self,_list): rs = self.findSame(_list,3) return rs def findSame(self,_list,num): return _list.count(_list[0]) == num def eat(self,_list): _eat = None _rs = None iseat = False if _list[1] == _list[0] + 1 and _list[1] == _list[2] - 1 : _eat = _list[:3] _rs = _list[3:] iseat = True if _list[2] == _list[1] + 1 and _list[2] == _list[3] and _list[2]==_list[4]-1: _eat = [_list[0]]+[_list[2]]+[_list[4]] _rs = _eat+_list[6:] iseat = True return (_eat,_rs,iseat) def hasBar(self,_list): pass def checklis(self,_list): if len(self.lis) > 0 : return False if len(_list) > 3 : return False if len(_list) < 3 : return True def isLis(_l): if _l[0] == _l[1] : return True if _l[0] == _l[1] - 1 : return True if _l[0] == _l[1] - 2 and (_l[0] + 1)%10 != 0 : return True if isLis(_list) : return True if isLis(_list[1:]) : return True return False def win(self,_list, j): if len(_list) == 0 : return True for i in _list: #print _list,j if i < 40: #只有48d3字牌可以吃 (_eat,_rs,iseat) = self.eat(_list) if iseat : #常规吃判断 self.gn += 1 print 'get eat',_eat,_rs,j if self.win(_rs,j) : return True if self.checklis(_rs): self.lis = _rs return False else: break if self.findSame(_list,3): #碰 self.gn += 1 print 'get bump',_list[:3],j arr = _list[3:] if self.win(arr,j) : return True if self.checklis(arr): self.lis = arr return False else: break if self.findSame(_list,2) and j == False : #将 j = True self.gn += 1 print 'get j ',_list[:2],j arr = _list[2:] if self.win(arr,j) : return True if self.checklis(arr) : print 'get j check',arr self.lis = arr return False return Falseclass User(): def __init__(self,_uid): self.uid = _uid self.bird = []def main(): _game = game() _l = [11,11,12,12,13,13,16,16,16,17,17,18,41,41] _game.check.gn = 0 rs = _game.check.win(_l,False) gn = _game.check.gn #lis = _game.check.lis #_game.check.gn = 0 print _l,rs,gn,_game.check.lis ''' num = 2000 for i in range(num):random.shuffle(_game.leave)_l = _game.leave[:14]_l.sort()rs = _game.check.win(_l,False)if rs : print i,_l,rs_game.create() ''' if __name__ == '__main__': main()
编橙之家文章,
相关内容
- python实现jpg图片文字转成pdf格式,,python实现jpg图
- python du熊学斐波那契实现,python熊学,python du熊学斐
- python爬虫获取腾讯新闻正文标题内容,,python爬虫获取腾
- 对python异常函数进行重试数次,python函数重试,<对p
- 用python查找未注册的域名,python查找未注册,扫描看看哪
- python简单二叉树遍历代码,python二叉树,<python简单二
- python新手关于继承的练习代码,python新手继承,<pyth
- linux下使用python根据IP地址子网掩码计算网段,linuxpyt
- 用Python在指定目录搜索需要的文件名,python文件名,用
- python源码实现猜位置游戏,python源码猜位置,python源码实
评论关闭