Exemplo n.º 1
0
        public void DoTurn(Player attacker, Player defender)
        {
            InitTurn(attacker, defender);

            #region Draw a Card
            if (attacker.Deck.Count > 0)
            {
                Random random = new Random();
                int nextCard = random.Next(attacker.Deck.Count);
                attacker.Hand.Add(attacker.Deck[nextCard].Clone());
                attacker.Deck.RemoveAt(nextCard);
            }
            #endregion

            #region Battleeffects
            foreach (Skill skill in combatOptions.BattleEffects)
            {
                foreach (Card card in attacker.CardsForHeroSkill(skill))
                {
                    card.TakeSkill(skill);
                }
            }
            #endregion

            #region Hero Skills
            foreach (Skill skill in attacker.Skills)
            {
                foreach (Card card in attacker.CardsForHeroSkill(skill))
                {
                    card.TakeSkill(skill);
                }
            }
            #endregion

            #region OpenTurn Skills
            foreach (Card card in attacker.Hand.Where(x => x.Delay < 1 && x.Defense > 0 && x.Skills.Where(s => s.Category == SkillCat.TurnActivated).Count() > 0))
            {
                foreach (Skill skill in card.Skills.Where(s => s.Category == SkillCat.TurnActivated))
                {
                    foreach (Card target in this.CardsForSkill(attacker, skill, card))
                    {
                        target.TakeSkill(skill);
                    }
                }
            }

            #endregion

            #region Attack Skills & Attack
            for (int i = 0; i < attacker.Hand.Count; i++)
            {
                if (attacker.Hand[i].Delay > 0) continue;

                DoCardAttack(attacker, defender, i);

                if (attacker.Hand[i].Skills.Any(s => s.Name.ToLower() == "dualstrike"))
                {
                    foreach (Skill skill in attacker.Hand[i].Skills.Where(s => s.Name.ToLower() == "dualstrike"))
                    {
                        if (skill.Aux == skill.Value)
                        {
                            skill.Aux = -1;
                            DoCardAttack(attacker, defender, i);
                        }
                    }
                }
            }
            #endregion

            #region AfterAttack effects & dead recolection
            foreach (Card affectedCard in attacker.Hand)
            {
                if (affectedCard.Scorch > 0)
                {
                    affectedCard.Defense -= affectedCard.Scorch;
                    if (!affectedCard.Scorched) affectedCard.Scorch = 0;
                }

                affectedCard.Defense -= affectedCard.Poison;
            }

            for (int i = 14; i >= 0; i--)
            {
                if (attacker.Hand.Count <= i) continue;
                if (attacker.Hand[i].Defense < 1) attacker.Hand.RemoveAt(i);
            }

            for (int i = 14; i >= 0; i--)
            {
                if (defender.Hand.Count <= i) continue;
                if (defender.Hand[i].Defense < 1) defender.Hand.RemoveAt(i);
            }
            #endregion
        }
Exemplo n.º 2
0
        public void DoTurn(Player attacker, Player defender)
        {
            InitTurn(attacker, defender);

            #region Draw a Card
            if (attacker.Deck.Count > 0)
            {
                Random random   = new Random();
                int    nextCard = random.Next(attacker.Deck.Count);
                attacker.Hand.Add(attacker.Deck[nextCard].Clone());
                attacker.Deck.RemoveAt(nextCard);
            }
            #endregion

            #region Battleeffects
            foreach (Skill skill in combatOptions.BattleEffects)
            {
                foreach (Card card in attacker.CardsForHeroSkill(skill))
                {
                    card.TakeSkill(skill);
                }
            }
            #endregion

            #region Hero Skills
            foreach (Skill skill in attacker.Skills)
            {
                foreach (Card card in attacker.CardsForHeroSkill(skill))
                {
                    card.TakeSkill(skill);
                }
            }
            #endregion

            #region OpenTurn Skills
            foreach (Card card in attacker.Hand.Where(x => x.Delay < 1 && x.Defense > 0 && x.Skills.Where(s => s.Category == SkillCat.TurnActivated).Count() > 0))
            {
                foreach (Skill skill in card.Skills.Where(s => s.Category == SkillCat.TurnActivated))
                {
                    foreach (Card target in this.CardsForSkill(attacker, skill, card))
                    {
                        target.TakeSkill(skill);
                    }
                }
            }

            #endregion

            #region Attack Skills & Attack
            for (int i = 0; i < attacker.Hand.Count; i++)
            {
                if (attacker.Hand[i].Delay > 0)
                {
                    continue;
                }

                DoCardAttack(attacker, defender, i);

                if (attacker.Hand[i].Skills.Any(s => s.Name.ToLower() == "dualstrike"))
                {
                    foreach (Skill skill in attacker.Hand[i].Skills.Where(s => s.Name.ToLower() == "dualstrike"))
                    {
                        if (skill.Aux == skill.Value)
                        {
                            skill.Aux = -1;
                            DoCardAttack(attacker, defender, i);
                        }
                    }
                }
            }
            #endregion

            #region AfterAttack effects & dead recolection
            foreach (Card affectedCard in attacker.Hand)
            {
                if (affectedCard.Scorch > 0)
                {
                    affectedCard.Defense -= affectedCard.Scorch;
                    if (!affectedCard.Scorched)
                    {
                        affectedCard.Scorch = 0;
                    }
                }

                affectedCard.Defense -= affectedCard.Poison;
            }

            for (int i = 14; i >= 0; i--)
            {
                if (attacker.Hand.Count <= i)
                {
                    continue;
                }
                if (attacker.Hand[i].Defense < 1)
                {
                    attacker.Hand.RemoveAt(i);
                }
            }

            for (int i = 14; i >= 0; i--)
            {
                if (defender.Hand.Count <= i)
                {
                    continue;
                }
                if (defender.Hand[i].Defense < 1)
                {
                    defender.Hand.RemoveAt(i);
                }
            }
            #endregion
        }