/// <summary> /// Performs a robot movement. /// </summary> /// <param name="position">Position of the robot before the action.</param> /// <param name="board">Board to perform action on.</param> /// <returns>Position of robot after performing the action.</returns> public override RoboPosition PerformAction(RoboPosition position, RoboBoard board) { RoboField field = board.GetField(position); if (!field.CanLeave(this.Direction)) { return(position); } RoboPosition result = PerformAction(position); RoboField neighbor = board.GetField(result); if (neighbor == null || !neighbor.CanEnter(RoboRotation.Rotate(this.Direction, Rotation.Around))) { return(position); } return(result); }