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); } }
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); } }