2
respostas

method erro

Olá, meu código esta gerando o seguinte erro:

C:/forca.rb:26:in block in <main>': undefined methodjoga' for main:Object (No MethodError) from C:/forca.rb:25:in loop' from C:/forca.rb:25:in'

Segue abaixo o código:

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\n"
    puts "Começaremos o jogo para você, #{nome}"
    nome
end

def sorteia_palavra_secreta
    puts "Escolhendo uma palavra..."
    palavra_secreta = "programador"
    puts "Escolhida uma palavra 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? Você chutou #{chute}"
    chute
end


def joga(nome)
    palavra_secreta = sorteia_palavra_secreta

    erros = 0
    chutes = []
    pontos_ate_agora = 0

        while erros < 5
            chute = pede_um_chute chutes, erros
            if chutes.include? chute
                puts "Você 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! Acertou!"
                    pontos_ate_agora += 100
                    break
                else
                    puts "Que pena... errou!"
                    pontos_ate_agora -= 30
                    erros += 1
                end
            end

        end

end

puts "Você ganhou #{pontos_ate_agora} pontos."

nome = da_boas_vindas

loop do

    joga nome
    break if nao_quer_jogar?   
end
2 respostas

Oi William,

Eu encontrei dois erros no seu código:

  • Dentro do while erros < 5, você está fazendo if chutou_uma__letra com um underline a mais. Deveria ser if chutou_uma_letra.

  • No final, você faz puts "Você ganhou #{pontos_ate_agora} pontos." Esse puts deveria estar dentro da função joga, pois é lá que você declarou a variável pontos_ate_agora. Me parece inclusive que ele deveria estar dentro do while.

Fora isso, o programa funcionou certinho aqui. Veja se corrigir esses pontos resolve.

Vlw Gabriel!!!

Funcionou perfeitamente, sempre um par de olhos amais ajuda mto!!! kkkkk