Пример #1
0
        public async Task <ServiceResponse <FightResultDTO> > Fight(FightRequestDTO request)
        {
            ServiceResponse <FightResultDTO> response = new ServiceResponse <FightResultDTO>(new FightResultDTO());

            try
            {
                var chars = await _context.Characters
                            .Include(c => c.Weapon)
                            .Include(c => c.CharacterSkills).ThenInclude(cs => cs.Skills)
                            .Where(c => request.CharacterIds.Contains(c.Id)).ToListAsync();

                bool defeated = false;
                while (!defeated)
                {
                    foreach (var attacker in chars)
                    {
                        List <Character> enemies = chars.Where(c => c.Id != attacker.Id).ToList();
                        Character        enemy   = enemies[new Random().Next(enemies.Count())];

                        int    dmg        = 0;
                        string attackUsed = string.Empty;

                        bool useWeapon = new Random().Next(2) == 0;
                        if (attacker.Weapon != null && attacker.CharacterSkills.Count == 0)
                        {
                            useWeapon = true;
                        }
                        else if (attacker.Weapon == null && attacker.CharacterSkills.Count > 0)
                        {
                            useWeapon = false;
                        }

                        if (useWeapon)
                        {
                            attackUsed = attacker.Weapon.Name;
                            dmg        = WeaponAttackDamage(attacker, enemy);
                        }
                        else
                        {
                            int randomSkill = new Random().Next(attacker.CharacterSkills.Count);
                            attackUsed = attacker.CharacterSkills[randomSkill].Skills.Name;
                            dmg        = SkillsAttackDamage(attacker, enemy, attacker.CharacterSkills[randomSkill]);
                        }
                        response.Data.Log.Add($"{attacker.Name} attacks {enemy.Name} with {(dmg > 0 ? dmg : 0)} damage.");
                        if (enemy.HitPoints <= 0)
                        {
                            defeated = true;
                            attacker.Victories++;
                            enemy.Defeats++;
                            response.Data.Log.Add($"{attacker.Name} defeats {enemy.Name}");
                            break;
                        }
                    }
                }
                chars.ForEach(c =>
                {
                    c.Fights++;
                    c.HitPoints = 100;
                });
                _context.Characters.UpdateRange(chars);
                await _context.SaveChangesAsync();
            }
            catch (System.Exception ex)
            {
                response.Success = false;
                response.Message = ex.Message;
            }
            return(response);
        }
Пример #2
0
        public async Task <ServiceResponce <FightResultDTO> > Fight(FightRequestDTO request)
        {
            ServiceResponce <FightResultDTO> responce = new ServiceResponce <FightResultDTO>
            {
                Data = new FightResultDTO()
            };

            try
            {
                List <Charecter> charecters = await _context.Charecters.Include(cs => cs.Weapon)
                                              .Include(c => c.CharecterSkills).ThenInclude(cs => cs.Skill)
                                              .Where(c => request.CharecterIds.Contains(c.Id)).ToListAsync();

                bool defeated = false;
                while (!defeated)
                {
                    foreach (Charecter attacker in charecters)
                    {
                        List <Charecter> opponenets = charecters.Where(c => c.Id != attacker.Id).ToList();
                        Charecter        opponent   = opponenets[new Random().Next(opponenets.Count)];
                        int    damage     = 0;
                        string attackUsed = string.Empty;
                        bool   useWeapon  = new Random().Next(2) == 0;
                        if (useWeapon)
                        {
                            attackUsed = attacker.Weapon.Name;
                            damage     = DoWeaponAttack(attacker, opponent);
                        }
                        else
                        {
                            int randomSkill = new Random().Next(attacker.CharecterSkills.Count);
                            attackUsed = attacker.CharecterSkills[randomSkill].Skill.Name;
                            damage     = DoSkillAttack(attacker, opponent, attacker.CharecterSkills[randomSkill]);
                        }
                        responce.Data.Log.Add($"{attacker.Name} attcks {opponent.Name} using {attackUsed} with {(damage > 0 ? damage : 0)} damage.");
                        if (opponent.HitPoints <= 0)
                        {
                            defeated = true;
                            attacker.Victories++;
                            opponent.Defeats++;
                            responce.Data.Log.Add($"{opponent.Name} has been defeated!");
                            responce.Data.Log.Add($"{attacker.Name} wins with {attacker.HitPoints} HP left!");
                            break;
                        }
                    }
                }
                charecters.ForEach(c =>
                {
                    c.Fights++;
                    c.HitPoints = 100;
                });
                _context.Charecters.UpdateRange(charecters);
                await _context.SaveChangesAsync();
            }
            catch (Exception ex)
            {
                responce.Success = false;
                responce.Message = ex.Message;
            }
            return(responce);
        }
Пример #3
0
 public async Task <IActionResult> Fight(FightRequestDTO request)
 {
     return(Ok(await _fightService.Fight(request)));
 }
Пример #4
0
        public async Task <serviceResponse <FightResultDTO> > Fight(FightRequestDTO request)
        {
            serviceResponse <FightResultDTO> response = new serviceResponse <FightResultDTO>
            {
                Data = new FightResultDTO()
            };

            try
            {
                List <Character> Character =

                    await _context.Characters
                    .Include(c => c.Weapon)
                    .Include(c => c.CharacterSkills).ThenInclude(c => c.Skill)
                    .Where(c => request.CharacterIds.Contains(c.Id)).ToListAsync();

                bool defeated = false;
                while (!defeated)
                {
                    foreach (Character attacker in Character)
                    {
                        List <Character> opponents = Character.Where(c => c.Id != attacker.Id).ToList();
                        Character        opponent  = opponents[new Random().Next(opponents.Count)];

                        int    damage     = 0;
                        string attackUsed = string.Empty;

                        bool useWeapon = new Random().Next(2) == 0;

                        if (useWeapon)
                        {
                            attackUsed = attacker.Weapon.Name;
                            damage     = DoWeaponAttack(attacker, opponent);
                        }
                        else
                        {
                            int randomSkill = new Random().Next(attacker.CharacterSkills.Count);
                            attackUsed = attacker.CharacterSkills[randomSkill].Skill.Name;
                            damage     = SkillAttack(attacker, opponent, attacker.CharacterSkills[randomSkill]);
                        }
                        response.Data.Log.Add($"{attacker.Name} attacked {opponent.Name} with {attackUsed} with damage {(damage >= 0 ? damage : 0)} damage.");

                        if (opponent.HitPoints <= 0)
                        {
                            defeated = true;
                            attacker.Wins++;
                            opponent.Defeats++;
                            response.Data.Log.Add($"{opponent.Name} was defeated by {attacker.Name} ");
                            break;
                        }
                    }
                }

                Character.ForEach(c =>
                {
                    c.Fights++;
                    c.HitPoints = 100;
                });

                _context.Characters.UpdateRange(Character);
                await _context.SaveChangesAsync();
            }
            catch (Exception ex)
            {
                response.Success = false;
                response.Message = ex.Message;
            }

            return(response);
        }