private static void Main() { var evaluator = new StateEvaluator(); var fogRevealer = new SimpleFogRevealer(); var ai = new GreedyAi(evaluator); var reader = new StateReader(Console.ReadLine); var initData = reader.ReadInitialization(); var isFirst = true; while (true) { var state = reader.ReadState(initData); var countdown = new Countdown(isFirst ? 95 : 45); isFirst = false; fogRevealer.ConsiderStateBeforeMove(state, 20); // ReSharper disable once RedundantAssignment var actions = reader.ReadActions(); EnsureActionsAreSame(state.GetPossibleActions(), actions); var action = ai.GetAction(state, countdown); WriteOutput(action); Console.Error.WriteLine(countdown); fogRevealer.RegisterAction(action); action.ApplyTo(state); } // ReSharper disable once FunctionNeverReturns }
private static Vec FindBestMovement(State state, Vec prevLocation) { var none = new Vec(-1, -1); var currentPlayerLoc = StateEvaluator.GetPlayersLocations(state, state.CurrentPlayer); var neighs = StateEvaluator.GetPassableNeighbours(state, prevLocation) .Where(p => p.DistTo(currentPlayerLoc[0]) > 1 && p.DistTo(currentPlayerLoc[1]) > 1).MaxBy(p => state.HeightAt(p)); return(neighs ?? none); }
public void CalculateNextMove() { var state = new StateReader("...0...|..000..|.00000.|0000000|.00000.|..000..|...0...|3 2|5 2|-1 -1|-1 -1|") .ReadState(new InitializationData(7, 2)); var evaluator = new StateEvaluator(); var action = new GreedyAi(evaluator).GetAction(state, 100); ExplainedScore score = null; using (new MoveAndBuildAction(0, Direction.N, Direction.N).ApplyTo(state)) score = evaluator.Evaluate(state, 0); using (action.ApplyTo(state)) evaluator.Evaluate(state, 0).Should().BeGreaterOrEqualTo(score); }
private static IGameAction FindBestEnemyAction(State state, Countdown countdown) { //state.ChangeCurrentPlayer(); var moves = state.GetPossibleActions(); // state.ChangeCurrentPlayer(); if (moves.Count == 0 || moves.First() is AcceptDefeatAction) { return(null); } foreach (var action in moves) { if (countdown.IsFinished) { break; } action.Score = StateEvaluator.TryCaptureEnemy(state, 1); } return(moves.MaxBy(a => a.Score ?? double.NegativeInfinity)); }
private static void WritePlayer(State state) { var myPlayers = StateEvaluator.GetPlayerPieces(state, 0); var hisPlayers = StateEvaluator.GetPlayerPieces(state, 1); }