public SurfacePosition Move(SurfacePosition position, SurfaceDirection direction) { if (IsLost(position, direction)) { throw new RobotLostException(); } var newPosition = new SurfacePosition(position.Row, position.Column); switch (direction) { case SurfaceDirection.Up: newPosition.Row++; break; case SurfaceDirection.Left: newPosition.Column--; break; case SurfaceDirection.Down: newPosition.Row--; break; case SurfaceDirection.Right: newPosition.Column++; break; default: throw new ArgumentException(nameof(direction), "Direction is not supported: " + direction); } return(newPosition); }
public bool IsValidPosition(SurfacePosition position) { return(position.Row >= 0 && position.Column >= 0 && position.Row < _rowsCount && position.Column < _columnsCount); }
private bool IsLost(SurfacePosition position, SurfaceDirection direction) { if (position.Column == 0 && direction == SurfaceDirection.Left) { _leftColumnRobotScents[position.Row] = true; return(true); } else if (position.Column == _columnsCount - 1 && direction == SurfaceDirection.Right) { _rightColumnRobotScents[position.Row] = true; return(true); } else if (position.Row == 0 && direction == SurfaceDirection.Down) { _bottomRowRobotScents[position.Column] = true; return(true); } else if (position.Row == _rowsCount - 1 && direction == SurfaceDirection.Up) { _upperRowRobotScents[position.Column] = true; return(true); } return(false); }
public bool IsDeadScentMovement(SurfacePosition position, SurfaceDirection direction) { if (position.Column == 0 && direction == SurfaceDirection.Left) { return(_leftColumnRobotScents[position.Row]); } else if (position.Column == _columnsCount - 1 && direction == SurfaceDirection.Right) { return(_rightColumnRobotScents[position.Row]); } else if (position.Row == 0 && direction == SurfaceDirection.Down) { return(_bottomRowRobotScents[position.Column]); } else if (position.Row == _rowsCount - 1 && direction == SurfaceDirection.Up) { return(_upperRowRobotScents[position.Column]); } return(false); }