protected override IAction CalculateMove(IState oldState) { var position = oldState.Graph.Vertex(Position); var newAgent = new HumanAgent(this); var newState = oldState.Clone(); newState.UpdateAgent(newAgent); Console.WriteLine($"{Name}, your current position is: {position}"); var validNeighbors = position.Neighbors.Select(v => oldState.Graph.Vertex(v)).ToList(); Console.WriteLine($"You can stay at {position} or move to: {string.Join(", ", validNeighbors)}"); int dst; while (!int.TryParse(Console.ReadLine(), out dst) || (dst != position.Id && validNeighbors.All(v => v.Id != dst))) { Console.WriteLine("Try again..."); } if (dst == position.Id) { return(new NoOp(oldState, newState, Id)); } return(new Traverse(oldState, newState, Id, dst)); }
public HumanAgent(HumanAgent other) : base(other.Id, other.Position, other.Passengers, other.PeopleSaved) { }