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

Dúvida: mensagem de erro para a função "não_quer_jogar?"

Olá. Meu programa está apresentando erro na hora de perguntar se o usuário deseja jogar novamente. Não consigo achar o problema. Podem me ajudar a entender?

Esta é a mensagem:

maior_ou_menor.rb:132:in `block in <main>': undefined method `não_quer_jogar?' for main:Object (NoMethodError)
    from maior_ou_menor.rb:130:in `loop'
    from maior_ou_menor.rb:130:in `<main>'

E o código segue abaixo:

def da_boas_vindas
  puts
  puts "        P  /_\  P                              "
  puts "       /_\_|_|_/_\                             "
  puts "   n_n | ||. .|| | n_n         Bem vindo ao    "
  puts "   |_|_|nnnn nnnn|_|_|     Jogo de Adivinhação!"
  puts "  |' '  |  |_|  |'  ' |                        "
  puts "  |_____| ' _ ' |_____|                        " 
  puts "        \__|_|__/                              "
  puts
  puts "Jogador, qual é o seu nome?"
  nome = gets.strip
  puts "\n\n\n\n"
  puts "Começaremos o jogo para voce, #{nome}"
  nome
end

def pede_dificuldade
    puts "Qual o nível de dificuldade?"
    puts "(1) Muito fácil (2) Fácil (3) Normal (4) Difícil (5) Impossível"
    puts "Escolha:"
    dificuldade = gets.to_i
end

def ganhou
    puts
    puts "             OOOOOOOOOOO               "
    puts "         OOOOOOOOOOOOOOOOOOO           "
    puts "      OOOOOO  OOOOOOOOO  OOOOOO        "
    puts "    OOOOOO      OOOOO      OOOOOO      "
    puts "  OOOOOOOO  #   OOOOO  #   OOOOOOOO    "
    puts " OOOOOOOOOO    OOOOOOO    OOOOOOOOOO   "
    puts "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO  "
    puts "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO  "
    puts "OOOO  OOOOOOOOOOOOOOOOOOOOOOOOO  OOOO  "
    puts " OOOO  OOOOOOOOOOOOOOOOOOOOOOO  OOOO   "
    puts "  OOOO   OOOOOOOOOOOOOOOOOOOO  OOOO    "
    puts "    OOOOO   OOOOOOOOOOOOOOO   OOOO     "
    puts "      OOOOOO   OOOOOOOOO   OOOOOO      "
    puts "         OOOOOO         OOOOOO         "
    puts "             OOOOOOOOOOOO              "
    puts
    puts "               Acertou!                "
    puts
end

def sorteia_numero_secreto(dificuldade)
  case dificuldade
  when 1
    maximo = 30
  when 2
    maximo = 60
  when 3
    maximo = 100
  when 4
    maximo = 150
  else
    maximo = 200
  end
  puts "Escolhendo um numero secreto entre 1 e #{maximo}..."
  sorteado = rand(maximo) + 1
  puts "Escolhido! Que tal adivinhar nosso numero secreto?"
  sorteado
end

def pede_um_numero(chutes,tentativa,limite_de_tentativas)
  puts "\n\n\n\n"
  puts "Tentativa #{tentativa} de #{limite_de_tentativas}"
  puts "Chutes até agora: #{chutes}"
  puts "Entre com o numero"
  chute = gets.strip
  puts "Será que você acertou? Voce chutou: #{chute}"
  chute.to_i
end

def verifica_se_acertou(numero_secreto,chute)
  acertou = numero_secreto == chute.to_i

  if acertou
    ganhou
    return true
  end

  maior = numero_secreto > chute.to_i
  if maior
      puts "Errou! O número secreto é maior."
  else
      puts "Errou! O número secreto é menor."
  end
  false
end

def joga(nome,dificuldade)
    numero_secreto = sorteia_numero_secreto dificuldade

    limite_de_tentativas = 5
    chutes = []
    pontos_ate_agora = 100

    for tentativa in 1..limite_de_tentativas

      chute = pede_um_numero chutes, tentativa, limite_de_tentativas
      chutes << chute

      if nome == "Fabio"
        ganhou
        break
      end

      pontos_a_perder = (chute - numero_secreto).abs / 2.0
      pontos_ate_agora -= pontos_a_perder

      if verifica_se_acertou numero_secreto, chute
        break
      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
dificuldade = pede_dificuldade

loop do
  joga nome, dificuldade
  break if não_quer_jogar?
end
4 respostas

Já encontrei o problema.

Fabio, posta aqui como resolveu o problema para outros com dúvidas similares vejam!

solução!

Ah sim Yan, me desculpe por não ter comentado. Foi apenas um erro de digitação: escrevi não_quer_jogar? (com til) ao invés de escrever sem acentuação - nao_quer_jogar?

Retirei o acento e funcionou como deveria.

loop do
  joga nome, dificuldade
  break if não_quer_jogar?
end

Ótimo :)! Vou marcar sua última resposta como solução, ok? Abraços, bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software