Hay errores de edición team Platzi, ojo por ahí.
Introducción
Lo que aprenderás sobre Ruby
Qué es Ruby y para qué sirve este lenguaje
Instalación de Ruby
Bases del lenguaje
Tipos de datos I: Integer, float
Tipos de datos II: Strings
Tipos de datos III: Symbols
Tipos de datos IV: Arrays
Tipos de datos V: Hashes
Uso de condicionales
Uso de ciclos
Rangos
Uso de Regex
Procs y lambdas
Programación Orientada a Objetos en Ruby Comenzando la creación de nuestra clase
Programación Orientada a Objetos en Ruby: Módulos
Programación Orientada a Objetos: Clases y Objetos
Concurrencia vs Paralelismo: Threads en Ruby
Bundler y gemas
Testing en Ruby
Testing con MiniTest
Diferencias entre Ruby 2.5 y 3
Proyecto
Introducción al proyecto
Instalar Ruby 2D
Overview Ruby 2D
Arquitectura
Estructurando el proyecto
Vista básica
Programando la base para los movimientos
Programando el movimiento de nuestro snake
Test de nuestras acciones
Implementando el timer del movimiento
Actualizando la vista
Preparando el cambio de dirección
Recapitulación de la arquitectura
Moviendo la serpiente con el teclado
Creciendo la serpiente y programando la condición de derrota
Generando comida aleatoria: uso de rand y stub en pruebas
Condición de salida y conclusiones
Retos del curso
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 20
Preguntas 3
Hay errores de edición team Platzi, ojo por ahí.
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/
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.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?
o inicia sesión.