No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Curso de Ruby

Curso de Ruby

Sim贸n Soriano

Sim贸n Soriano

Condici贸n de salida y conclusiones

38/39
Recursos

Aportes 21

Preguntas 2

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

Hola a todos:
Esta es mi propuesta para el aumento gradual de velocidad. Las modificaciones solo ocurren en el archivo app.rb (Un atributo en la app que inicializa la velocidad, un m茅todo que incrementa la velocidad gradualmente y una modificaci贸n en la funci贸n init_timer que se asegura de incrementar la velocidad cuando la serpiente come)

require_relative "view/ruby2d"
require_relative "model/state"
require_relative "actions/actions"

class App
  def initialize
    @state = Model.initial_state
    # Atributo inicial de velocidad
    @speed = 0.5
  end
  
  def start
    @view = View::Ruby2dView.new(self)
    timer_thread = Thread.new { init_timer }
    @view.start(@state)
    timer_thread.join
  end
  
  def init_timer
    # Capturamos la longitud inicial de la serpiente
    snake_length = @state.snake.positions.length
    loop do
      if @state.game_finished
        puts "Juego Finalizado"
        puts "Puntaje: #{@state.snake.positions.length}"
        break
      end
      @state = Actions::move_snake(@state)
      @view.render(@state)
      # Se eval煤a si la longitud de la serpiente ha cambiado, lo que indica si ha comido
      if snake_length < @state.snake.positions.length
        # Se actualiza la longitud de la serpiente para estar al d铆a con la pr贸xima iteraci贸n
        snake_length = @state.snake.positions.length
        # Se recalcula la velocidad, restando un %5 de la velocidad actual por cada llamado, resultando en una disminuci贸n gradual que nunca llega a cero
        calculate_speed_increment
        # Este puts es para debugear la velocidad en consola. Pueden retirarlo a gusto
        puts "Current speed: #{@speed}"
      end
      sleep @speed
    end
  end

  def send_action(action, params)
    new_state = Actions.send(action, @state, params)
    if new_state.hash != @state
      @state = new_state
      @view.render(@state)
    end
  end

  private

  def calculate_speed_increment
    if @speed > 0.001
      # "Reduce la velocidad de la serpiente en un %5"
      @speed = @speed - (@speed * 0.05)
      if(@speed < 0.001)
        @speed = 0.001
      end
    end
  end
end

