Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Curso de Ruby

Curso de Ruby

Simón Soriano

Simón Soriano

Creciendo la serpiente y programando la condición de derrota

36/39
Recursos

Aportes 4

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

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

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