예제 #1
0
        public void MinionPlayTest()
        {
            GameState G = new GameState(DeckChoiceUI.COMBO_DECK, DeckChoiceUI.COMBO_DECK, true, 0);

            G.CurrentPower = new PowerCard(G);
            // Create two minions, 1/4 and 2/5
            // They will end up 1/2 and 2/4 after battle
            MinionCard First = new MinionCard(G)
            {
                OnBoard   = true,
                CanAttack = true,
                Attack    = 1,
                Health    = 4,
                Owner     = G.PlayerOne,
            };
            MinionCard Second = new MinionCard(G)
            {
                OnBoard   = true,
                CanAttack = true,
                Attack    = 2,
                Health    = 5,
                Owner     = G.PlayerTwo,
            };

            G.PlayerOne.Board.Add(First);
            G.PlayerTwo.Board.Add(Second);

            // Tests
            Assert.IsTrue(First.IsPlayable(new Move(First.Id, Second.Id)));
            G.ProcessMove(new Move(First.Id, Second.Id));
            Assert.AreEqual(First.Attack, 1);
            Assert.AreEqual(First.Health, 2);
            Assert.AreEqual(Second.Attack, 2);
            Assert.AreEqual(Second.Health, 4);
        }
예제 #2
0
        /// <summary>
        /// 去除死去随从
        /// </summary>
        /// <param name="game"></param>
        /// <param name="MeOrYou"></param>
        /// <returns></returns>
        public List <MinionCard> ClearDead(GameManager game, Boolean MeOrYou)
        {
            //必须是当前的随从,不能使编号
            //如果是沉默状态的随从,无亡语效果!
            List <MinionCard> DeadList = new List <MinionCard>();
            var CloneMinions           = new MinionCard[BattleFieldInfo.MaxMinionCount];
            int ALive = 0;

            for (int i = 0; i < BattleFieldInfo.MaxMinionCount; i++)
            {
                if (BattleMinions[i] != null)
                {
                    if (BattleMinions[i].IsLive())
                    {
                        CloneMinions[ALive] = BattleMinions[i];
                        ALive++;
                    }
                    else
                    {
                        DeadList.Add(BattleMinions[i]);
                        game.事件池.Add(new Card.CardUtility.全局事件()
                        {
                            事件类型 = CardUtility.事件类型列表.死亡,
                            触发位置 = i + 1,
                            触发方向 = MeOrYou ? CardUtility.TargetSelectDirectEnum.本方 : CardUtility.TargetSelectDirectEnum.对方,
                            附加信息 = BattleMinions[i].种族.ToString()
                        });
                    }
                }
            }
            BattleMinions = CloneMinions;
            return(DeadList);
        }
예제 #3
0
    public void CreateMinionCardTest()
    {
        //Create individual components of a minion card
        int    id          = 1;
        string name        = "Ghost";
        Rarity rarity      = Rarity.RARE;
        string description = "Is spooky";
        int    cost        = 3;
        string imagePath   = "ghost";
        int    health      = 3;
        int    attack      = 3;

        //Create a minion card
        MinionCard testCard = new MinionCard(id, name, rarity, description, cost, imagePath, health, attack);

        //Ensure that the spell card was created correctly
        Assert.AreEqual(id, testCard.Id);
        Assert.AreEqual(name, testCard.Name);
        Assert.AreEqual(rarity, testCard.CardRarity);
        Assert.AreEqual(description, testCard.Description);
        Assert.AreEqual(cost, testCard.Cost);
        Assert.AreEqual(imagePath, testCard.ImagePath);
        Assert.AreEqual(health, testCard.Health);
        Assert.AreEqual(attack, testCard.Attack);
    }
예제 #4
0
        public static void RunStatusEffect(MinionCard myMinion, String AddtionInfo)
        {
            switch (AddtionInfo)
            {
            case strFreeze:
                myMinion.冰冻状态 = CardUtility.EffectTurn.效果命中;
                break;

            case strSlience:
                myMinion.被沉默();
                break;

            case strAngry:
                myMinion.Actual风怒 = true;
                break;

            case strCharge:
                myMinion.Actual冲锋 = true;
                if (myMinion.AttactStatus == MinionCard.攻击状态.准备中)
                {
                    myMinion.AttactStatus = MinionCard.攻击状态.可攻击;
                }
                break;

            case strTaunt:
                myMinion.Actual嘲讽 = true;
                break;

            default:
                break;
            }
        }
