protected static bool isQingYiSe(List <MAHJONG> handInMah, List <MAHJONG> pengList, List <MAHJONG> gangList) { int handInCount = handInMah.Count; MAHJONG_HUASE curHuase = getHuaSe(handInMah[0]); for (int i = 0; i < handInCount; ++i) { if (getHuaSe(handInMah[i]) != curHuase) { return(false); } } int pengCount = pengList.Count; for (int i = 0; i < pengCount; ++i) { if (getHuaSe(pengList[i]) != curHuase) { return(false); } } int gangCount = gangList.Count; for (int i = 0; i < gangCount; ++i) { if (getHuaSe(gangList[i]) != curHuase) { return(false); } } return(true); }
public static bool isShunzi(List <MahInfo> mahjongList, int startIndex) { if (mahjongList.Count <= startIndex + 2) { return(false); } if (getHuaSe(mahjongList[startIndex].mMah) == MAHJONG_HUASE.MH_FENG || getHuaSe(mahjongList[startIndex + 1].mMah) == MAHJONG_HUASE.MH_FENG || getHuaSe(mahjongList[startIndex + 2].mMah) == MAHJONG_HUASE.MH_FENG) { return(false); } // 必须是同花色的 MAHJONG_HUASE huase0 = getHuaSe(mahjongList[startIndex].mMah); MAHJONG_HUASE huase1 = getHuaSe(mahjongList[startIndex + 1].mMah); MAHJONG_HUASE huase2 = getHuaSe(mahjongList[startIndex + 2].mMah); if (huase0 != huase1 || huase1 != huase2) { return(false); } if (mahjongList[startIndex].mMah + 1 != mahjongList[startIndex + 1].mMah || mahjongList[startIndex + 1].mMah + 1 != mahjongList[startIndex + 2].mMah) { return(false); } return(true); }
public override void execute() { Character character = (mReceiver) as Character; CharacterData data = character.getCharacterData(); int dropIndex = -1; // 如果还未打缺一色,则需要打最少的一色牌 SortedDictionary <MAHJONG_HUASE, List <MAHJONG> > huaseList = GameUtility.getHuaseList(GameUtility.toMahjongGroup(data.mHandIn)); if (huaseList.Count > 2) { MAHJONG_HUASE minHuase = MAHJONG_HUASE.MH_MAX; foreach (var item in huaseList) { if (minHuase == MAHJONG_HUASE.MH_MAX || minHuase > item.Key) { minHuase = item.Key; } } MAHJONG dropMah = huaseList[minHuase][huaseList[minHuase].Count - 1]; int handInCount = data.mHandIn.Count; for (int i = 0; i < handInCount; ++i) { if (data.mHandIn[i] == dropMah) { dropIndex = i; break; } } } // 如果已经打缺了,则打最后一张 if (dropIndex == -1) { dropIndex = data.mHandIn.Count - 1; } CommandCharacterDrop cmd = mCommandSystem.newCmd <CommandCharacterDrop>(); cmd.mIndex = dropIndex; cmd.mMah = data.mHandIn[dropIndex]; mCommandSystem.pushCommand(cmd, character); }
public static SortedDictionary <MAHJONG_HUASE, List <MAHJONG> > getHuaseList(List <MahInfo> mahjongList, bool includeFeng = false) { SortedDictionary <MAHJONG_HUASE, List <MAHJONG> > huaseList = new SortedDictionary <MAHJONG_HUASE, List <MAHJONG> >(); int size = mahjongList.Count; for (int i = 0; i < size; ++i) { MAHJONG_HUASE huase = getHuaSe(mahjongList[i].mMah); if (!huaseList.ContainsKey(huase)) { if (includeFeng || huase != MAHJONG_HUASE.MH_FENG) { List <MAHJONG> temp = new List <MAHJONG>(); temp.Add(mahjongList[i].mMah); huaseList.Add(huase, temp); } } else { huaseList[huase].Add(mahjongList[i].mMah); } } return(huaseList); }