Esempio n. 1
0
        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
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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));
        }
Esempio n. 5
0
 private static void WritePlayer(State state)
 {
     var myPlayers  = StateEvaluator.GetPlayerPieces(state, 0);
     var hisPlayers = StateEvaluator.GetPlayerPieces(state, 1);
 }