麻将算法-支持单耗子-双耗子-多耗子

# 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值