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

Validação do chute

Bom eu assisti todas as video aula e depois de fazer acompanhando todo o processo igual comofoi apresentado no curso. Resolvi fazer eu sozinho pra ver se eu estava conseguindo aplicar a lógica, enfim deu um problema na validação, não nela em si, mas quando eu coloco a letra 'a' por exemplo e depois repito ela o pc me responde q é inválido, mas continua verificando a letra existe na palavra secreta ou não. Acho q só da pra entender como eu fiz se eu mandar o arquivo todo e não só parte do código mas irei tentar:

#Esse é meu arquivo 'main.rb'
require_relative "ui"
require_relative "rb"

dar_boas_vindas


palavra_secreta = escolhendo_palavra_secreta
pontos = 0
erros = 0
chutes = []

msg_palavra_secreta_escolhida palavra_secreta

while erros <= 5 
    puts "Digite a palavra ou a letra:"
    chute = gets.strip
    verifica_se_repetiu_chute chutes,chute
    chutes << chute
    palavra = 1 < chute.size
    if palavra
        acertou = chute == palavra_secreta
        if acertou
            puts "Você Venceu!!!"
            pontos += 100
            break
        else
            pontos -= 30
            erros += 1
        end
    else
        qnt_encontrada = palavra_secreta.count chute 
        if qnt_encontrada == 0 
            puts "Errou a palavra não tem essa letra!"
            erros += 1
            pontos-=10
         else
             puts "Acertou a letra!!\n"
            puts "Letra encontrada #{qnt_encontrada} vez(es)!"
            pontos += qnt_encontrada
        end
    end
end
#Esse é o arquivo: 'rb.rb'
def pega_o_nome
    gets.strip
end

def escolhendo_palavra_secreta
    lista = File.read("lista.txt")
    lista_palavras = lista.split "\n"
    numero_palavra = rand(lista_palavras.size)
    palavra_chave = lista_palavras[numero_palavra].strip.downcase
end

def verifica_se_repetiu_chute chutes,chute
    for i in 0..chutes.size
        if chute == chutes[i]
            msg_repetiu_chute
        end
    end
end
#Esse é o arquivo: 'ui.rb'
require_relative "rb"

def dar_boas_vindas
    puts "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
    puts "*****************************"
    puts "|Bem vindo ao jogo da forca!!|"
    puts "*****************************\n"

    puts "Digite seu nome jogador:"
    nome = pega_o_nome
    puts "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
    puts "#{nome} seja Bem Vindo\nEstamos escolhendo a palavra secreta!\n ...................\n\n"
end

def msg_palavra_secreta_escolhida palavra_secreta
    puts "A palavra secreta foi escolhida!!"
    puts "A plavra tem #{palavra_secreta.size} letras!\n Boa Sorte!"
end

def msg_repetiu_chute
    puts "\n\nVocê já tentou essa.!"
end

Como aparece na tela: Você já tentou essa! errou a palavra ou ja tem essa letra digite a letra ou uma palavra: _

1 resposta
solução!

Oi David,

O problema está nessas linhas do arquivo main.rb:

...
while erros <= 5 
    puts "Digite a palavra ou a letra:"
    chute = gets.strip
    verifica_se_repetiu_chute chutes,chute
    chutes << chute
    palavra = 1 < chute.size
...

A função verifica_se_repetiu_chute não tem nenhum impacto no fluxo do programa. Apesar de imprimir a mensagem de erro, ela não faz nada. Veja o código do instrutor para resolver esse problema:

...
while erros < 5
    chute = pede_um_chute chutes, erros
    if chutes.include? chute
        avisa_chute_repetido chute
        next
    end
    chutes << chute
...

Um ifnext no while caso o chute seja repetido. Você precisa fazer algo semelhante com a sua função, fazendo ela retornar true ou false, caso o chute seja repetido ou não.