# coding=utf-8
import sys
import math
import codecs
isDebug = False
isTiaoShi = True
isFengZui = True
MAJONG = [
101,102,103,104,105,106,107,108,109,
101,102,103,104,105,106,107,108,109,
101,102,103,104,105,106,107,108,109,
101,102,103,104,105,106,107,108,109,
201,202,203,204,205,206,207,208,209,
201,202,203,204,205,206,207,208,209,
201,202,203,204,205,206,207,208,209,
201,202,203,204,205,206,207,208,209,
301,302,303,304,305,306,307,308,309,
301,302,303,304,305,306,307,308,309,
301,302,303,304,305,306,307,308,309,
301,302,303,304,305,306,307,308,309,
401,402,403,404,405,406,407,
401,402,403,404,405,406,407,
401,402,403,404,405,406,407,
401,402,403,404,405,406,407,
]
MAJIANG_TYPE = [
101,102,103,104,105,106,107,108,109,
201,202,203,204,205,206,207,208,209,
301,302,303,304,305,306,307,308,309,
401,402,403,404,405,406,407,
]
#将手里的耗子全部拿出来,并且对剩余的手牌排序
#param mahjongList 手牌列表 haoziPai 耗子列表
#return 自己所有的耗子列表
def check_haozi_sort(mahjongList, haoziPaiList):
printLog('当前的手牌为:',mahjongList)
mahjongList.sort()
printLog('排序完成之后手牌为:',mahjongList)
haoziList = []
for index in range(len(mahjongList)-1, -1, -1):
for x in range(len(haoziPaiList)):
if haoziPaiList[x] == mahjongList[index]:
haoziList.append(mahjongList[index])
mahjongList.pop(index)
break
printLog('移除耗子之后的手牌为:')
printLog(mahjongList)
printLog('手里的耗子列表:', haoziList)
return haoziList
#将手牌分为万条筒、 字
def split_list(mahjongList):
wttList = []
ziList = []
for index in range(len(mahjongList)):
mjType = mahjongList[index] // 100
#万
if mjType == 1 or mjType == 2 or mjType == 3:
wttList.append(mahjongList[index])
elif mjType == 4:
ziList.append(mahjongList[index])
else:
printLog("没有这种麻将类型", mjType)
sys.exit(0)
return wttList, ziList
#检查组合 先检查刻,再检查顺
#return 返回组成的刻,顺,以及检查完之后剩余的手牌列表
def check_zuhe_ke_shun( mjList, isFeng=False):
mjListCopy = mjList[:]
shunziList = []
keList = []
#自己的数量 先判断能自然形成的,不加耗子的
if len(mjListCopy) >= 3:
keList = check_ke(mjListCopy)
if len(mjListCopy) >= 3:
#如果是字牌,并且是封嘴的时候,去检测一下风顺子
if isFeng:
if isFengZui:
shunziList = check_shunzi(mjListCopy, isFeng)
else:
shunziList = check_shunzi(mjListCopy, isFeng)
# #组成的刻子现在是这样的
# if len(keList) > 0:
# printLog('组成刻子:', keList)
# if len(shunziList) > 0:
# printLog('组成顺子:', shunziList)
# #检测完之后的手牌为
# if len(mjListCopy) > 0:
# printLog('检测完之后的手牌', mjListCopy)
return keList, shunziList, mjListCopy
#检查组合 先检查顺,再检查刻
#return 返回组成的刻,顺,以及检查完之后剩余的手牌列表
def check_zuhe_shun_ke( mjList, isFeng=False):
mjListCopy = mjList[:]
shunziList = []
keList = []
#自己的数量 先判断能自然形成的,不加耗子的
if len(mjListCopy) >= 3:
#如果是字牌,并且是封嘴的时候,去检测一下风顺子
if isFeng:
if isFengZui:
shunziList = check_shunzi(mjListCopy, isFeng)
else:
shunziList = check_shunzi(mjListCopy, isFeng)
if len(mjListCopy) >= 3:
keList = check_ke(mjListCopy)
# #组成的刻子现在是这样的
# if len(keList) > 0:
# printLog('组成刻子:', keList)
# if len(shunziList) > 0:
# printLog('组成顺子:', shunziList)
# #检测完之后的手牌为
# if len(mjListCopy) > 0:
# printLog('检测完之后的手牌', mjListCopy)
return keList, shunziList, mjListCopy
#mjList 风 给所有的风进行排序
#return [[403,2],[402,1],[401,1]]
def feng_sort(mjList):
mjlsit_sort = []
if len(mjList) == 0:
return mjlsit_sort
mjList.sort()
mjlsit_sort = []
count = 1
curValue = mjList[0]
for x in range(1, len(mjList)):
if mjList[x] == curValue:
count = count + 1
else:
tmpList = []
tmpList.append(curValue)
tmpList.append(count)
mjlsit_sort.append(tmpList)
curValue = mjList[x]
count = 1
tmpList = []
tmpList.append(curValue)
tmpList.append(count)
mjlsit_sort.append(tmpList)
printLog('排完前的数组为:',mjlsit_sort)
mjlsit_sort.sort(key=takeSecond)
mjlsit_sort.reverse()
printLog('排完序的数组为:',mjlsit_sort)
return mjlsit_sort
def takeSecond(elem):
return elem[1
麻将算法-支持单耗子-双耗子-多耗子
最新推荐文章于 2023-03-02 19:08:31 发布