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

Dúvida no "Break"

Não sei pq, mas a primeira vez que roda o jogo da forca, quando acerto a palavra o break só quebra o "while erros < 5" e começa a "def joga(nome)" d novo, e ai na segunda vez que acerto a palavra o break quebra a "def joga(nome)" e ai fica normal pergunta se eu quero jogar de novo e tudo mais, só não sei pq na primeira vez o break não faz isso.

4 respostas

Gustavo posta o seu código aqui pra gente dar uma olhada?

Veja se o valor da variável erro é a mesma na segunda jogada.

require_relative 'uiforca'

def salva_rank nome, pontos_totais
    conteudo = "#{nome}\n#{pontos_totais}"
    File.write "rank.txt", conteudo
end

def le_rank 
    conteudo = File.read "rank.txt"
    conteudo.split "\n"
end


def escolhe_palavra
    avisa_escolhendo_palavra_secreta
    texto = File.read("dicionario.txt")
    todas_as_palavras = texto.split "\n"
    numero_escolhido = rand(todas_as_palavras.size)
    palavra_desafio = todas_as_palavras[numero_escolhido].downcase
    avisa_palavra_secreta_escolhida palavra_desafio
end

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

def pede_chute_valido chutes, erros, contador, mascara
    cabecalho_de_tentativa chutes, erros, contador, mascara
    loop do
        chute = pede_um_chute 
            if chutes.include? chute
                avisa_chute_efetuado chute    
            else
                return chute
            end
    end
end

def joga(nome)
    palavra_desafio = escolhe_palavra

    contador = 0
    erros = 0
    chutes = []
    pontos_ate_agora = 0

    while erros < 5
        mascara = palavra_mascarada chutes, palavra_desafio
        chute = pede_chute_valido chutes, erros, contador, mascara

        chutes << chute

        nao_jogar_mais = chute == "sair"
        if nao_jogar_mais
            break
        end

    chutou_uma_letra = chute.size == 1
        if chutou_uma_letra
        letra_procurada = chute[0]
        total_encontrado = palavra_desafio.count letra_procurada



        if total_encontrado == 0
            avisa_letra_nao_encontrada
            erros += 1
        else  
            avisa_letra_encontrada total_encontrado

        end


        else
            acertou = chute == palavra_desafio
            if acertou
                avisa_acertou_palavra
                pontos_ate_agora += 100
                break
            else
                avisa_errou_palavra
                pontos_ate_agora -= 30
                erros += 1
            end

        end

    contador += 1
    avisa_pontos_ate_agora pontos_ate_agora
    end

pontos_ate_agora
end

def jogo_da_forca 
    nome = da_boas_vindas
    pontos_totais = 0

    avisa_campeao_atual le_rank

    loop do
        joga nome

        pontos_totais += joga nome
        avisa_pontos_totais pontos_totais

        if le_rank[1].to_i < pontos_totais
            salva_rank nome, pontos_totais
        end

        if nao_quer_jogar?
            break
        end
    end

end
solução!

Era um problema aqui


    loop do
        joga nome

        pontos_totais += joga nome
        avisa_pontos_totais pontos_totais

        if le_rank[1].to_i < pontos_totais
            salva_rank nome, pontos_totais
        end

        if nao_quer_jogar?
            break
        end
    end

não precisava do joga nome