예제 #5
0
        public void BuildTest()
        {
            GameState G = new GameState(DeckChoiceUI.COMBO_DECK, DeckChoiceUI.COMBO_DECK, true, 0);
            // For a minion
            CardBuilder MinionBuilder = new CardBuilder
            {
                TypeID           = CardBuilder.CardType.Minion,
                AttackData       = 2,
                HealthData       = 3,
                NameData         = "MIN1",
                DescriptionData  = "ABCXYZ",
                MinionOnPlayData = (s, m) =>
                {
                },
                MinionEffectData = new EffectData <MinionCard>()
                {
                    {
                        Effect.CardDrawn, (s, m) =>
                        {
                        }
                    }
                },
            };
            MinionCard Minion = MinionBuilder.Build(G, G.PlayerOne) as MinionCard;

            Assert.AreEqual(MinionBuilder.AttackData, Minion.Attack);
            Assert.AreEqual(MinionBuilder.HealthData, Minion.Health);
            Assert.AreEqual(MinionBuilder.NameData, Minion.Name);
            Assert.AreEqual(MinionBuilder.DescriptionData, Minion.Description);
            Assert.AreEqual(MinionBuilder.MinionOnPlayData, Minion.OnPlay);
            Assert.AreEqual(MinionBuilder.MinionEffectData, Minion.Effects);
        }
예제 #6
0
        public string DealMinion(ActionStatus game, MinionCard Minion)
        {
            var Pos = Minion.战场位置;

            if (Pos.本方对方标识)
            {
                if (game.AllRole.MyPrivateInfo.handCards.Count != SystemManager.MaxHandCardCount)
                {
                    game.AllRole.MyPrivateInfo.handCards.Add(
                        CardUtility.GetCardInfoBySN(game.AllRole.MyPublicInfo.BattleField.BattleMinions[Pos.位置 - 1].序列号)
                        );
                }
                game.AllRole.MyPublicInfo.BattleField.BattleMinions[Pos.位置 - 1] = null;
            }
            else
            {
                if (game.AllRole.YourPrivateInfo.handCards.Count != SystemManager.MaxHandCardCount)
                {
                    game.AllRole.YourPrivateInfo.handCards.Add(
                        CardUtility.GetCardInfoBySN(game.AllRole.YourPublicInfo.BattleField.BattleMinions[Pos.位置 - 1].序列号)
                        );
                }
                game.AllRole.YourPublicInfo.BattleField.BattleMinions[Pos.位置 - 1] = null;
            }
            return(String.Empty);
        }
예제 #7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="Minion"></param>
        /// <param name="Addition"></param>
        public static void RunPointEffect(MinionCard Minion, String Addition)
        {
            var AttackHealth = Addition.Split("/".ToArray());

            if (AttackHealth[0] != strIgnore)
            {
                if (AttackHealth[0].Length != 1)
                {
                    Minion.实际攻击力 += int.Parse(AttackHealth[0]);
                }
                else
                {
                    Minion.实际攻击力 = int.Parse(AttackHealth[0]);
                }
            }
            if (AttackHealth[1] != strIgnore)
            {
                if (AttackHealth[1].Length != 1)
                {
                    Minion.实际生命值 += int.Parse(AttackHealth[1]);
                }
                else
                {
                    Minion.实际生命值 = int.Parse(AttackHealth[1]);
                }
            }
        }
