Ojo, se la nada se cambio metodo grow_snake_to entre el minuto 6:41 y el 6:59
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 6
Preguntas 0
Ojo, se la nada se cambio metodo grow_snake_to entre el minuto 6:41 y el 6:59
creo que el metodo self.grow_snake_to
se puede reducir un poco mas y dejarlo asi:
def self.grow_snake_to(state, next_position) state.snake.positions = [next_position] + state.snake.positions state end
De esta forma debería quedar el test para test_snake_grow:
def test_snake_grow
initial_state = Model::State.new(
Model::Snake.new([
# call and set the coord fo the snake
Model::Coord.new(1, 1),
Model::Coord.new(0, 1)
]),
# call and set the coord for the food
Model::Food.new(2, 1),
Model::Grid.new(9, 12),
Model::Direction::DOWN,
false
)
actual_state = Actions::move_snake(initial_state)
assert_equal(actual_state.snake.positions, [
# call and set the coord fo the snake
Model::Coord.new(2, 1),
Model::Coord.new(1, 1),
Model::Coord.new(0, 1)
])
end
Si les parece el error in
+’: no implicit conversion of Model::Snake into Array (TypeError)` solo hay que cambiar el código de la siguiente manera
def self.grow_snake_to(state, position)
state.snake.positions = [position] + state.snake.positions
state
end
Hola, esto
if new_state.hash != @state
no deberia ser asi?
if new_state.hash != @state.hash
Es mejor crear un método collides_with? dentro de la clase Coord, que nos ayudaría a saber si la coordenada actual está colisionando con alguna otra que la podemos pasar por parámetro. Este método lo podemos reutilizar en la clase coordenada y todas las clases que hereden de ella como Food.
Dentro de actions.rb
def self.position_is_food?(state, next_position)
state.food.collides_with?(next_position)
end
Y dentro de state.rb
class Coord < Struct.new(:row, :col)
def collides_with?(object)
row == object.row && col == object.col
end
end
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?