public bool DoAction() { LinkedList <ActionType> actions = new LinkedList <ActionType>(); foreach (var position in Body.CurrentPositions) { if (position == null) { continue; } actions.AddRange(FindPossibleActions(position)); } var actionsToExecute = actions.Where(a => ActionEvaluation.Evaluate(a) >= 0); actionsToExecute = actionsToExecute.OrderByDescending(a => ActionEvaluation.Evaluate(a)).Take(Math.Min(actionsToExecute.Count(), Size)); if (!actions.Any()) { return(false); } Body.ExecuteActions(actionsToExecute); return(true); }
public bool DoAction() { var actions = FindPossibleActions(Body.CurrentPosition); if (!actions.Any()) { return(false); } var actionToExecute = Utilities.MaxEntry(actions, a => ActionEvaluation.Evaluate(a)); if (ActionEvaluation.Evaluate(actionToExecute) < 0) { return(false); } Body.ExecuteAction(actionToExecute); return(true); }