Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro no Loop

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 palavramascarada (chutes, palavra_secreta) mascara = "" for letra in palavra_secreta.chars if chutes.include? letra mascara << letra else mascara << "" end end mascaraend

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 endend

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

Agradeço já a quem puder ajudar.

1 resposta
solução!

Peço desculpas pelo arquivo não estar formatado.

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
    end    
end

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

Aqui esta o arquivo formatado (peço desculpas pelo erro)