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

Erro no Loop do

Olá, estou com um problema no loop na função jogo_da_forca

já refatorei algumas vezes tentando alterar alguns detalhes, mas o erro ainda persiste, mesmo que o código seja o mesmo do vídeo.

O problema, no terminal, é demonstrado nas duas primeiras linhas (ao invocar o loop do) e também demonstra um erro no arquivo main, ao invocar o jogo.

OBS: Isso tudo ocorre após colocar o nome do jogador

ARQUIVOS:

Forca.rb:

require_relative 'ui'

def palavra_mascarada (chutes, palavra_secreta)
    mascara = ""
    for letra in palavra_secreta.chars
        if chutes.include? letra
            mascara << letra
        else
            mascara << "_"
        end
    end    
    mascara        
end

def pede_um_chute_valido (chutes, erros, mascara)
    cabeçalho_de_tentativas chutes, erros, mascara
    loop do
        chute = pede_um_chute chutes, erros
        if chutes.include? chute
            avisa_chute_efetuado chute
        else
            return chute
        end        
    end    
end

def joga (nome)
    palavra_secreta = escolhe_palavra_secreta

    erros = 0
    chutes = []
    pontos_ate_agora = 0

    while erros < 5
        mascara = palavra_mascarada chutes palavra_secreta
        chute = pede_um_chute_valido chutes, erros, mascara
        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
                avisa_letra_nao_encontrada
                erros += 1
            else
                avisa_letra_encontrada total_encontrado
            end    
        else
            acertou = chute == palavra_secreta
            if acertou
                avisa_acertou_palavra
                pontos_ate_agora += 100
                break
            else
                avisa_errou_palavra
                pontos_ate_agora -= 30
                erros += 1
            end
        end    

    end
avisa_pontos pontos_ate_agora end

def jogo_da_forca nome = da_boas_vindas

loop do joga nome if nao_quer_jogar? break end endend

ui.rb:

def avisa_chute_efetuado (chute)
    puts "Você já chutou #{chute}"
end

def avisa_letra_nao_encontrada
    puts "Letra não encontrada."
end

def avisa_letra_encontrada (total_encontrado)
    puts "Letra encontrada #{total_encontrado} vezes."    
end

def avisa_acertou_palavra
    puts "Parabéns! Acertou!"
end

def avisa_errou_palavra
    puts "Que pena...Errou"
end

def avisa_pontos(pontos_ate_agora)
    puts "Você ganhou #{pontos_ate_agora} pontos."
end

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\n"
    puts "Começaremos o jogo para você #{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_quer_jogar = quero_jogar.upcase == "N"
end    

def cabeçalho_de_tentativas (chutes, erros, mascara)
    puts "\n\n\n\n"
    puts "Palavra secreta: #{mascara}"
    puts"Erros até agora: #{erros}"
    puts "Chutes até agora: #{chutes}"
end

def pede_um_chute
    puts "Entre com uma letra ou uma palavra"
    chute = gets.strip
    puts "Será que acertou? Você chutou #{chute}"
    chute
end

main.rb:

require_relative 'Forca'

jogo_da_forca
2 respostas
solução!

Olá, você poderia colocar o erro que dá? Olhando seu código deu para perceber que isso está meio estranho

def jogo_da_forca nome = da_boas_vindas

loop do joga nome if nao_quer_jogar? break end endend

o certo seria

def jogo_da_forca
    nome = da_boas_vindas
    loop do
        joga nome 
        if nao_quer_jogar? 
            break
        end
    end
end

Acho que isso já ajuda o problema do loop, caso essa seja a solução não esqueça de marcar como solucionado pois assim ajuda outros que talvez tenham a mesma dúvida que você

Estava faltando uma vírgula apenas, mas obrigado pela ajuda.