Esempio n. 1
0
        //玩家出牌
        public static void PlayCard(this FiveStarPlayer fiveStarPlayer, int card)
        {
            if (!fiveStarPlayer.IsCanPlayCard)
            {
                return;                                                        //不是这个玩家 出牌 直接return
            }
            if (fiveStarPlayer.IsLiangDao && fiveStarPlayer.MoEndHand != card) //如果玩家亮倒 就只能出 最后摸的一张牌
            {
                Log.Error("玩家亮倒后 出的牌 不是 最后摸的牌" + card);
                card = fiveStarPlayer.MoEndHand;//直接帮他出最后摸到的牌
            }
            if (fiveStarPlayer.IsLiangDao && fiveStarPlayer.MoEndHand == card)
            {
                //如果是亮倒 状态下 并且出的是摸的最后一张牌 就不要检测 是不是放炮牌
            }
            else
            {
                if (fiveStarPlayer.FiveStarRoom.LiangDaoCanHuCards.Contains(card))
                {
                    for (int i = 0; i < fiveStarPlayer.Hands.Count; i++)
                    {
                        if (!fiveStarPlayer.FiveStarRoom.LiangDaoCanHuCards.Contains(fiveStarPlayer.Hands[i]))
                        {
                            Log.Error("玩家打出的牌 有亮倒玩家胡");//在没有亮倒情况 除非手中所有的牌都是放炮的牌 就不会进来 就不会return 才可以打
                            return;
                        }
                    }
                }
            }

            if (!fiveStarPlayer.Hands.Contains(card))
            {
                Log.Error("玩家出的牌手牌中没有" + card);
                return;
            }
            if (fiveStarPlayer.FiveStarRoom.CanPlayCardPlayerIndex == fiveStarPlayer.SeatIndex)
            {
                if (fiveStarPlayer.Hands.Contains(card))
                {
                    fiveStarPlayer.Hands.Remove(card);
                    Actor_FiveStar_PlayCardResult actorFiveStarPlayCardResult = new Actor_FiveStar_PlayCardResult()
                    {
                        SeatIndex = fiveStarPlayer.SeatIndex,
                        Card      = card
                    };
                    fiveStarPlayer.FiveStarRoom.RecordChuCard(actorFiveStarPlayCardResult);//记录出牌消息
                    fiveStarPlayer.FiveStarRoom.BroadcastMssagePlayers(actorFiveStarPlayCardResult);
                }
            }
            fiveStarPlayer.PlayCards.Add(card);
            fiveStarPlayer.FiveStarRoom.PlayerPlayCard(fiveStarPlayer.SeatIndex, card);
            fiveStarPlayer.IsCanPlayCard = false;
            fiveStarPlayer.SendNewestHands();   //发送玩家最新的手牌信息
            fiveStarPlayer.AIPlayCardDispose(); //AI出牌处理
        }