コード例 #1
0
        public override string PlayAsync(string id, string moves)
        {
            DebugAndTraceHelper.WriteTraceLine("\n\n\n*************************** moves ", Role);
            DebugAndTraceHelper.WriteTraceLine(moves, Role);

            var nextState = TheGeneralGame.ApplyMoves(moves, false, role: Role);

            DebugAndTraceHelper.WriteTraceLine(String.Format("({0}) Next state is {1}", Role, nextState), Role);

            //DebugAndTraceHelper.WriteTraceLine("*************************** after moves applied ", Role);
            //string clauseDump = this.GetPrologEngine().ListAllFacts();
            //DebugAndTraceHelper.WriteTraceLine(clauseDump, Role);

            var nextMove = TheGeneralGame.FindRandomLegal(Role);

            if (nextMove != null)
            {
                DebugAndTraceHelper.WriteTraceLine(String.Format("({0}) Next move is {1}", Role, nextMove), Role);
                return(nextMove.TheMove);
            }
            else
            {
                return(String.Empty);
            }
        }
コード例 #2
0
        public override string PlayAsync(string id, string moves)
        {
            DebugAndTraceHelper.WriteTraceLine("\n\n\n*************************** moves ", Role);
            DebugAndTraceHelper.WriteTraceLine(moves, Role);

            var nextState = TheGeneralGame.ApplyMoves(moves, false, role: Role);

            DebugAndTraceHelper.WriteTraceLine(String.Format("({0}) Next state is {1}", Role, nextState), Role);

            //DebugAndTraceHelper.WriteTraceLine("*************************** after moves applied ", Role);
            //string clauseDump = this.GetPrologEngine().ListAllFacts();
            //DebugAndTraceHelper.WriteTraceLine(clauseDump, Role);

            Move nextMove           = null;
            var  legalMovesWithEval = TheGeneralGame.FindLegalsWithEval(Role);
            int? maxEval            = legalMovesWithEval.Max(n => n.Tag as int?);
            int? minEval            = legalMovesWithEval.Min(n => n.Tag as int?);

            if (legalMovesWithEval.Any())
            {
                if (maxEval != minEval)
                {
                    nextMove = legalMovesWithEval.Where(n => n.Tag as int? == maxEval.Value).First();
                }
                else
                {
                    nextMove = TheGeneralGame.FindRandomLegal(Role);
                }
            }

            if (nextMove != null)
            {
                DebugAndTraceHelper.WriteTraceLine(String.Format("({0}) Next move is {1} with eval {2}", Role, nextMove, maxEval.Value), Role);
                return(nextMove.TheMove);
            }
            else
            {
                return(String.Empty);
            }
        }