예제 #8
0
 /// <summary>
 /// 去除死去随从
 /// </summary>
 public List<MinionCard> ClearDead()
 {
     //必须是当前的随从,不能使编号
     //如果是沉默状态的随从,无亡语效果!
     List<MinionCard> DeadList = new List<MinionCard>();
     var CloneMinions = new MinionCard[BattleFieldInfo.MaxMinionCount];
     int ALive = 0;
     for (int i = 0; i < BattleFieldInfo.MaxMinionCount; i++)
     {
         if (BattleMinions[i] != null)
         {
             if (BattleMinions[i].IsLive())
             {
                 CloneMinions[ALive] = BattleMinions[i];
                 ALive++;
             }
             else
             {
                 DeadList.Add(BattleMinions[i]);
             }
         }
     }
     BattleMinions = CloneMinions;
     return DeadList;
 }
 private void Card_PointerEntered(object sender, PointerRoutedEventArgs e) //显示卡牌详情
 {
     if (((sender as Grid).DataContext as Card).CardType == CardTypes.MinionCard)
     {
         MinionCard card = ((sender as Grid).DataContext as Card).CardData as MinionCard;
         DetailImage.Source  = new BitmapImage(new Uri(card.ImagePath));
         DetailName.Text     = card.Name;
         DetailCost.Text     = card.Cost.ToString();
         DetailCategory.Text = card.Category;
         DetailDes.Text      = card.Description;
         DetailAttack.Text   = "Attack: " + card.Attack.ToString();
         DetailHealth.Text   = "Health: " + card.Health.ToString();
     }
     if (((sender as Grid).DataContext as Card).CardType == CardTypes.SpellCard)
     {
         SpellCard card = ((sender as Grid).DataContext as Card).CardData as SpellCard;
         DetailImage.Source  = new BitmapImage(new Uri(card.ImagePath));
         DetailName.Text     = card.Name;
         DetailCost.Text     = card.Cost.ToString();
         DetailCategory.Text = "";
         DetailDes.Text      = card.Description;
         DetailAttack.Text   = "";
         DetailHealth.Text   = "";
     }
     DetailRelativePanel.Visibility = Visibility.Visible;
 }
예제 #10
0
        /// <summary>
        /// 去除死去随从
        /// </summary>
        public List <MinionCard> ClearDead()
        {
            //必须是当前的随从,不能使编号
            //如果是沉默状态的随从,无亡语效果!
            List <MinionCard> DeadList = new List <MinionCard>();
            var CloneMinions           = new MinionCard[BattleFieldInfo.MaxMinionCount];
            int ALive = 0;

            for (int i = 0; i < BattleFieldInfo.MaxMinionCount; i++)
            {
                if (BattleMinions[i] != null)
                {
                    if (BattleMinions[i].IsLive())
                    {
                        CloneMinions[ALive] = BattleMinions[i];
                        ALive++;
                    }
                    else
                    {
                        DeadList.Add(BattleMinions[i]);
                    }
                }
            }
            BattleMinions = CloneMinions;
            return(DeadList);
        }
예제 #11
0
 /// <summary>
 /// 卡牌入战场
 /// </summary>
 /// <param name="Position">从1开始的位置</param>
 /// <param name="Minion">随从</param>
 /// <remarks>不涉及到战吼等计算</remarks>
 public void PutToBattle(int Position, MinionCard Minion)
 {
     //战场满了
     if (MinionCount == MaxMinionCount)
     {
         return;
     }
     //无效的位置
     if ((Position < 1) || (Position > MinionCount + 1) || Position > MaxMinionCount)
     {
         return;
     }
     //插入操作
     if (BattleMinions[Position - 1] == null)
     {
         //添加到最右边
         BattleMinions[Position - 1] = Minion;
     }
     else
     {
         //Position右边的全体移位,腾出地方
         for (int i = MaxMinionCount - 1; i >= Position; i--)
         {
             BattleMinions[i] = BattleMinions[i - 1];
         }
         BattleMinions[Position - 1] = Minion;
     }
 }
