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

arquivo ui.rb nao esta sendo reconhecido, nao encontrando variaveis

boa tarde estou tendo problemas ao execitar o codigo, parece que ele nao reconheceo o "required_relative 'ui'" que eu coloquei no arquivo

require_relative 'ui'


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

def pede_chute_valido chutes, erros, mascara
    cabecalho_de_tentativa chutes, erros, mascara
     loop do
            chute = pede_um_chute chutes, erros
            if chutes.include? chute
            avisa chute_efetuado chute 
      end
end



def joga(nome)
    palavra_secreta = sorteia_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_unica_letra = chute.size == 1
        if chutou_uma_unica_letra
            total_encontrado = palavra_secreta.count(chute[0])
            if total_encontrado == 0

                erros += 1
            else

            end
        else
            acertou = chute == palavra_secreta
            if acertou

                pontos_ate_agora += 100
                break
            else

                pontos_ate_agora -= 30
                erros += 1
            end
            nome  = da_boas_vindas
        end



    end

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


palavra_secreta = sorteia_palavra_secreta
nome = da_boas_vindas

def jogo_da_forca
    nome = da_boas_vindas

    loop do
        joga nome
        break if nao_quer_jogar?
    end
end

a mensagem de erro foi essa se precisar do arquivo ui eu tambem posso passar https://imgur.com/a/iIgn7og mto obrigado desde ja

6 respostas

Oi Gustavo, tenta usar o load pra ver se funciona:

load './ui'

Oi Wanderson, eu usei o load e required, juntos e separados e em todas as vezes deu erro. tbm ta apontando um erro na linha da ultima def, mas pelo o que eu vi ta cerinho. cê poderia me ajudar?

Gustavo, você consegue criar um zip com os arquivos do seu projeto e me disponibilizar com algum link do Google Drive ou Dropbox?

Boa tarde Wanderson, tudo bem? upei os arquivos no drive. segue link abaixo

https://drive.google.com/open?id=1EtwJOzJyLWZ_YVm6LQvCRB50tzgMcPLi

brigadao

solução!

Oi Gustavo, pelo que vi, os erros eram outros.

1 - a função 'avisa_errou_palavra' estava sem o end.

def avisa_errou_palavra
    puts "Que pena... errou!"
end

2 - faltou um end no for dentro do 'palavra_mascarada', tinha um "palavra" sobrando.

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

3 - dentro da função joga, você usa a função '`pede_um_chute' passando os três argumentos pra um chute válido, mas na verdade, a função que deve ser chamada é a 'pede_um_chute_valido'

def joga(nome)
    palavra_secreta = sorteia_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
        if chutes.include? chute
            avisa_chute_repetido chute
            next
        end
        chutes << chute

        chutou_uma_unica_letra = chute.size == 1
        if chutou_uma_unica_letra
            total_encontrado = palavra_secreta.count(chute[0])
            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

4 - Por último, quando você chama a função que avisa a quantidade de letras encontradas, você não tá passando o total encontrado.

def avisa_letra_encontrada total_encontrado
    puts "Letra encontrada #{total_encontrado} vezes!"
end

Vê, não era uma coisa relativa ao funcionamento do Ruby em si, só uns problemas de esquecer um end aqui ou ali que causou muita confusão ao interpretador.

É normal errar coisas assim, mas fique atento!

Com esses ajustes, conseguir fazer seu jogo voltar a funcionar. Só mais um detalhe, Eu removi as duas linhas que pedia o nome do jogar e sorteava a palavra secreta que estavam acima da função 'jogo_forca1'.

Elas não precisam estar ali já que dentro da função você já pede o nome do jogar e o sorteio da palavra é feito em outro momento.

Faz essas correções e testa pra mim?

Bom, você pode deixar apenas o require_relative e remover o load, vi que deixou os dois.

Oi Wanderson, tudo bom? Depois dos ajustes eu fiz o teste e o jogo rodou certinho. Muito obrigado pela atenção.