Example #1
0
        public UserContext InitSecondUserContext(List <Card> cardGroup)
        {
            shortCodeService.CreateCode().Returns(DateTime.Now.Ticks.ToString());
            PlayerModel secondPlayer = new PlayerModel()
            {
                UserCode = "secondPlayer",
            };
            UserContext second = new UserContext()
            {
                UserCode     = secondPlayer.UserCode,
                Player       = secondPlayer,
                IsActivation = false,
                IsFirst      = false,
                AllCards     = new List <Card>(),
                Power        = 10,
                FullPower    = 10,
                RemainingHeroPowerCastCount = 1,
                SwitchDone = true,
            };
            List <UserCardGroupDetailModel> secondCardGroup = new List <UserCardGroupDetailModel>();

            foreach (string cardCode in cardGroup.Select(c => c.CardCode))
            {
                secondCardGroup.Add(new UserCardGroupDetailModel()
                {
                    CardCode = cardCode
                });
            }
            foreach (var cg in secondCardGroup)
            {
                Card libCard = CardsUtil.AllCard.First(c => c.CardCode == cg.CardCode);
                var  card    = Activator.CreateInstance(libCard.GetType()) as Card;
                card.CardInGameCode    = cardInGameIndex.ToString();
                card.IsFirstPlayerCard = false;
                second.AllCards.Add(card);
                cardInGameIndex++;
            }
            BaseHero secondHero = null;

            switch (second.AllCards.First(c => c.CardType == CardType.英雄).GetType().Name)
            {
            case "Druid": secondHero = new Druid(); break;

            case "Hunter": secondHero = new Hunter(); break;

            case "Mage": secondHero = new Mage(); break;

            case "Paladin": secondHero = new Paladin(); break;

            case "Priest": secondHero = new Priest(); break;

            case "Rogue": secondHero = new Rogue(); break;

            case "Shaman": secondHero = new Shaman(); break;

            case "Warlock": secondHero = new Warlock(); break;

            case "Warrior": secondHero = new Warrior(); break;
            }
            cardInGameIndex++;
            secondHero.CardLocation      = CardLocation.场上;
            secondHero.CardInGameCode    = cardInGameIndex.ToString();
            secondHero.DeskIndex         = 8;
            secondHero.IsFirstPlayerCard = false;
            second.AllCards[second.AllCards.FindIndex(c => c.CardType == CardType.英雄)] = secondHero;
            return(second);
        }
        /// <summary>
        /// 回合结束
        /// </summary>
        public void TurnEnd(IShortCodeService shortCodeService)
        {
            UserContext uc = GameContext.GetActivationUserContext(), next_uc = null;

            uc.ComboSwitch = false;
            List <Card> buffCards = new List <Card>();

            buffCards.AddRange(GameContext.DeskCards.GetDeskCardsByIsFirst(uc.IsFirst));
            buffCards.AddRange(uc.HandCards);
            buffCards = buffCards.Where(c => c != null && c.Buffs.Count > 0).ToList();
            foreach (Card card in buffCards)
            {
                LinkedListNode <IBuffRestore <ICardLocationFilter, IEvent> > buff = card.Buffs.First;
                MyTurnEndEvent myTurnEndEvent = new MyTurnEndEvent()
                {
                    Parameter = new ActionParameter()
                    {
                        GameContext = GameContext,
                        PrimaryCard = card
                    }
                };
                while (buff != null && buff.Value.TryCapture(card, myTurnEndEvent))
                {
                    buff.Value.Action(new ActionParameter()
                    {
                        GameContext = GameContext,
                        PrimaryCard = card
                    });
                    // card.Buffs.Remove(buff);
                    buff = buff.Next;
                }
            }


            #region 调整玩家对象
            if (GameContext.TurnIndex > 0)
            {
                next_uc = GameContext.GetNotActivationUserContext();

                var para = new ActionParameter()
                {
                    GameContext = GameContext,
                    PrimaryCard = GameContext.GetHeroByActivation(next_uc.IsFirst)
                };
                GameContext.EventQueue.AddLast(new MyTurnEndEvent()
                {
                    Parameter = para
                });
                GameContext.EventQueue.AddLast(new TouchOffComboEvent()
                {
                    Parameter = para
                });
                foreach (var bio in GameContext.DeskCards.Where(c => c != null))
                {
                    BaseBiology biology = bio as BaseBiology;
                    biology.RemainAttackTimes = 0;
                }

                //在回合交换前结算
                GameContext.QueueSettlement();
                _gameCache.SetContext(GameContext);
                //DataExchangeBll.Instance.AsyncInsert("TurnEnd", "Controler_Base", "", JsonConvert.SerializeObject(GameContext), DataSourceEnum.GameControler);

                uc.IsActivation      = false;
                next_uc.IsActivation = true;
            }
            else
            {
                //开局换完牌后,设置先手玩家费用=1
                uc.FullPower = 1;
                uc.Power     = 1;
            }
            #endregion

            #region 调整游戏环境对象
            GameContext.CurrentTurnRemainingSecond = 60;
            GameContext.CurrentTurnCode            = GameContext.NextTurnCode;
            GameContext.NextTurnCode = shortCodeService.CreateCode();
            GameContext.TurnIndex++;

            #endregion
            GameContext.Settlement();
            _gameCache.SetContext(GameContext);
        }