Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

undefined method `[]' for nil:NilClass (NoMethodError)

A função posicao_valida? funcionava anteriormente com o movimmento do heroi, mas quando implementei o movimento do fantasma ela parou de funcionar. Recebo o seguinte erro na linha ' valor_atual = mapa[posicao[0]][posicao[1]]' = in posicao_valida?': undefined method[]' for nil:NilClass (NoMethodError). Não consigo entender o que esta nulo.

def posicao_valida? mapa, nova_posicao
  posicao = nova_posicao
  linhas = mapa.size
  colunas = mapa[0].size
  estourou_linhas = posicao[0] >= linhas || posicao[0] < 0
  estourou_colunas = posicao[1] >= colunas || posicao[1] < 0

  if estourou_colunas || estourou_colunas
    return false
  end

  valor_atual = mapa[posicao[0]][posicao[1]]
  if valor_atual == "X" || valor_atual == "F"
    return false
  end
  true
end

def posicoes_validas_a_partir_de mapa, posicao
  posicoes = []
  baixo = [posicao[0] + 1, posicao[1]]
  if posicao_valida? mapa, baixo
    posicoes << baixo
  end
  cima = [posicao[0] - 1, posicao[1]]
  if posicao_valida? mapa, cima
    posicoes << cima
  end
  direita = [posicao[0], posicao[1] + 1]
  if posicao_valida? mapa, direita
    posicoes << direita
  end
  esquerda = [posicao[0], posicao[1] - 1]
  if posicao_valida? mapa, esquerda
    posicoes << esquerda
  end
  posicoes
end

def move_fantasma mapa, linha,coluna
  posicoes = posicoes_validas_a_partir_de mapa, [linha, coluna]

  return if posicoes.empty?

  posicao = posicoes [0]

  mapa[linha][coluna] = " "
  mapa[posicao[0]][posicao[1]] = "F"

end
5 respostas

Oi Gustavo, desculpa, mas tem como você criar um zip do seu projeto pra mim baixar e testar aqui pra ver de perto qual é de verdade o problema?

Segue o link aqui de todo o projeto.

https://www.4shared.com/rar/-MxbNJDFei/fogefoge.html

Oi Gustavo, você poderia por em outro lugar onde eu não precise me cadastrar por gentileza? Um repositório público no github seria excelente. Alguns serviços permitem você fazer upload e compartilhar um link como o https://quictransfer.com/

Se puder fazer isso eu agradeço

Desculpa, nem conhecia esse servico. Segue aqui o link.

https://quictransfer.com/download/aqaq7p4u0uqyqziz8swnpsl27

solução!

Oi Gustavo, desculpa a demora, mas no curso mesmo não é mostrado esse problema? Ele tem cara de problema proposital que é pra explicar um outro conceito. Até encontrei o problema, mas não lembro se a solução é tão simples.

Acontece quando o o mapa precisa reposicionar os fantasmas, as referências se perdem, por isso que no código final temos dois mapas, um para calcular as posições e outro para posicionar de fato.

A solução se eu não me engano acaba evoluindo o código até esse ponto: https://github.com/alura-cursos/introducao-a-computacao-da-logica-aos-jogos-com-ruby/blob/master/capitulo17/fogefoge.rb

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software