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

Escolhendo Palavra Secreta (Erro)

Olá, já tentei alterar e seguir até o padrão apresentado pelo curso, mas aparentemente está retornando um erro na hora da escolha da palavra secreta:

Escolhendo palavra secreta....
/Users/tarugo/Documents/Programing/Ruby/Forca/ui.rb:14:in `avisa_palavra_escolhida': undefined method `size' for nil:NilClass (NoMethodError)
    from /Users/tarugo/Documents/Programing/Ruby/Forca/forca.rb:9:in `sorteia_palavra_secreta'
    from /Users/tarugo/Documents/Programing/Ruby/Forca/forca.rb:53:in `joga'
    from /Users/tarugo/Documents/Programing/Ruby/Forca/forca.rb:47:in `block in jogo_da_forca'
    from /Users/tarugo/Documents/Programing/Ruby/Forca/forca.rb:46:in `loop'
    from /Users/tarugo/Documents/Programing/Ruby/Forca/forca.rb:46:in `jogo_da_forca'
    from Main.rb:3:in `<main>'

Segue meu código:

require_relative 'ui'

def sorteia_palavra_secreta
    avisa_escolhendo_palavra
    texto = File.read("Dicionário.txt")
    todas_as_palavras = texto.split("\n")
    numero_aleatorio = rand(todas_as_palavras.size)
    palavra_secreta = todas_as_palavras[numero_aleatorio]
    avisa_palavra_escolhida(palavra_secreta)
end

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

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

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

def jogo_da_forca
    nome = boas_vindas
    pontos_totais = 0
    avisa_pontos_totais(pontos_totais)
    salva_rank(nome, pontos_totais)
    loop do
        pontos_totais += joga(nome)
        break if nao_quer_jogar_novamente?
    end
end

def joga(nome)
    palavra_secreta = sorteia_palavra_secreta

    erros = 0
    chutes = []
    pontos_ate_agora = 0

    while erros < 5
        mascara = palavra_mascarada(palavra_secreta, chutes)
        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_encontrada = palavra_secreta.count letra_procurada

            if total_encontrada == 0
              avisa_letra_nao_encontrada
              erros += 1
            else
              avisa_letra_encontrada(total_encontrada)
            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)
    pontos_ate_agora
end

Onde está o erro????

3 respostas

Oi Bruno, posta aqui também seu ui.rb pra que agente possa ver se o problema é nele?

Oi Bruno,

O seu arquivo Dicionário.txt está com uma palavra por linha mesmo?

Altera o seu código só pra vermos o que ele está trazendo na hora de ler o arquivo:

texto = File.read("Dicionário.txt")
p texto

Abraço!

solução!

Descobri,

O ATOM (No MAC) tinha o dicionario.txt com as palavras dentro mas por algum motivo não estava salvo e o arquivo estava vazio.

NOOB.

Mas ok, importante é aprender.