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

Jogo Acertou x Errou não mostra o acerto

No curso de introdução à lógica de programação em Ruby, o jogo às vezes retorna um acerto e em outros casos não, tudo isso com o mesmo código. Alguém saberia explicar o por quê?

Exemplos: Mostra https://drive.google.com/file/d/1p1b1EP7d45xvB2Velo9SUoHEX6IuOxyK/view?usp=sharing

Não mostra https://drive.google.com/file/d/1sJc8RDpiwd7fUuM9L_F7oIC-y1rLokr_/view?usp=sharing

def da_boas_vindas
  puts "Bem-vindo ao jogo da advinhação"
  puts "Qual é o seu nome?"
  nome = gets.strip
  puts "\n\n\n\n"
  puts "Vamos começar o jogo para você, #{nome} "
end

def pede_dificuldade
    puts "Qual o nível de dificuldade que deseja? (1 fácil, 5 difícil)"
    dificuldade = gets.to_i
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 número entre 0 e #{maximo - 1}"
    sorteado = rand(200)
    puts "Escolhido! Que tal adivinhar hoje o nosso número secreto?"
    sorteado
end

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

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

    if acertou
      puts "Acertou!"
      return true
    end

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

da_boas_vindas
dificuldade = pede_dificuldade
numero_secreto = sorteia_numero_secreto dificuldade

pontos_ate_agora = 1000
limite_tentativas = 5
chutes = []
total_de_chutes = 0

for tentativa in 1..limite_tentativas
  chute = pede_um_numero chutes, tentativa, limite_tentativas
  chutes << chute
  total_de_chutes = total_de_chutes + 1

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

  if verifica_acerto numero_secreto, chute
        break
  end
end

puts "Você ganhou #{pontos_ate_agora} pontos!"
2 respostas

Oi eu imagino que isso aconteça por causa desta linha

    sorteado = rand(200)

que gera um número aleatório entre 0 e 200.

experimente colocar para fins de testes

puts sorteado

logo abaixo para ver qual o número aleatório e observar o resultado.

Pelo que mostrou nos print este é o comportamento normal do programa. Isso acontece porque toda vez que você começa o programa é gerado um novo número aleatório.

solução!

Certinho, o erro está nessa linha mesmo, mas vi que o problema é outro. Ao invés de

sorteado = rand(200) 

precisa ser

sorteado = rand(maximo)

senão estaria desconsiderando toda a regra do "when" estabelecido no def sorteia_numero_secreto

Obrigada pela ajuda!