Support for basic AIs
This commit is contained in:
45
PkmnLib.Dynamic/AI/RandomAI.cs
Normal file
45
PkmnLib.Dynamic/AI/RandomAI.cs
Normal file
@@ -0,0 +1,45 @@
|
||||
using PkmnLib.Dynamic.Models;
|
||||
using PkmnLib.Dynamic.Models.Choices;
|
||||
using PkmnLib.Static.Utils;
|
||||
|
||||
namespace PkmnLib.Dynamic.AI;
|
||||
|
||||
/// <summary>
|
||||
/// An AI that makes random choices.
|
||||
/// </summary>
|
||||
public class RandomAI : PokemonAI
|
||||
{
|
||||
private IRandom _random;
|
||||
|
||||
/// <inheritdoc />
|
||||
public RandomAI() : base("Random")
|
||||
{
|
||||
_random = new RandomImpl();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user