4
respostas

não sei o que errei !

mensagem de erro:


Traceback (most recent call last):
        2: from C:/Users/Ivo Filho/Desktop/RUBYYY PASTA/fogefoge/main.rb:3:in `<main>'
        1: from C:/Users/Ivo Filho/Desktop/RUBYYY PASTA/fogefoge/fogefoge.rb:19:in `inicia_fogefoge'
C:/Users/Ivo Filho/Desktop/RUBYYY PASTA/fogefoge/ui.rb:6:in `da_boas_vindas': undefined local variable or method `nome' for main:Object (NameError)

no main.rb

require_relative 'fogefoge'

inicia_fogefoge

no fogefoge.rb

require_relative 'ui'

def le_mapa(numero)
    arquivo = "mapa#{numero}.txt"
    texto = File.read arquivo
    mapa = texto.split "\n"
end

def joga(nome)
    mapa = le_mapa 1

    while true
      desenha mapa
      direcao = pede_movimento
    end 
end

def inicia_fogefoge
    nome = da_boas_vindas
    joga nome
end

no ui

ef da_boas_vindas
    puts "Bem vindo ao Foge-foge!"
    puts "Qual é o seu nome?"
    puts = gets.strip
    puts "\n\n\n\n\n"
    puts "Começaremos o jogo para você, #{nome}" 

    nome 
end

def desenha(mapa)
    puts mapa
end

def pede_movimento
    puts "Para onde deseja ir?"
    movimento = gets.strip
end
4 respostas

Boa noite, Ivo!

Na UI, dentro do método de_boas_vindas, na linha 6 você chama a variável nome, porém você não declarou ela antes, então o ruby está informando que ela não existe. Verifique essa parte da mensagem que o ruby apresenta:

PASTA/fogefoge/ui.rb:6:in da_boas_vindas': undefined local variable or methodnome' for main:Object (NameError)

Coloquei em negrito onde ele informa o arquivo, linha e o erro.

Espero ter ajudado.

Mas, como resolvo isso então?

Declara a variável nome no inicio do metodo, assim nome = ""

def da_boas_vindas
   nome = ""
    puts "Bem vindo ao Foge-foge!"
    puts "Qual é o seu nome?"
    puts = gets.strip
    puts "\n\n\n\n\n"
    puts "Começaremos o jogo para você, #{nome}" 
    nome 
end

Olá Ivo e William,

Como o William já explicou o erro acontece porque você usa a variável nome dentro da função da_boas_vindas mas essa variável ainda não existe, assim não pode ser usada.

Criando essa variável com nome = "" vai resolver, mas não é o que precisamos nesse código. O que queremos é salvar o valor retornado por gets.strip nessa variável nome:

nome = gets.strip

Assim você está criando a variável e ao mesmo tempo já dá o seu valor. Segue a função completa:

def da_boas_vindas
    puts "Bem vindo ao Foge-foge!"
    puts "Qual é o seu nome?"
    nome = gets.strip
    puts "\n\n\n\n\n"
    puts "Começaremos o jogo para você, #{nome}" 
    nome 
end

Esse código acima é o mesmo feito na aula. Espero ter ajudado, qualquer coisa é só falar!

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