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

Implementando el timer del movimiento

31/39
Recursos

Aportes 9

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

¿Alguien tiene este error?

#<Thread:0x000055ded44fc528 app.rb:21 run> terminated with exception (report_on_exception is true):
/usr/lib/ruby/gems/3.0.0/gems/ruby2d-0.10.0/lib/ruby2d/dsl.rb:30:in `render': wrong number of arguments (given 1, expected 0) (ArgumentError)
        from app.rb:29:in `block in init_timer'
        from app.rb:26:in `loop'
        from app.rb:26:in `init_timer'
        from app.rb:21:in `block in start'

Si les aparece un error que empieza con #<Thread:0x00007f8d48cd4358 src/app.rb:... es porque la nueva versión de ruby2d ya tiene un método render, entonces a nuestro método render del view toca cambiarle el nombre. Y así mismo llamarlo por ese nuevo nombre dentro de init_timer

me asombra como este curso tiene tantos pocos comentarios, será que ruby no es tan popular en la comunidad platzi?

excelente todo!

Lo que se necesita saber de la sintaxis se va conociendo a media de la practica, como llamar metodos, clases, valores, pero igual siento que algo se me escapa

De verdad creo que este debería ser el último de los desafíos de un curso. Faltan muchos pasos intermedios.

Que es thread?

Este curso deja mucho que desear, el contenido tiene potencial, pero la metodología de enseñanza del profesor no es para nada la mas optima, demasiados conceptos que no explica, siquiera los nombra y se enreda intentando explicar el código, ademas de lo pesado(lento y sin entusiasmo) en su forma de enseñar.

Este curso por lo que veo tiene mas de 4 años de publicado, seria muy bueno hacer un refrescamiento

El código de app.rb

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

class App
    def initialize
        @state = Model::initial_state
    end

    def start
        view = View::Ruby2dView.new
        Thread.new { init_timer(view) }
        view.start(@state)
    end

    def init_timer(view)
        loop do
            @state = Actions::move_snake(@state)
            view.renderGame(@state)  
            sleep 0.5
        end
    end
end

app = App.new
app.start

El código de ruby2d.rb

  require "ruby2d"

module View
    class Ruby2dView 

        def initialize
            @pixel_size = 50
        end

        def start (state)
            extend Ruby2D::DSL
            set(
                title: "Snake", 
                width: @pixel_size * state.grid.cols, 
                height: @pixel_size * state.grid.rows)
            show
        end

        def renderGame(state)
            render_food(state)
            render_snake(state)
        end

        private
        def render_food(state)
            extend Ruby2D::DSL
            food = state.food
            Square.new(
                x: food.col * @pixel_size, 
                y: food.row * @pixel_size,
                size: @pixel_size,
                color: 'orange',
            )
        end

        def render_snake(state)
            extend Ruby2D::DSL
            snake = state.snake
            snake.positions.each do |pos|
                Square.new(
                    x: pos.col * @pixel_size, 
                    y: pos.row * @pixel_size,
                    size: @pixel_size,
                    color: 'blue',
                )
            end
        end
    end
end