예제 #12
0
    // 根据当前卡牌模板复制一张新的卡牌对象
    // this 是卡牌模板
    // NewMinionCard 是生成的新的卡牌实例
    public override Card GetCopy()
    {
        MinionCard NewMinionCard = new MinionCard();

        // 1.将新卡的释放效果链接到模板卡的释放效果
        NewMinionCard.SetSpellEffect(SpellEffect);

        // 2.创建棋子GameObject并将引用进行设置
        NewMinionCard.SetMinionPiece(GetWorldManager().CreatePieceForCard((string)GetParameter("CardID")));
        NewMinionCard.GetMinionPiece().GetComponentInChildren <PieceStateController>().SetCard(NewMinionCard);
        //NewMinionCard.GetMinionPiece().GetComponentInChildren<PieceStateController>().DisplayPiece();


        // 3.创建卡面显示GameObject并设置引用
        // ---------------------------------------------
        // 获取卡面物体预制体
        GameObject MainHandCardBasePrefab = (GameObject)Resources.Load("Prefabs/HandCardBase");

        // 实例化卡面物体
        NewMinionCard.SetMainHandCardBase(GameObject.Instantiate(MainHandCardBasePrefab));
        NewMinionCard.GetMainHandCardBase().GetComponent <HandCardController>().SetCard(NewMinionCard);

        // 将卡面物体放置于Canvas下
        NewMinionCard.GetMainHandCardBase().transform.SetParent(GameObject.Find("Canvas").gameObject.transform);
        // 设置默认位置
        NewMinionCard.GetMainHandCardBase().GetComponent <RectTransform>().localPosition = new Vector3(0, 0, 0);
        // 将卡面物体的卡牌引用设置为当前卡牌
        NewMinionCard.GetMainHandCardBase().GetComponent <HandCardController>().SetCard(NewMinionCard);
        // 将卡面物体隐藏
        //MainHandCardBase.SetActive(false);
        // ---------------------------------------------
        return(NewMinionCard);
    }
예제 #13
0
        public void IsPlayableTest()
        {
            GameState G = new GameState(DeckChoiceUI.COMBO_DECK, DeckChoiceUI.COMBO_DECK, true, 0);
            // Create a few cards
            var First = new SpellCard(G)
            {
                ManaCost   = 0,
                IsTargeted = true,
                Owner      = G.PlayerOne,
            };
            var Second = new MinionCard(G)
            {
                Health    = 1,
                ManaCost  = 0,
                OnBoard   = true,
                CanAttack = true,
                Owner     = G.PlayerOne,
            };

            G.PlayerOne.Board.Add(Second);
            G.PlayerOne.Hand.Add(First);
            // This should NOT be playable - invalid target
            Assert.IsFalse(First.IsPlayable(new Move(First.Id, 0)));
            // This should NOT be playable - invalid target
            Assert.IsFalse(Second.IsPlayable(new Move(Second.Id, 0)));
            // But this should be
            Assert.IsTrue(Second.IsPlayable(new Move(Second.Id, G.PlayerTwo.PlayerCard.Id)));
            // Finally, this should be
            Assert.IsTrue(First.IsPlayable(new Move(First.Id, Second.Id)));
        }
예제 #14
0
 public BattlefieldPage()
 {
     draggedMinionCard = new MinionCard();
     mainBattlefield   = new Battlefield();
     this.InitializeComponent();
     LoadBattlefield();
 }
예제 #15
0
 /// <summary>
 /// 卡牌入战场
 /// </summary>
 /// <param name="Position">从1开始的位置</param>
 /// <param name="Minion">随从</param>
 /// <remarks>不涉及到战吼等计算</remarks>
 public void PutToBattle(int Position, MinionCard Minion)
 {
     //战场满了
     if (MinionCount == SystemManager.MaxMinionCount)
     {
         return;
     }
     //无效的位置
     if ((Position < 1) || (Position > MinionCount + 1) || Position > SystemManager.MaxMinionCount)
     {
         return;
     }
     //插入操作
     if (BattleMinions[Position - 1] == null)
     {
         //添加到最右边
         BattleMinions[Position - 1] = Minion;
     }
     else
     {
         //Position右边的全体移位,腾出地方
         for (int i = SystemManager.MaxMinionCount - 1; i >= Position; i--)
         {
             BattleMinions[i] = BattleMinions[i - 1];
         }
         BattleMinions[Position - 1] = Minion;
     }
     for (int i = 0; i < MinionCount; i++)
     {
         BattleMinions[i].战场位置.位置     = i + 1;
         BattleMinions[i].战场位置.本方对方标识 = 本方对方标识;
     }
 }
