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); }