public static Engine GetDefaultDeathmatchEngine(IEnumerable <IFighterStats> fighters) { var battlefield = new PlainBattlefield(); var bounds = new Tiny(); var features = new List <IEngineFeature>() { new FeatureApplyCondition(), new FeatureReviveDeadFighters(), }; var moveOrder = new AllRandomMoveOrder(); var positionGenerator = new AllRandomPositionGenerator(); var winCondition = new FiftyRoundsWinCondition(); var staleCondition = new NoneStaleCondition(); return(GetEngine(fighters, battlefield, bounds, features, moveOrder, positionGenerator, winCondition, staleCondition, 2)); }
public static Engine GetDefaultEngine(IEnumerable <IFighterStats> fighters) { var battlefield = new PlainBattlefield(); var bounds = new Tiny(); var features = new List <IEngineFeature>() { new FeatureApplyCondition(), new FeatureSacrificeToEntity(), }; var moveOrder = new AllRandomMoveOrder(); var positionGenerator = new AllRandomPositionGenerator(); var winCondition = new LastManStandingWinCondition(); var staleCondition = new NoWinnerCanBeDeterminedStaleCondition(); return(GetEngine(fighters, battlefield, bounds, features, moveOrder, positionGenerator, winCondition, staleCondition, 2)); }
public double Evaluate(IChromosome chromosome) { var engineCalculationChromosome = chromosome as EngineCalculationChromosome; if (engineCalculationChromosome == null) { return(0); } var battlefield = new PlainBattlefield(); var features = new List <IEngineFeature>() { }; double fitness = 0; for (int i = 0; i < MatchCount; i++) { Engine engine = new Engine( cfg => { cfg.ActionsPerRound = 1; cfg.Battlefield = battlefield; cfg.Bounds = new Small(); cfg.Features = features; cfg.MoveOrder = new AllRandomMoveOrder(); cfg.PositionGenerator = new AllRandomPositionGenerator(); cfg.WinCondition = new LastManStandingWinCondition(); engineCalculationChromosome.ApplyTo(cfg.CalculationValues); return(cfg); }, GetFighters(FighterCount)); fitness += GetFitness(engine); } return(fitness / MatchCount); }