예제 #16
0
파일: Player.cs 프로젝트: roadf5/HSMod
    // TODO : Board positioning
    public void SummonMinion(MinionCard minionCard, int position)
    {
        Debugger.LogPlayer(this, "summoning " + minionCard.Name + " at position " + position);

        if (Minions.Count < 7)
        {
            // Creating a Minion and its Controller
            Minion minion = new Minion(minionCard);
            minion.Controller = MinionController.Create(BoardController, minion);

            // Adding the Minion to the Player Minion list
            Minions.Add(minion);

            // Adding the Minion to the BoardController
            BoardController.AddMinion(minion, position);

            // Firing summoned events
            EventManager.Instance.OnMinionSummon(this, minion);
        }
        else
        {
            Debugger.LogPlayer(this, "couldn't summon " + minionCard.Name + " because board is full");
        }

        // Updating the Player glows
        UpdateSprites();
    }
예제 #17
0
        /// <summary>
        /// 符合种族条件
        /// </summary>
        /// <param name="minion"></param>
        /// <param name="SelectOpt"></param>
        /// <returns></returns>
        public static bool 符合选择条件(MinionCard minion, string strCondition)
        {
            if (string.IsNullOrEmpty(strCondition) || strCondition == CardUtility.strIgnore)
            {
                return(true);
            }
            foreach (var 种族名称 in Enum.GetNames(typeof(CardUtility.种族枚举)))
            {
                if (种族名称 == strCondition)
                {
                    return(strCondition == minion.种族.ToString());
                }
                if (("非" + 种族名称) == strCondition)
                {
                    return(strCondition != minion.种族.ToString());
                }
            }
            switch (strCondition.Substring(1, 1))
            {
            case "+":
                return(minion.攻击力 >= int.Parse(strCondition.Substring(0, 1)));

            case "-":
                return(minion.攻击力 <= int.Parse(strCondition.Substring(0, 1)));
            }
            return(true);
        }
예제 #18
0
    public Minion(MinionCard card)
    {
        Player      = card.Player;
        Card        = card;
        Card.Minion = this;

        CurrentAttack = card.CurrentAttack;
        BaseAttack    = card.BaseAttack;

        CurrentHealth = card.CurrentHealth;
        MaxHealth     = card.CurrentHealth;
        BaseHealth    = card.BaseHealth;

        HasTaunt        = card.HasTaunt;
        HasCharge       = card.HasCharge;
        HasPoison       = card.HasPoison;
        HasWindfury     = card.HasWindfury;
        HasDivineShield = card.HasDivineShield;
        IsElusive       = card.IsElusive;
        IsForgetful     = card.IsForgetful;
        IsStealth       = card.IsStealth;

        SpellPower = card.SpellPower;

        CurrentArmor = 0;

        Buffs = Card.Buffs;
    }
예제 #19
0
    public override void Execute(Action action)
    {
        Card card;

        //THe case of a deal card being send before a creat rune, EX.(A card in the other persons hand)
        if (EntityManager.Singelton.GetEntity(cardGuid) != null)
        {
            CardAvatar ca = (EntityManager.Singelton.GetEntity(cardGuid) as Card).GetCardAvatar();
            Debug.Log(ca);
            EntityManager.Singelton.RemoveEntity(cardGuid);
            if (type == CardType.minion)
            {
                card = new MinionCard();
                MinionCard mc = card as MinionCard;
                CardDataLoader.CardData cd = CardDataLoader.Singelton.GetCardData(id);

                mc.SetName(cd.cardName);
                mc.SetArt(cd.art);
                mc.SetBaseAttack(baseAttack);
                mc.SetBaseHealth(baseHealth);
                mc.SetMana(cost);
                mc.SetGuid(cardGuid);
                mc.SetDesc(cd.desc);
                mc.SetCardAvatar(ca);
                EntityManager.Singelton.AddEntity(cardGuid, mc);
                ca.Setup(card, cardGuid, controllerGuid);
            }
        }
        else
        {
            if (type == CardType.minion)
            {
                MinionCard mc = new MinionCard();
                CardDataLoader.CardData cd = CardDataLoader.Singelton.GetCardData(id);
                mc.SetCardText(cd.cardText);
                mc.SetName(cd.cardName);
                mc.SetArt(cd.art);
                mc.SetBaseAttack(baseAttack);
                mc.SetBaseHealth(baseHealth);
                mc.SetMana(cost);
                mc.SetGuid(cardGuid);
                mc.SetDesc(cd.desc);
                EntityManager.Singelton.AddEntity(cardGuid, mc);
            }
            else if (type == CardType.spell)
            {
                SpellCard sc = new SpellCard();
                CardDataLoader.CardData cd = CardDataLoader.Singelton.GetCardData(id);

                sc.SetName(cd.cardName);
                sc.SetArt(cd.art);
                sc.SetMana(cost);
                sc.SetDesc(cd.desc);
                sc.SetGuid(cardGuid);
                sc.SetCardType((int)type);
                EntityManager.Singelton.AddEntity(cardGuid, sc);
            }
        }
        action();
    }
