~hacktivista/ejercicios_ruby

8726fa063378ec0d2d4b28fb00a4566d8287f87e — Felix Freeman 7 months ago 6335043 master
Conducir orientado a objetos
1 files changed, 39 insertions(+), 18 deletions(-)

M conducir
M conducir => conducir +39 -18
@@ 3,28 3,49 @@

require_relative 'vehiculo'

vehiculo = Vehiculo.new
accion = ''
# Esta clase conduce un vehiculo. Inicializar con Conducir.ejecutar.
class Conducir
  attr_reader :vehiculo

puts 'Bienvenido a su vehículo, escriba `salir` para finalizar el programa'
  def initialize
    @vehiculo = Vehiculo.new
  end

while accion != 'salir'
  puts 'Elija una acción: acelerar, frenar o girar'
  accion = gets.strip
  def self.ejecutar
    conducir = new
    puts 'Bienvenido a su vehículo, escriba `salir` para finalizar el programa'

  next if accion == 'salir'
    loop do
      conducir.solicitar_accion || break
      puts conducir.vehiculo
      sleep 2
    end
  end

  if ['acelerar', 'frenar'].include? accion
    puts "¿Cuánto deseas #{accion}? (en km/h)"
    param = gets.strip.to_i
  elsif accion == 'girar'
    puts 'Hacia dónde deseas girar? (izquierda, derecha o centro)'
    param = gets.strip.to_sym
  else
    puts 'Acción inválida'
  def solicitar_accion
    puts 'Elija una acción: acelerar, frenar o girar'
    accion = gets.strip
    solicitar_parametro accion if accion != 'salir'
  end

  vehiculo.public_send(accion, param)
  puts vehiculo
  sleep 2
  protected

  def realizar_accion(accion, velocidad: nil, direccion: nil)
    @vehiculo.public_send(accion, velocidad || direccion)
  end

  def solicitar_parametro(accion)
    if %w[acelerar frenar].include? accion
      puts "¿Cuánto deseas #{accion}? (en km/h)"
      realizar_accion(accion, velocidad: gets.strip.to_i)
    elsif accion == 'girar'
      puts 'Hacia dónde deseas girar? (izquierda, derecha o centro)'
      realizar_accion(accion, direccion: gets.strip.to_sym)
    else
      puts 'Acción inválida'
      -1
    end
  end
end

Conducir.ejecutar