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

PROBLEMA NO SIZE

Meu programa está apresentando o seguinte erro -> 40:in joga': undefined methodsize' for nil:NilClass (NoMethodError)

Por quê será?

def da_boas_vindas
    puts "Olá, bem-vindo ao jogo da forca"
    puts "Qual é o seu nome?"
    nome = gets.strip
    puts
    puts "O jogo já vai começar #{nome} !"
    nome
end

def sorteia_palavra_secreta
    puts "Estamos sorteando a palavra secreta..."
    palavra_secreta = "programador"
  puts "Escolhemos uma palavra secreta com #{palavra_secreta.size} letras... Boa sorte!"
  palavra_secreta
end

def pede_um_chute(chutes,erros)
  puts "Erros até agora #{erros}."
  puts "Chutes até agora #{chutes}"
  puts "Entre com a letra ou a palavra."
  chute = gets.strip
  puts "Será que você acertou? Você chutou #{chute}"
end

def joga(nome)
    palavra_secreta = sorteia_palavra_secreta

    erros = 0
    chutes = []
    pontos_ate_agora = 0

    while erros < 5
        chute = pede_um_chute chutes, erros
        if chutes.include? chute
          puts "Você já chutou #{chute}"
          next
        end
        chutes << chute

        chutou_uma_letra = chutes.size == 1
        if chutou_uma_letra

          letra_procurada = chutes[0]
            total_encontrado = palavra_secreta.count letra_procurada
            if total_encontrado == 0
                puts "Letra não encontrada."
                erros += 1
            else
                puts "Letra encontrada #{total_encontrado} vezes."
            end


        else
            acertou = chute == palavra_secreta
            if acertou
                puts "Parabéns! Acertou!"
                pontos_ate_agora += 100
                break
            else
                puts "Que pena... errou!"
                pontos_ate_agora -= 30
                erros += 1
            end
        end

    end

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

def nao_quer_jogar?
    puts "Deseja jogar novamente? (S/N) "
    quero_jogar = gets.strip
    nao_quero_jogar = quero_jogar.upcase == "N"
end

nome = da_boas_vindas

loop do
    joga nome
        break if nao_quer_jogar?
end
2 respostas
solução!

Oi Rose, copiei e colei o código aqui e deu um erro diferente, indicando que talvez ao copiar e colar o código no fórum algo tenha mudado. na linha 40 (chutou_uma_letra = chutes.size == 1) precisei remover o s de chutes para comparar se o tamanho do chute era uma única letra. Depois disso, consegui receber o erro que você estava recebendo.

Aí então encontrei o erro!

O método pede_um_chute não está retornando o chute feito, pois a última linha de código dele é um puts. Para retornar seu chute neste método, basta escrever na última linha o nome da variável:

def pede_um_chute(chutes,erros)
  puts "Erros até agora #{erros}."
  puts "Chutes até agora #{chutes}"
  puts "Entre com a letra ou a palavra."
  chute = gets.strip
  puts "Será que você acertou? Você chutou #{chute}"
  chute
end

Porém, ainda tem outro erro no programa, relativo ao modo como você está pegando a letra_procurada para fazer a contagem na palavra_secreta.

Tente descobrir por si, se não conseguir pode vir de novo que te ajudo! =)

Bons estudos!

Oi Rose, tudo bem? Testei seu código aqui e não tive o mesmo problema. Tive outro. O problema que encontrei está localizado no método pede_um_chute. Vejamos:

def pede_um_chute(chutes,erros)
  puts "Erros até agora #{erros}."
  puts "Chutes até agora #{chutes}"
  puts "Entre com a letra ou a palavra."
  chute = gets.strip
  puts "Será que você acertou? Você chutou #{chute}"
end

Você pede a letra ou palavra, mas não retorna. Então quando você faz chutes << chute em outra parte do código, ele não adiciona o que a pessoa realmente digitou. E por isso, falha em outras verificações. Para resolver, basta retornar o chute.

def pede_um_chute(chutes,erros)
  puts "Erros até agora #{erros}."
  puts "Chutes até agora #{chutes}"
  puts "Entre com a letra ou a palavra."
  chute = gets.strip
  puts "Será que você acertou? Você chutou #{chute}"
  chute
end