Ejemplo n.º 1
0
 /// <summary>
 /// 出牌
 /// </summary>
 private void PutCard()
 {
     if (!_data.isOnline)
     {
         NetMgr.Instance.ShowDisconnectAlert();
         return;
     }
     //出牌
     if (selectCard != null && battleProxy.isSelfAction && battleProxy.GetPlayerActTipS2C() != null && battleProxy.GetPlayerActTipS2C().acts.Contains(PlayerActType.PUT_CARD))
     {
         var cardValue = BattleAreaUtil.GetMeshCardValue(selectCard);
         if (battleProxy.GetPlayerActTipS2C().forbitCards.IndexOf(cardValue) != -1)
         {
             PopMsg.Instance.ShowMsg("吃牌后当前牌不能出牌");
             return;
         }
         PlayAMahjongC2S actC2S = new PlayAMahjongC2S();
         actC2S.mahjongCode = cardValue;
         NetMgr.Instance.SendBuff(SocketType.BATTLE, MsgNoC2S.C2S_ROOM_PLAY_A_MAHJONG.GetHashCode(), 0, actC2S, true);
         battleProxy.isSelfAction = false;
         selectCardInstance       = selectCard.GetInstanceID();
         selectCard = null;
     }
     isTouchMove = false;
 }
Ejemplo n.º 2
0
        /// <summary>
        /// 出牌
        /// </summary>
        private void PutCardHandler()
        {
            List <CardPowerVO> cardPowerList    = new List <CardPowerVO>();
            PlayerInfoVOS2C    selfPlayerInfoVO = battleProxy.playerIdInfoDic[playerInfoProxy.userID];
            List <int>         canPutCards      = new List <int>();

            foreach (int card in selfPlayerInfoVO.handCards)
            {
                cardPowerList.Add(new CardPowerVO(card, 0));
                canPutCards.Add(card);
            }
            if (selfPlayerInfoVO.getCard > 0)
            {
                cardPowerList.Add(new CardPowerVO(selfPlayerInfoVO.getCard, 0));
                canPutCards.Add(selfPlayerInfoVO.getCard);
            }
            for (int i = 0; i < cardPowerList.Count; i++)
            {
                var        cardPowerVO = cardPowerList[i];
                List <int> listFind    = canPutCards.FindAll(delegate(int s) {
                    return(s == cardPowerVO.cardValue);
                });
                if (chiPowerArr != null && chiPowerArr[0].forbitCards.Contains(cardPowerVO.cardValue))//有禁止出的牌
                {
                    cardPowerVO.power += 10000;
                }
                if (listFind.Count > 1)//有相同牌
                {
                    cardPowerVO.power += 100;
                }
                if (canPutCards.Contains(cardPowerVO.cardValue - 1))//有头牌
                {
                    cardPowerVO.power += 10;
                }
                if (canPutCards.Contains(cardPowerVO.cardValue + 1))//有尾牌
                {
                    cardPowerVO.power += 10;
                }
                var modValue = cardPowerVO.cardValue % 10;
                if (modValue > 2 && modValue < 8)//判断是否存在间隔的牌
                {
                    if (canPutCards.Contains(cardPowerVO.cardValue - 2))
                    {
                        cardPowerVO.power += 1;
                    }
                    if (canPutCards.Contains(cardPowerVO.cardValue + 2))
                    {
                        cardPowerVO.power += 1;
                    }
                }
                //统计同类型牌数量
                List <int> sampleTypeList = canPutCards.FindAll(delegate(int s) {
                    return(s % 10 == modValue);
                });
                cardPowerVO.power += (float)sampleTypeList.Count / 100;
            }
            cardPowerList.Sort((CardPowerVO cardPower1, CardPowerVO cardPower2) => {
                if (cardPower1.power < cardPower2.power)
                {
                    return(-1);
                }
                else
                {
                    return(1);
                }
            });
            var putC2S = new PlayAMahjongC2S();

            putC2S.mahjongCode = cardPowerList[0].cardValue;
            NetMgr.Instance.SendBuff(SocketType.BATTLE, MsgNoC2S.C2S_ROOM_PLAY_A_MAHJONG.GetHashCode(), 0, putC2S);
            chiPowerArr = null;
        }