最近写了一个麻将的胡牌逻辑,这个麻将是没有万字牌 和 东西南北风牌,以前也写过麻将胡牌逻辑,都没有记录,这次记录一下,方便以后查阅
/**
* 胡牌
* @param isZiMo 是否自摸
* @param roleId 胡牌玩家
* @param pcc 麻将场
*/
public static boolean huCard(boolean isZiMo,int roleId,PlayCardContext pcc){
PlayCardUnit pcu = pcc.getCardUnitByRoleId(roleId);
List handCards = pcu.getCards();
List chiPengGangCard = pcu.getChiPengGangCard();
int cardSize = handCards.size();
//1-9的索引为筒子 11-19为条子 21-23为中发白
byte[] cards = new byte[24];
byte[] color = new byte[3];
for (int i = 0; i < cardSize; i++) {
byte cardId = handCards.get(i);
SCard card = (SCard) StaticData.getStaticModel(EStaticData.CARD, cardId);
int index = 0;
if(card.type == EColorType.TONG_ZI.getType()){
index = card.value;
color[0]++;
}else if (card.type == EColorType.TIAO_ZI.getType()) {
index = 10+card.value;
color[1]++;
}else {
index = 20+card.value;
color[2]++;
}
cards[index]++;
}
int colorCount = (color[0]!=0?1:0)+(color[1]!=0?1:0)+(color[2]!=0?1:0);
boolean isSameColor = colorCount==1;
if(isSameColor){
int size = chiPengGangCard==null?0:chiPengGangCard.size();
if(size>0){
for (int i = 0; i < size; i++) {//计算吃碰杠的牌是否清一色
OperateCardData ocd = chiPengGangCard.get(i);
SCard card = (SCard) StaticData.getStaticModel(ESta