//托管的默认操作 public static void CollocationAIOperate(this FiveStarPlayer fiveStarPlayer) { if (fiveStarPlayer.FiveStarRoom.CurrRoomStateType == RoomStateType.GameIn) { fiveStarPlayer.boolData = true; if (fiveStarPlayer.FiveStarRoom.IsDaPiaoBeing && (!fiveStarPlayer.IsAlreadyDaPiao)) //如果在打漂中 并且自己没有打漂就打漂 { if (fiveStarPlayer.IsAI) //如果是AI就随便漂 { fiveStarPlayer.DaPiao( RandomTool.Random(0, fiveStarPlayer.FiveStarRoom.RoomConfig.MaxPiaoNum + 1)); //随机打漂 } else { fiveStarPlayer.DaPiao(0); //默认是不漂 } } else if (fiveStarPlayer.IsCanPlayCard) //如果可以出牌 直接出 最后摸到的牌 { if (fiveStarPlayer.IsAI) //如果是AI出牌 保留手牌中有多张相同的 { fiveStarPlayer.Hands.Sort(); //手牌排序 fiveStarPlayer.intData = fiveStarPlayer.Hands.IndexOf(fiveStarPlayer.MoEndHand); //获取摸到的牌 首次出现的位置 if (fiveStarPlayer.intData < fiveStarPlayer.Hands.Count - 2 && fiveStarPlayer.Hands[fiveStarPlayer.intData + 1] == fiveStarPlayer.MoEndHand) { fiveStarPlayer.AICollcationPlayCard(fiveStarPlayer.Hands[fiveStarPlayer.Hands.Count - 1]); //摸到的牌有相同的 出牌组里最后一张牌 } else { fiveStarPlayer.AICollcationPlayCard(fiveStarPlayer.MoEndHand); //没有相同的出摸到的牌 } } else { fiveStarPlayer.AICollcationPlayCard(fiveStarPlayer.MoEndHand); //不是AI出牌直接出 最后摸到的牌 } } else if (fiveStarPlayer.FiveStarRoom.CanOperatePlayerIndex.Contains(fiveStarPlayer.SeatIndex) ) //如果玩家可操作索引列表里面有自己 则直接操作 { FiveStarOperateInfo fiveStarOperateInfo; if (fiveStarPlayer.canOperateLists.Contains(FiveStarOperateType.FangChongHu)) //如果可以胡 就胡 { fiveStarOperateInfo = FiveStarOperateInfoFactory.Create(0, FiveStarOperateType.FangChongHu, 0); } else { fiveStarOperateInfo = FiveStarOperateInfoFactory.Create(0, FiveStarOperateType.None, 0); //不能胡就放弃 } if (fiveStarPlayer.IsAI) //如果是AI 就是能碰就碰 能杠就杠 因为发的牌会做特殊手脚 { if (fiveStarPlayer.canOperateLists.Contains(FiveStarOperateType.Peng)) //如果可以胡 就胡 { fiveStarOperateInfo.OperateType = FiveStarOperateType.Peng; } else if (fiveStarPlayer.canOperateLists.Contains(FiveStarOperateType.MingGang)) { //杠牌 不仅需要传递 操作类型 还是传杠那张牌 之前记录亮了 foreach (var canGang in fiveStarPlayer.canGangCards) { fiveStarOperateInfo.Card = canGang.Key; fiveStarOperateInfo.OperateType = canGang.Value; } } } fiveStarPlayer.OperatePengGangHu(fiveStarOperateInfo); //执行操作 //不能销毁 fiveStarPlayer 因为多人操作会保留一段时间 } else { fiveStarPlayer.boolData = false; } if (fiveStarPlayer.boolData) { fiveStarPlayer.SetCollocation(true); //如果进行了 托管操作 就进入托管 } } }