예제 #20
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="Minion"></param>
        /// <param name="Addition"></param>
        public static void RunPointEffect(MinionCard Minion, String Addition)
        {
            var AttackHealth = Addition.Split("/".ToArray());

            Minion.实际攻击力 = PointProcess(Minion.实际攻击力, AttackHealth[0]);
            Minion.实际生命值 = PointProcess(Minion.实际生命值, AttackHealth[1]);
        }
예제 #21
0
    /// <summary>
    /// Takes a JSON string as input and uses it to generate a list of cards
    /// </summary>
    /// <param name="jsonText">The input JSON string</param>
    /// <returns>A list of cards generated from the JSON string</returns>
    public static List <Card> GenerateCardsFromJSON(string jsonText)
    {
        //Create an empty list of cards, which will be populated with the generated cards
        List <Card> generatedCards = new List <Card>();

        //Deserialise the JSON string
        Dictionary <string, object> cardData = (Dictionary <string, object>)Json.Deserialize(jsonText);

        //Extract spell and minion cards
        List <object> spellCards  = (List <object>)cardData["spellCards"];
        List <object> minionCards = (List <object>)cardData["minionCards"];

        //Iterate through every spell card
        foreach (object card in spellCards)
        {
            //Get json data of the card
            Dictionary <string, object> currentCardData = (Dictionary <string, object>)card;

            //Set individual components of the card
            int           id          = ExtractId(currentCardData);
            string        name        = ExtractName(currentCardData);
            Rarity        rarity      = ExtractRarity(currentCardData);
            string        description = ExtractDescription(currentCardData);
            int           cost        = ExtractCost(currentCardData);
            string        imagePath   = ExtractImagePath(currentCardData);
            List <Effect> effects     = ExtractEffects(currentCardData);

            //Create a new spellcard from the parsed json data
            SpellCard newCard = new SpellCard(id, name, rarity, description, cost, imagePath, effects);

            //Add the spell card to the dictionary of all cards
            generatedCards.Add(newCard);
        }

        foreach (object card in minionCards)
        {
            //Get json data of the card
            Dictionary <string, object> currentCardData = (Dictionary <string, object>)card;

            //Set individual components of the card
            int    id          = ExtractId(currentCardData);
            string name        = ExtractName(currentCardData);
            Rarity rarity      = ExtractRarity(currentCardData);
            string description = ExtractDescription(currentCardData);
            int    cost        = ExtractCost(currentCardData);
            string imagePath   = ExtractImagePath(currentCardData);
            int    health      = ExtractHealth(currentCardData);
            int    attack      = ExtractAttack(currentCardData);

            //Create a new spellcard from the parsed json data
            MinionCard newCard = new MinionCard(id, name, rarity, description, cost, imagePath, health, attack);

            //Add the spell card to the dictionary of all cards
            generatedCards.Add(newCard);
        }

        //Return the list of generated cards
        return(generatedCards);
    }
예제 #22
0
 public void Clone(MinionCard minion)
 {
     Name        = minion.GetName();
     description = minion.GetDescription();
     manaCost    = minion.GetManaCost();
     health      = minion.GetHealth();
     damage      = minion.GetDamage();
     armour      = minion.GetArmour();
 }
예제 #23
0
 /// <summary>
 /// InitByMinion
 /// </summary>
 /// <param name="minion"></param>
 public void Init(MinionCard minion)
 {
     称    = minion.称;
     攻击力  = minion.实际攻击值;
     生命值  = minion.生命值;
     使用成本 = minion.使用成本;
     状态列表 = minion.状态;
     能否攻击 = minion.能否攻击;
     描述   = minion.描述;
 }
예제 #24
0
    public void SpawnCard()
    {
        Player player = heroPanel.GetComponent <Player>();

        if (player.CanDrawCard(1) || firstCards)
        {
            MinionCard minionCard = cardSpawnStrategy.SpawnCard();
            InstantiateCard(minionCard);
            player.ReduceMana(1f);
        }
    }
