本文实现了一个胡牌算法,目前支持视频中讲解的三种番型,更多番型或者其它番型大家可以结合当地的麻将进行二次开发,项目中不仅有后台胡牌算法,而且还配备了前台页面,开发人员可以在前台中直接输入麻将对应的数据,操作十分方便。具体细节请观看视频讲解
视频和demo下载地址:wisdomdd.cn
视频中的源码可以点击【下载实例】进行下载, 环境配置: Eclipse+Maven+JDK1.7
环境下载地址: http://www.wisdomdd.cn/Wisdom/category/getAllCategoryFile.htm
胡牌前提: 共14张牌,可以凑成4个三张,1个对子
三张牌: 3个一样的牌(3个1万)叫刻子,或者 3个顺序牌(1万,2万,3万)叫顺子
对子: 二张一样的牌(2个1万)
番型计算: 14张牌首先要满足胡牌的前提条件,然后再根据各个地方的胡牌规则进行番型计算,如果没有番型,则不能胡牌
下面以下图对应的番型规则进行算法介绍
胡牌前提对应的算法:
类: MahjongStaticTool
参数: MahjongTile[] mahjongTiles 麻将对应的14张牌
参数: twoNum 对子的个数
参数: threeNum 壳子+顺子的 数目
我们以 threeNum=4, twoNum=1 即4个三张牌,1个二张牌为例
tryCombination以递归方法来获取牌型数据, 最后将牌型数据存放在MahjongTile[][]二维数组中
MahjongTile[][]共5组数据, 例: 第一组有3张牌, 第二组有3张牌,第三组有3张牌,第四组有2张牌,第五组有3张牌
public
static
MahjongTile[][] tryCombination(MahjongTile[] mahjongTiles,
int
twoNum,
int
threeNum)
{
return
MahjongStaticTool.tryCombination(mahjongTiles, twoNum, threeNum,
null
);
}
private
static
MahjongTile[][] tryCombination(MahjongTile[] mahjongTiles,
int
twoNum,
int
threeNum, MahjongTile[][] saveMahjongTileses)
{
if
(mahjongTiles ==
null
)
{
if
(twoNum ==
0
&& threeNum ==
0
)
{
return
saveMahjongTileses;
}
else
{
return
null
;
}
}
if
(mahjongTiles.length == ((twoNum *
2
) + (threeNum *
3
)))
{
if
(threeNum >
0
)
{
//int[][] indexs = siphonThreeIndexs(mahjongTiles.length);
int
[][] indexs = getThreeSiphonByLength(mahjongTiles.length);
if
(indexs ==
null
)
{