using PkmnLib.Dynamic.Models; using PkmnLib.Dynamic.Models.Choices; using PkmnLib.Static.Utils; namespace PkmnLib.Dynamic.AI; /// /// An AI that makes random choices. /// public class RandomAI : PokemonAI { private IRandom _random; /// public RandomAI() : base("Random") { _random = new RandomImpl(); } /// public override ITurnChoice GetChoice(IBattle battle, IPokemon pokemon) { var moves = pokemon.Moves.Where(x => x?.CurrentPp > 0).ToList(); while (moves.Count > 0) { var move = moves[_random.GetInt(moves.Count)]; var targets = GetValidTargetsForMove(pokemon, move!).ToArray(); if (targets.Length == 0) { moves.Remove(move); continue; } var target = targets[_random.GetInt(targets.Length)]; var moveTurnChoice = new MoveChoice(pokemon, move!, target.side, target.position); if (battle.CanUse(moveTurnChoice)) { return moveTurnChoice; } moves.Remove(move); } return new PassChoice(pokemon); } }