예제 #25
0
 private void SummonMinionFromHandCard(MinionCard summoningMinion) //从手牌中召唤随从
 {
     mainBattlefield.SummonPlayerMinion(new Minion(summoningMinion));
     for (int i = 0; i < summoningMinion.Effects.Count; i++) //战吼效果检查
     {
         Effect aimEffect = summoningMinion.Effects[i];
         if (aimEffect.Category == EffectData.EffectCategory.Battlecry)
         {
             DealEffect(aimEffect);
         }
     }
 }
예제 #26
0
 private void ShowCardDetail(MinionCard minionCardDetail)
 {
     if (CardDetailRelativePanel.Visibility == Visibility.Collapsed)
     {
         ChangeVisibilityByCardDetail();
     }
     DetailMinionCardAttack.Text  = minionCardDetail.Attack.ToString();
     DetailMinionCardCost.Text    = minionCardDetail.Cost.ToString();
     DetailMinionCardHealth.Text  = minionCardDetail.Health.ToString();
     DetailMinionCardName.Text    = minionCardDetail.Name;
     DetailMinionCardImage.Source = new BitmapImage(new Uri(minionCardDetail.ImagePath));
 }
예제 #27
0
 public MinionCardEditor(string CardSn)
 {
     InitializeComponent();
     if (string.IsNullOrEmpty(CardSn))
     {
         IsCreateMode = true;
     }
     else
     {
         IsCreateMode = false;
         minion       = (MinionCard)Engine.Utility.CardUtility.GetCardInfoBySN(CardSn);
     }
 }
예제 #28
0
    private new void Start()
    {
        base.Start();

        currentCard         = cardData as MinionCard;
        UIGoldCost.text     = currentCard.goldCost.ToString();
        UIAttackPoints.text = currentCard.attackPoints.ToString();

        if (currentCard.Atributtes != 0)
        {
            UIAttributes.text = currentCard.Atributtes.ToString();
        }
    }
예제 #29
0
        //右击卡牌事件
        private void MinionCardGridViewItem_RightTapped(object sender, RightTappedRoutedEventArgs e)
        {
            if ((sender as Grid).Name == "")
            {
                return;
            }
            NewDeckTip.Visibility = Visibility.Collapsed;
            MinionCard addedCard = (sender as Grid).DataContext as MinionCard;

            creatingDeck.MinionCard.Add(addedCard);
            CardDataManager.AddCardToListView(NewDeckCardListView, addedCard);
            return;
        }
        GivenBoardIsEmpty_WhenSummonMinionActionRequested_ThenCardRemovedFromHandAndManaDecresedAndMinionOboard()
        {
            var minionCard = new MinionCard(5, 1, 1);
            var gameState  = GameState.Empty.With(
                PlayerGameState.Empty.With(_player, remainingMana: x => 7, hand: x => x.AddCard(minionCard)));

            var action = new SummonAction(_player, minionCard);

            var newGameState = _testee.ApplyAction(gameState, action);

            Assert.IsFalse(newGameState.Of(_player).Hand.Any());
            Assert.AreEqual(7 - 5, newGameState.Of(_player).RemainingMana);
            Assert.IsTrue(newGameState.Of(_player).Minions.Count() == 1);
        }
예제 #31
0
 /// <summary>
 /// 去除死去随从
 /// </summary>
 public void ClearDead()
 {
     var CloneMinions = new MinionCard[BattleFieldInfo.MaxMinionCount];
     int ALive = 0;
     for (int i = 0; i < BattleFieldInfo.MaxMinionCount; i++)
     {
         if (BattleMinions[i] != null && BattleMinions[i].IsLive())
         {
             CloneMinions[ALive] = BattleMinions[i];
             ALive++;
         }
     }
     BattleMinions = CloneMinions;
 }
예제 #32
0
 protected override void Context()
 {
     _card = new MinionCard("M1")
     {
         PlayerClass = "Warrior",
         Name        = "Whirlwind",
         Faction     = FactionTypeOptions.Alliance,
         Rarity      = RarityTypeOptions.Legendary,
         Health      = 10,
         Attack      = 4,
         Cost        = 9,
         Text        = "It's just a card"
     };
 }
