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

Problemas com o codigo

Fiz o codigo completo do jogo "foge-foge", mas estava tendo muitos problemas e nao conseguia resolve-los entao decidi usar diretamento o codigo da aula, mas ainda sim continuo com o mesmo erro após digitar meu movimento recebo a mensagem: "C:/Users/Pedro/Ruby/fogefoge.rb:30:in calcula_nova_posicao': undefined method +' for nil:NilClass (NoMethodError)"

O que devo fazer para resolver isso?

3 respostas

Oi Pedro,

compartilhe conosco o seu código para podermos verificar.

abs, Nico

solução!

Eu acabei refazendo o cogido inteiro, e agora deu certo, ainda não entendi o que ocasionou o erro, mas como o código era simples acabei refazendo

Olá Pedro,

Acabei de ter o mesmo problema e ao invés de reescrever fui caçar qual era o problema, não me conformei em não entender.

No momento que começamos a trabalhar com a classe Heroi e instanciamos ela na função encontra_jogador temos a seguinte alteração:

if coluna_do_heroi
            jogador = Heroi.new
            jogador.linha = linha
            jogador.coluna = coluna_do_heroi
            return jogador

Até então, não precisávamos utilizar obrigatoriamente a palavra return para devolver o resultado à variável que chamou a função, mas se você retirar o erro irá aparecer.

Descobri isso colocando "puts heroi" dentro da função joga, seguem resultados:

joga com "puts"

def joga(nome)
    mapa = le_mapa 2

    while true
        desenha mapa
        direcao = pede_movimento
        heroi = encontra_jogador mapa
        puts heroi
        nova_posicao = heroi.calcula_nova_posicao direcao

        if !posicao_valida? mapa,nova_posicao.to_array
            next
        end

        heroi.remove_do mapa
        nova_posicao.coloca_no mapa

        mapa = move_fantasmas mapa

        if jogador_perdeu?(mapa)
            game_over
            break
        end
    end
end

Resultado com return:

Para onde deseja ir D

Heroi:0x00000002b32de0

Resultado sem return:

Para onde deseja ir D

Pode perceber que sem o return o puts nao retorna nada, ou seja nulo! que nem o erro informa.

Espero ter ajudado!