Example #1
0
 void UpdateAIPlay()
 {
     if (m_whosTurn.isAI &&
         !m_isThisTrunPlayedCard &&
         m_whosTurnCounter <= WHOS_TURN_TIME - m_aiThinkTime &&
         m_whosTurn.handCards.Count > 0)
     {
         CBPlayCard msg = new CBPlayCard();
         msg.CardID = RandPlayerCardID(m_whosTurn);
         if (GetCard(msg.CardID).type == CardType.ForOneTarget)
         {
             msg.TargetID = RandTargetID(m_whosTurn);
         }
         if (msg.CardID == 5) //猜测
         {
             List <Card> rnds = new List <Card>(m_cardMgr.leftCards);
             foreach (var p in alivePlayers)
             {
                 rnds.AddRange(p.handCards);
             }
             int rndIndex = rand.Next(0, rnds.Count);
             msg.Extend = rnds[rndIndex].tableID;
         }
         OnPlayCard(m_whosTurn, msg);
         m_aiThinkTime = rand.Next(8, 20);
     }
 }
Example #2
0
        void OnPlayCard(Player player, CBPlayCard msg)
        {
            if (m_whosTurn != player)
            {
                Logger.LogError("{0}\t出牌,但不是他的回合,已禁止!", player.name);
                return;
            }

            if (m_isThisTrunPlayedCard)
            {
                return;
            }

            m_isThisTrunPlayedCard = true;

            var card = GetCard(msg.CardID);

            player.RemoveCard(card);
            var target = GetPlayer(msg.TargetID);


            if (msg.Extend > 0)
            {
                if (target != null)
                {
                    Logger.Log("{0}\t出牌\t{1}\t指向\t{2}\tExt\t{3}", player.name, card.table.effect, target.name, msg.Extend);
                }
                else
                {
                    Logger.Log("{0}\t出牌\t{1}\tExt\t{2}", player.name, card.table.effect, msg.Extend);
                }
            }
            else
            {
                if (target != null)
                {
                    Logger.Log("{0}\t出牌\t{1}\t指向\t{2}", player.name, card.table.effect, target.name);
                }
                else
                {
                    Logger.Log("{0}\t出牌\t{1}", player.name, card.table.effect);
                }
            }

            CBPlayCardSync sync = new CBPlayCardSync();

            sync.FromID   = player.id;
            sync.TargetID = msg.TargetID;
            sync.CardID   = card.id;
            sync.Extend   = msg.Extend;
            SendToAll(sync);

            float waitFor = CardEffectLogic(player, target, card, msg.Extend);

            Task.WaitFor(waitFor, () =>
            {
                TurnNextAndSendCard();
            });
        }
Example #3
0
        public void PlayCard(int cardId, int target = 0, int extend = 0)
        {
            CBPlayCard msg = new CBPlayCard();

            msg.CardID   = cardId;
            msg.TargetID = target;
            msg.Extend   = extend;
            SendMessage(msg);
        }
Example #4
0
        private void RandomPlayCard()
        {
            CBPlayCard msg = new CBPlayCard();

            msg.CardID = RandomPlayerCardID(m_whosTurn);
            var card = GetCard(msg.CardID);

            if (card.type == CardType.ForOneTarget)
            {
                msg.TargetID = RandomTargetID(m_whosTurn);
            }
            if (card.tableID == 5) //猜测
            {
                List <Card> rnds = new List <Card>(m_cardMgr.leftCards);
                foreach (var p in alivePlayers)
                {
                    rnds.AddRange(p.handCards);
                }
                int rndIndex = rand.Next(0, rnds.Count);
                msg.Extend = rnds[rndIndex].tableID;
            }
            OnPlayCard(m_whosTurn, msg);
        }