예제 #1
0
        public void PrepareOffense()
        {
            this.Player.DrawCard();
            _battle.EndPhase();

            var AtkCards = PrepareAttack();

            List <Carta> DefensePrep = new List <Carta>();// PurCardsOnField();

            foreach (var card in this.Player.AtackField)
            {
                if (!AtkCards.Contains(card))
                {
                    DefensePrep.Add(card);
                }
            }
            DefensePrep.ForEach(x =>
            {
                this.Player.AtackField.Remove(x);
                this.Player.DefenseField.Add(x);
            });


            DefensePrep.AddRange(PurCardsOnField());

            //Basic just to program responses;
            var FEcreatures = (from item in DefensePrep
                               select new
            {
                item.Id,
                item.Ataque,
                item.Defesa,
                Position = "defense"
            });


            Player.AddNotification(_battle.Phase, JsonConvert.SerializeObject(FEcreatures));

            _battle.EndPhase();


            var Attackers = (from item in AtkCards
                             select new
            {
                item.Id,
                item.Ataque,
                item.Defesa,
                Position = "Offense"
            });


            MoveAttackerstToAttackField(AtkCards);

            _battle.Turn.SetAttackers(AtkCards);



            Player.AddNotification(_battle.Phase, JsonConvert.SerializeObject(Attackers));
            _battle.EndPhase();
        }
예제 #2
0
        public void PrepareDefense(IEnumerable <int> Attackers)
        {
            var                def            = Player.DefenseField;
            var                atk            = this._battle.Turn.Atackers;
            List <int>         usedDeffenders = new List <int>();
            Func <Carta, bool> IsWeak         = c =>
            {
                return(c.Ataque <= 100 || c.Defesa <= 100);
            };

            int WeekCardsCount = def.Count(c => IsWeak(c));

            List <FEBattleMatch> matchUps = new List <FEBattleMatch>();

            foreach (var _attacker in atk.OrderByDescending(x => x.Defesa))
            {
                var defId = 0;

                var prioritaryD = (from item in def
                                   where item.Defesa > _attacker.Ataque &&
                                   item.Ataque > _attacker.Defesa &&
                                   !usedDeffenders.Contains(item.Id)
                                   select item).OrderBy(x => x.Defesa).FirstOrDefault();
                if (prioritaryD != null)
                {
                    defId = prioritaryD.Id;
                }
                else
                {
                    List <Carta> scope = new List <Carta>();
                    if (HasLessCardsThanOpponentInField())
                    {
                        scope = (from item in def
                                 where
                                 item.Ataque > _attacker.Defesa &&
                                 item.Ataque + 50 <= _attacker.Ataque &&
                                 !usedDeffenders.Contains(item.Id)
                                 select item).ToList();
                    }
                    else
                    {
                        scope = (from item in def
                                 where
                                 item.Ataque > _attacker.Defesa &&
                                 !usedDeffenders.Contains(item.Id)
                                 select item).ToList();
                    }


                    if (scope.Count > 0)
                    {
                        defId = scope.OrderBy(x => x.Ataque).First().Id;
                    }
                    else
                    {
                        if (_attacker.Ataque >= 250 || _attacker.Defesa >= 200)
                        {
                            defId = this.Player.DefenseField.OrderByDescending(x => x.Ataque).FirstOrDefault().Id;
                        }
                    }
                }

                if (defId == 0 && WeekCardsCount > 0)
                {
                    var wrapper = this.Player.DefenseField.FirstOrDefault(x => IsWeak(x) &&
                                                                          !usedDeffenders.Contains(x.Id));
                    if (wrapper != null)
                    {
                        defId = wrapper.Id;
                    }
                }

                if (defId != 0)
                {
                    matchUps.Add(new FEBattleMatch()
                    {
                        atkCardId = _attacker.Id,
                        defCardId = defId
                    });
                    usedDeffenders.Add(defId);
                }
            }

            Player.AddNotification(_battle.Phase, JsonConvert.SerializeObject(matchUps));
        }