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

Vista básica

27/39
Recursos

Aportes 19

Preguntas 3

Ordenar por:

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

La verdad es que da pena ver este curso. Venía con ilusión a aprender Ruby debido a que en mi nuevo trabajo lo están utilizando, pero vaya decepción me he topado; conceptos vagos, poca profundización, problemas en la edición, desactualizado, incluso pareciera como si nosotros debiésemos saber parte de la sintaxis de Ruby ya que ni se molestan en explicar algunos detalles (claro que también corresponde investigar por nuestra cuenta, pero es que ya son temas básico que debiese contar un curso de pago como este) y para qué seguir enumerando. Bueno, supongo que Platzi le da más amor a los cursos que generan más platita que a los cursos de lenguajes no tan “populares” (y entre comillas porque igual es bastante popular). Hubiera sido más provechoso en buscar uno en udemy directamente.
Bueno, me quejé lo suficiente, sigan con el curso 😄 (o no)

Hay problemas con la edicion!

Por qué usó extend y no include http://www.railstips.org/blog/archives/2009/05/15/include-vs-extend-in-ruby/

Estructurando el proyecto


Les dejo mi código para los que necesiten ver. Algunas cosas las cambie de nombre o valor, pero igual sirve. Además le añadí una mejor paleta de color aquí el link

Código del archivo: app.rb

# Nos ayuda a incluir archivo a este archivo, como @import de sass
require_relative "view/ruby2d"
require_relative "model/state"

vista = View::Ruby2dView.new

estado_inicial = Modelo::initial_state
vista.render(estado_inicial)

Código del archivo: state.rb

# Representacion del estado del juego

module Modelo
    class Coord < Struct.new(:row,:col)
    end

    class Food < Coord
    end

    class Snake < Struct.new(:positions)
    end

    class Grid < Struct.new(:rows,:cols)
    end

    class State < Struct.new(:Snake, :Food, :Grid)
    end

    def self.initial_state
        Modelo::State.new(
            Modelo::Snake.new([
                Modelo::Coord.new(1,1),
                Modelo::Coord.new(0,1),
            ]),
            Modelo::Food.new(4,4),
            Modelo::Grid.new(10,12)
        )
    end
end

Código del archivo: ruby2d.rb

require 'ruby2d'

module View
    class Ruby2dView
        def initialize
            @pixel_size = 50
        end

        def render(state)
            extend Ruby2D::DSL
            set(
                title: "La culebrita",
                width: @pixel_size * state.Grid.cols,
                height: @pixel_size * state.Grid.rows
            )
            render_snake(state)
            render_food(state)
            show
        end

        private
        def render_snake(state)
            extend Ruby2D::DSL
            serpiente = state.Snake
            serpiente.positions.each do |pos|
                Square.new(
                    x: pos.col * @pixel_size,
                    y: pos.row * @pixel_size,
                    size: @pixel_size,
                    color: '#00b7c2'
                )
            end
        end

        def render_food(state)
            extend Ruby2D::DSL
            comida = state.Food
            Square.new(
                x: comida.col * @pixel_size,
                y: comida.row * @pixel_size,
                size: @pixel_size,
                color: '#ecfeff'
            )
        end
    end
end

Hay varias formar de incluir el código de algún modulo en una clase, y estas son: Include, Prepend y Extend

El profesor utiliza

extend Ruby2D::DSL

y esto permite importar los métodos de la clase DSL del modulo Ruby2D y utilizarlos en las funciones o métodos de la clase Ruby2dView

Tomado de https://medium.com/@leo_hetsch/ruby-modules-include-vs-prepend-vs-extend-f09837a5b073

Es bueno mencionar que el modificador private afecta directamente a todos los métodos que se encuentren por debajo de el, por este motivo es conveniente declarar los métodos privados al final de la clase.

Hola estoy siguiendo el curso pero me tira un error que me tiene loco desde ayer y no lo pude resolver, este es el mensaje:

Traceback (most recent call last):
	3: from src/app.rb:1:in `<main>'
	2: from src/app.rb:1:in `require_relative'
	1: from /Users/fernando/Documents/Platzi/ruby-platzi/snake/src/view/ruby2d.rb:1:in `<top (required)>'
/Users/fernando/Documents/Platzi/ruby-platzi/snake/src/view/ruby2d.rb:1:in `require': cannot load such file -- ruby2d (LoadError)

Los archivos son tal cual los del ejemplo pero se me esta escapando la tortuga y no se por donde!!! Me ayudan? 😃

Que paso con la edición también en la clase anterior hubo errores

Cuidado con las mayusculas, a mi me dio error con state.Grid.cols

module Views
    class Ruby2dView
        def initialize 
            @pixel_size = 50
        end
    
        def render(state)
            extend Ruby2D::DSL
            set(
                title: "Snake", 
                width: @pixel_size * state.Grid.cols, 
                height: @pixel_size * state.Grid.rows
            )
            show
        end
    end
end

Código del archivo: app.rb

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

view = View:: Ruby2dView.new

initial_state = Model::initial_state
view.render(initial_state)

Código del archivo: ruby2d.rb

require "ruby2d"
module View
  class Ruby2dView

    def initialize
      @pixel_size = 50
    end

    def render(state)
      extend Ruby2D::DSL
      set(
        title: "Snake",
        width: @pixel_size * state.grid.cols,
        height: @pixel_size * state.grid.rows)
      render_snake(state)
      render_food(state)
      show
    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: 'yellow'
                )
    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: 'green'
                )
      end

    end

  end
end

Código del archivo: state.rb

module Model

  class Coord < Struct.new(:row,:col)
  end

  class Food < Coord
  end

  class Snake < Struct.new(:positions) # cabeza de serpiente y cola
  end

  class Grid < Struct.new(:rows,:cols)
  end

  class State < Struct.new(:snake,:food,:grid)
  end

  def self.initial_state
    Model::State.new(
      Model::Snake.new([
        Model::Coord.new(1, 1),
        Model::Coord.new(0, 1)
                      ]),
      Model::Food.new(4, 4),
      Model::Grid.new(8,12)
    )
  end

end

render_food y render_snake cuando se escriben dentro del metodo render qué son exactamente?? algo aqui no entiendo y es como se conectan todas esas variables y cosas

sera que en State.rb tenemos las medidas en pixeles de todo.
en Ruby2d.rb tenemos los objetos: triangulos, cuadrados, canvas, etc…
y en app.rb los mandamos a mostrar?

hay problemas con la edición

Yo tengo un problema ya que la pantalla donde se debe dibujar la serpiente se abre y se cierra sin que pueda ver como se van dibujando las figuras

Se repite el contenido en la clase, hay un error en la edición de vídeo.

El método initial_state está declarado como método de un module ¿Igualmente se le llama método de instancia? 🤔

Aquí hay un recurso para entender sobre el concepto de DSL y como se aplica en aplicaciones de Ruby
https://www.infoq.com/news/2007/06/dsl-or-not/

Hay problemas de edición en esta clase. Hay puntos en donde el tutor vuelve a repetir nuevamente las cosas.

No me ejecuta ninguna ventana, por mas que he hecho todo lo que en el video menciona. La verdad que mal, no se si sea por el error de edición que todos menciona.