app = App.new
app.start```

Excelente curso, ya conoc铆a algunas cosas de ruby, pero gracias a este curso pude ver muchas que aun me hac铆a falta por aprender. El proyecto me pareci贸 genial para entender como es un flujo real, y la parte de TDD me aclar贸 varias dudas que tenia respecto a la implementaci贸n de ese tema

Excelente curso!
Donde estan los retos que se mencionan en la ultima clase??

Se le olvido implementar el incremento de velocidad鈥

para ello aumente un atributo al modelo State que es :speed

module Model
	class State < Struct.new(:grid, :snake, :food, :game_over, :speed)
		INITIAL_SPEED = 0.5
		
		def calculate_speed!
			self.speed = INITIAL_SPEED - (0.05 * (snake.size / 3))
			#snake.size = snake.positions.length
		end

end

module Actions
	def self.move_snake(state)
		#...
		if food_position?(state, next_position)
			snake.grow!(next_position)
			state.calculate_speed!
			state.generate_food!
		elsif #...
		# ...
		end
		#...

end

El problema con esto es que solo llega al nivel 30 y en el nivel 31 el speed se vuelve negativo. y el timer falla.
Se necesita implementar una funcion logaritmica aqui鈥 Si alguien puede hacerlo aporte por favor

Este curso me pareci贸 un poco avanzado ya que pens茅 que era una introducci贸n, creo que falt贸 un poco m谩s explicaci贸n te贸rica. Sin embargo aprend铆 mucho! Gracias Platzi

Hola a [email protected],

Les comparto que he seguido el curso y he aprendido cosas nuevas y m谩s que soy nuevo en el mundo de ruby, les queria compartir una peque帽a modificaci贸n al codigo del archivo ruby2d.rb donde por iniciativa propia quize personalizar un poco m谩s la culebra y explorar un poco m谩s como funciona los objetos en ruby, en esta ocasi贸n lo que quise probar fue como cambiar el color a la cabeza de la culebra para darle un poco m谩s de estilo al programa del curso, espero que les agrade.

    def render_snake(state)
        
        @snake_positions.each(&:remove) if @snake_positions
        extend Ruby2D::DSL
        snake = state.snake
        @snake_positions = snake.positions.map do |pos|
            Square.new(
                x: pos.col * @pixel_size, 
                y: pos.row * @pixel_size,
                size: @pixel_size,
                color: 'green'
            )
        end
        #Cambiar el color del primer elemento de la culebra 
        @snake_positions.first.color = 'red'
    end

Saludos

Excelente curso, aunque me gustar铆a que hubiera uno enfocado m谩s al testing usando rspec

Estupendo curso, me puso a prueba ya que varias veces me encontraba con errores y al solucionarlos pude entender un poco mas!

Me gust贸 la manera de armar el proyecto, desde los diagramas a mano hasta los test, nunca hab铆a usado test para desarrollar y ahora entiendo cual es la importancia.

Gracias.

隆Muchas gracias, Sim贸n! Buen proyecto para aprender Ruby.
S贸lo como recomendaci贸n, procura no saltarte cambios de nombres de variables o cualquier cosa en el c贸digo porque luego hay que andar debugeando.

Muy interesante el lenguaje,

Excelente Curso. el profesor explica de forma detallada todos los temas en la practica del juego. Simon muchas gracias por compartir tu conocimiento. Saludos a todos.

Me gustaria compartir con ustedes mi proyecto finalizado, le di un acercamiento diferente, trate de usar una arquitectura un poco mas limpia, no fue facil, se que se puede mejorar mas.

https://github.com/BettoISC/snake/

Pronto implementare el cambio de velocidad y un contador de puntos, quiero que la velocidad aumente segun el puntaje.

Cualquier sugerencia es bienvenida!! 馃槃

Por cierto yo no use el DSL de ruby2D, la clase Window tiene un metodo update que genera un hilo de actualizacion, a este le mande el bloque de renderizado que llame draw! 馃槂

Muy buen curso, como recomendaci贸n, solo maneja en pantalla las ventanas m铆nimas para las explicaciones, ya que en muchas oportunidades las lineas superaban el borde y eso era molesto a la hora de copiar o verificar los c贸digos, otra cosa, es el cambio de las variables, en algunos casos no se comentaba a que archivo se estaba haciendo referencia y si bien se pod铆a mirar en la pantalla siempre es 煤til la indicaci贸n a que archivo se apunta, fuera eso un muy buen curso, aunque se me hizo un poco mas avanzado que una introductorio al lenguaje los que exige un poco mas de solo quedarse con lo que explica el profe, as铆 que a practicar y no parar de aprender 馃槂

Donde estan los retos??? !

Muy buen curso, como es la primera vez que me meto de lleno con la programaci贸n, pens茅 que no pod铆a terminar el curso, m谩s sin embargo ya lo termine. Gracias a Dios todo poderoso.

Muy buen curso! La verdad me cost贸 un poco porque voy empezando en la programaci贸n. Gracias Sim贸n!

El juego todav铆a presenta un bug, ya que cuando escoge el numero aleatorio a veces el punto esta dentro de la serpiente cosa que no deber铆a pasar, como puedo solucionarlo?

Hey Guys! He creado un grupo de whatsapp para Developers (Programadores) para poder ayudarnos principalmente con dudas sobre c贸digo (como js o ruby) y cosas por el estilo. Queremos que sea un grupo peque帽o y poder ayudarnos entre todos a entender un poco mejor el mundo de la programaci贸n. Los espero!

https://chat.whatsapp.com/EwdTZOH2IdHEgORO3BCIWi

Excelente curso, hacer un proyecto desde el papel al c贸digo resulta en una la mejor manera de aprender el lenguaje. Muchas gracias!