예제 #1
0
        protected override void Turn(int turn, Action <Intent> agent1, Action <Intent> agent2)
        {
            Intent intent1 = Agent1.NextIntent(CalculateProhibitedPoints(Team.Agent1).ToArray()),
                   intent2 = Agent2.NextIntent(CalculateProhibitedPoints(Team.Agent2).ToArray());

            ScoringEfficiency scoringEfficiency1 = Agent1.Evaluate()
            , scoringEfficiency2 = Agent2.Evaluate();

            //自エージェント同士の移動先が重なってしまった場合
            if (intent1.GetNextPoint(Team.Agent1.Position) == intent2.GetNextPoint(Team.Agent2.Position))
            {
                //点数が低い方のエージェントの移動を変える
                if (scoringEfficiency1.Efficiency > scoringEfficiency2.Efficiency)
                {//2を変える
                    List <Point> list = CalculateProhibitedPoints(Team.Agent2);
                    list.Add(intent1.GetNextPoint(Team.Agent1.Position));

                    intent2            = Agent2.NextIntent(list.ToArray());
                    scoringEfficiency2 = Agent2.Evaluate();
                }
                else
                {//1を変える
                    List <Point> list = CalculateProhibitedPoints(Team.Agent1);
                    list.Add(intent2.GetNextPoint(Team.Agent2.Position));

                    intent1            = Agent1.NextIntent(list.ToArray());
                    scoringEfficiency1 = Agent1.Evaluate();
                }
            }
            //盤面に表示
            InvokeOnUIThread(() => Label1.Content = string.Format("Agent1 Effic:{0,4:F2} NTurn:{1,4:F2} Total:{2,4:F2}",
                                                                  scoringEfficiency1.Efficiency, scoringEfficiency1.ExpectedTurns, scoringEfficiency1.Efficiency * scoringEfficiency1.ExpectedTurns));
            InvokeOnUIThread(() => Label2.Content = string.Format("Agent2 Effic:{0,4:F2} NTurn:{1,4:F2} Total:{2,4:F2}",
                                                                  scoringEfficiency2.Efficiency, scoringEfficiency2.ExpectedTurns, scoringEfficiency2.Efficiency * scoringEfficiency2.ExpectedTurns));

            agent1(intent1);
            agent2(intent2);
        }