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

Tem alguma coisa errada com meu código.

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 "Qual o seu nome?"
    nome = gets.strip
    puts "\n\n\n"
    puts "Iremos iniciar o jogo para você,  #{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
    puts "\n\n"
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 secreto entre 1 e #{maximo}..."
    sorteado = rand(maximo) + 1
    puts "Escolhido... que tal tentar acertar em 5 tentativas?"
    sorteado
end

def pede_um_numero chutes, contador, limite_de_tentativas
    puts "\n\n\n"
    puts "TENTATIVA #{contador} DE #{limite_de_tentativas}"
    puts
    puts "Chutes ate agora: #{chutes}" 
    puts "Entre com o numero" 
    chute = gets.strip
    puts "\n\n"
    puts "você chutou #{chute}" 
    chute.to_i
end

def verifica_se_acertou numero_secreto, chute
    acertou = numero_secreto == chute
    if acertou
        ganhou
        return true
    end
        maior = numero_secreto > chute
        if maior
        puts "O número secreto é maior."
        else
        puts "O número secreto é menor."
        end
    false
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 joga nome, dificuldade
    numero_secreto = sorteia_numero_secreto dificuldade 

limite_de_tentativas = 5
chutes = []
pontos_ate_agora = 1000

for contador in 1..limite_de_tentativas
    chute = pede_um_numero chutes, contador, limite_de_tentativas
    chutes << chute

    if nome == "Thiago"
        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 nao_quer_jogar?
end

Quando eu executo o código e na parte de escolher o nível de dificuldade,

seleciono 1 (facil)

E o que aparece é "Escolhendo um número secreto entre 1 e 200..."

deveria aparecer "Escolhendo um número secreto entre 1 e 30"

não sei aonde estou errado, já revisei o código algumas vezes e não acho o motivo.

3 respostas

Oi, Thiago. Só um chute...

Talvez você precise converter o input que vem do usuário para inteiro. Ou então no seu case, comparar a entrada com strings. Veja se isto funciona.

Um abraço!

solução!

Oi Thiago,

O problema está no método:

pede_dificuldade

Em Ruby todo método retorna por padrão a última linha e neste método a última linha é um

puts "\n\n"

Com isso, para corrigir, seu método deve ficar assim:

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: "
    puts "\n\n"
    dificuldade = gets.to_i
end

Muito obrigado, solucionou o problema! =)

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