예제 #33
0
 public static void RunStatusEffect(MinionCard myMinion, String AddtionInfo)
 {
     switch (AddtionInfo)
     {
         case strFreeze:
             myMinion.冰冻状态 = CardUtility.EffectTurn.效果命中;
             break;
         case strSlience:
             myMinion.被沉默();
             break;
         case strAngry:
             myMinion.Actual风怒 = true;
             break;
         case strCharge:
             myMinion.Actual冲锋 = true;
             if (myMinion.AttactStatus == MinionCard.攻击状态.准备中)
             {
                 myMinion.AttactStatus = MinionCard.攻击状态.可攻击;
             }
             break;
         case strTaunt:
             myMinion.Actual嘲讽 = true;
             break;
         default:
             break;
     }
 }
예제 #34
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="Minion"></param>
 /// <param name="Addition"></param>
 public static void RunPointEffect(MinionCard Minion, String Addition)
 {
     var AttackHealth = Addition.Split("/".ToArray());
     Minion.实际攻击力 = PointProcess(Minion.实际攻击力, AttackHealth[0]);
     Minion.实际生命值 = PointProcess(Minion.实际生命值, AttackHealth[1]);
 }
예제 #35
0
 /// <summary>
 /// 卡牌入战场
 /// </summary>
 /// <param name="Position">从1开始的位置</param>
 /// <param name="Minion">随从</param>
 /// <remarks>不涉及到战吼等计算</remarks>
 public void PutToBattle(int Position, MinionCard Minion)
 {
     //战场满了
     if (MinionCount == MaxMinionCount) return;
     //无效的位置
     if ((Position < 1) || (Position > MinionCount + 1) || Position > MaxMinionCount) return;
     //插入操作
     if (BattleMinions[Position - 1] == null)
     {
         //添加到最右边
         BattleMinions[Position - 1] = Minion;
     }
     else
     {
         //Position右边的全体移位,腾出地方
         for (int i = MaxMinionCount - 1; i >= Position; i--)
         {
             BattleMinions[i] = BattleMinions[i - 1];
         }
         BattleMinions[Position - 1] = Minion;
     }
 }
예제 #36
0
    //public MinionSlotInputObject MinionSlot { get { return minionSlot; } set { minionSlot = value; } }

    public void SummonByMinionCard(MinionCard _minionCard)
    {
        data.name = _minionCard.Name;
        data.maxHealth = _minionCard.Health;
        data.health = _minionCard.Health;
        data.playerType = _minionCard.PlayerType;
        data.damage = _minionCard.PhysicalDamage;
        data.armor = _minionCard.PhysicalArmor;
        data.resistance = _minionCard.PhysicalResistance;
        data.actionPoint = 1;
        isDead = false;
        data.tags = _minionCard.Tags.ToArray();
        data.description = _minionCard.Description;
        targetStrategies = new List<TargetStrategy>(_minionCard.TargetStrategies);
        if(targetStrategies.Count == 0)
        {
            targetStrategies.Add(new CloseRangeTargetStrategy());
        }
        fightBackStrategies = new List<FightBackStrategy>(_minionCard.FightBackStrategy);
        if (fightBackStrategies.Count == 0)
        {
            fightBackStrategies.Add(new NormalFightBackStrategy());
        }
        foreach (BuffVO tBuffVO in _minionCard.Buffs)
        {
            Type t = Type.GetType(tBuffVO.BuffName);
            if (t == null)
                continue;
            Buff tBuff = (Buff)Activator.CreateInstance(t);
            tBuff.Init(tBuffVO);
            AddBuff(tBuff);
        }
    }
예제 #37
0
 public void SummonMinionUsingMinionCard(MinionCard _minionCard, PositionVO _position)
 {
     Minion minion = new Minion();
     minion.SummonByMinionCard(_minionCard);
     AddMinion(minion, _position);
 }
예제 #38
0
 /// <summary>
 /// 卡牌入战场
 /// </summary>
 /// <param name="CardSn"></param>
 public void AppendToBattle(MinionCard Minion)
 {
     int Position = MinionCount + 1;
     PutToBattle(Position, Minion);
 }