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

Erro undefined method `nao_quer_jogar?'

Meu código está exatamente igual ao do instrutor, e sempre apresenta o mesmo erro. Já verifiquei o código e não encontrei o erro. E ele nem entra na parte de perguntar se desejo jogar novamente.

def da_boas_vindas
    puts "Bem vindo ao jogo da forca!!"
    puts "Qual é o seu nome?"
    nome = gets.strip
    puts "\n\n\n\n\n"
    puts "Então vamos começar a brincadeira, #{nome}"
    nome
end

def escolhe_palavra_secreta
    puts "Escolhendo uma palavra secreta..."
    palavra_secreta = "programador"
    puts "Palavra secreta com #{palavra_secreta.size} letras ... boa sorte!"
    palavra_secreta
end

def nao_quer_jogar
    puts "Deseja jogar novamente? (S/N)"
    quero_jogar = gets.strip
    nao_quero_jogar = quero_jogar.upcase == "N"
end

def pede_um_chute (chutes, erros)
    puts "\n\n\n\n"
    puts "Erros até agora: #{erros}"
    puts "Chutes até agora: #{chutes}"
    puts "Entre com uma letra ou uma palavra..."
    chute = gets.strip
    puts "Será que acertou? Vc chutou #{chute}"
    chute
end

def joga (nome)
    palavra_secreta = escolhe_palavra_secreta

    erros = 0
    chutes = []
    pontos_ate_agora = 0

    while erros < 5
        chute = pede_um_chute chutes, erros
        if chutes.include? chute
            puts "Vc já chutou #{chute}."
            next
        end
        chutes << chute

        chutou_uma_letra = chute.size == 1
        if chutou_uma_letra
            letra_procurada = chute [0]
            total_encontrado = palavra_secreta.count letra_procurada
            if total_encontrado == 0
                puts "Letra não encontrada."
                erros += 1
            else
                puts "Letra encontrada #{total_encontrado} vezes."
            end
        else
            acertou = chute == palavra_secreta
            if acertou
                puts "Parabéns!! Vc acertou!"
                pontos_ate_agora += 100
                break
            else
                puts "Que pena ... vc errou... :("
                pontos_ate_agora -= 30
                erros += 1
            end
        end
    end

    puts "Vc ganhou #{pontos_ate_agora} pontos."
end

nome = da_boas_vindas

loop do
    joga nome
    if nao_quer_jogar?
        break
    end
end

E o erro...

Bem vindo ao jogo da forca!!
Qual é o seu nome?
p





Então vamos começar a brincadeira, p
Escolhendo uma palavra secreta...
Palavra secreta com 11 letras ... boa sorte!




Erros até agora: 0
Chutes até agora: []
Entre com uma letra ou uma palavra...
programador
Será que acertou? Vc chutou programador
Parabéns!! Vc acertou!
Vc ganhou 100 pontos.
Traceback (most recent call last):
        2: from C:/Users/Priscila/Desktop/Alura Cursos - Priscila/forca.rb:77:in `<main>'
        1: from C:/Users/Priscila/Desktop/Alura Cursos - Priscila/forca.rb:77:in `loop'
C:/Users/Priscila/Desktop/Alura Cursos - Priscila/forca.rb:79:in `block in <main>': undefined method `nao_quer_jogar?' for main:Object (NoMethodError)
Did you mean?  nao_quer_jogar

Alguém poderia me ajudar a achar o erro?? Obrigado

4 respostas
solução!

Oi Priscila tudo certo ?

Faltou a interrogração na sua função;

def nao_quer_jogar?
    puts "Deseja jogar novamente? (S/N)"
    quero_jogar = gets.strip
    nao_quero_jogar = quero_jogar.upcase == "N"
end

Nossa inacreditável como uma pontuação pode dar errado o desenvolvimento do jogo. Obrigado pela ajuda,não enxerguei o erro. Uma outra duvida... A ordem como são definidas as funções,altera em alguma coisa na hora de executar o jogo? Por exemplo na aula 2 vídeo 2, o instrutor coloca algumas definições antes do boas vindas.

Não, é mais por questão de organização mesmo

Ok... mais uma vez obrigado!