Vielen Dank, über die Hypothenuse die approx_value's zu setzen funktioniert wunderbar, dadurch entsteht auch nichtmehr die Ungenauigkeit der Umwandlung von zwei geraden Bewegungen in eine entsprechende diagonale Bewegung.

Die von mir früher vorgestellte Funktion ist überdies hinaus veraltet und nicht richtig, hier mein derzeitiges Script welches in allen derzeitigen Tests tadelose Arbeit geleistet hat:
Code:
def generate_move_route(start_node,end_node)
    move_route = []
    current_node = end_node
    loop do
      predecessor = current_node.predecessor
      if predecessor.nil?
        break
      end
      cx = current_node.x
      cy = current_node.y
      px = predecessor.x
      py = predecessor.y
      if cx < px
        # move right
        next_direction = LEFT
      elsif cx > px
        # move left
        next_direction = RIGHT
      elsif cy < py
        # move up
        next_direction = UP
      else
        # move down
        next_direction = DOWN
      end
      old_direction = move_route[0]
      if old_direction.nil?
        move_route.insert(0,next_direction)
      else
        direction_sum = old_direction + next_direction
        case direction_sum
        when 4
          # move down_left
          move_route[0] = DOWN_LEFT
        when 5
          # move down_right
          move_route[0] = DOWN_RIGHT
        when 9
          # move up_left
          move_route[0] = UP_LEFT
        when 10
          # move up_right
          move_route[0] = UP_RIGHT
        else
          move_route.insert(0,next_direction)
        end
      end
      current_node = predecessor
    end
    return move_route
  end
Die Konstanten DOWN_LEFT bis UP_RIGHT sind Integer von 0 bis 7 angeordnet wie auf dem Nummernblock der Tastatur (1 == 0, 5 ausgelassen).