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

Escopo da variável, problema na passagem do parâmetro

Não consigo encontrar o erro do meu código, é um problema de escopo na variável chutes[], mas estou passando ela como parâmetro. Aqui o erro acusado:


maior_ou_menor.rb:47:in `<main>': undefined local variable or method `chutes' for main:Object (NameError)
Did you mean?  chute

Aqui o meu código:

def da_boas_vindas
    puts "Bem vindo ao jogo da adivinhação"
    puts "\n"
    puts "Qual o seu nome?"
    nome = gets
    puts "\n\n\n"
    puts "Começaremos o jogo para você, " + nome
end

def sorteia_numero_secreto
    puts "Escolhendo um número secreto entre 0 e 200..."
    sorteado = 175
    puts "Escolhido... que tal adivinhar hoje o nosso número secreto?"
    puts "\n\n\n"
    return sorteado
end

def pede_um_numero(chutes,tentativa,limite_tentativas)
    puts "Tentativa " + tentativa.to_s + " de " + limite_tentativas.to_s
    puts "Chutes até agora: " + chutes.to_s
    puts "Entre com o numero"
    chute = gets
    puts "Será que voçê acertou? Você chutou " + chute
    puts "\n"
    chute.to_i
end

def verifica_se_acertou(numero_secreto,chute)
    acertou = numero_secreto == chute
    if acertou
        puts "Acertou!"
        return true
    end
        maior = numero_secreto > chute
        if maior
            puts "O número secreto é maior!"
        else
            puts "O número secreto é menor!"
        end
    false
end

da_boas_vindas
numero_secreto = sorteia_numero_secreto

limite_tentativas = 5
chutes[]
total_chutes = 0

for tentativa in 1..limite_tentativas
    chute = pede_um_numero(chutes,tentativa,limite_tentativas)
    chutes[total_chutes] = chute
    total_chutes += 1
    if verifica_se_acertou(numero_secreto,chute)
        break
    end
end
2 respostas
solução!

Geovane, tu tem que atribuir o array a chutes.

chutes = []

faz só isso que resolve :D

Obrigado. Não havia percebido a diferença.