Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Execução do array duplicados, aparece o mesmo chute duas vezes

Quando executo o código duplica o chute no puts. Segue código abaixo:

def boas_vindas
    puts "Bem vindo ao jogo de adivinhação."
    puts "Qual o seu nome?"
    nome = gets.strip 

    puts "\n\n\n\n\n"

    puts "Começaremos o jogo para você, #{nome}."
end

def sorteia_numero_secreto
    puts "Escolhendo um número secreto entre 0 e 200..."
    sorteado = 175
    puts "Escolhido... que tal adivinhar hoje o nosso número secreto?"
    sorteado
end

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

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

    if acertou
        puts "Acertou!"
        return true
    end


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

boas_vindas

numero_secreto = sorteia_numero_secreto

pontos_ate_agora = 1000
limite_de_tentativas = 3 
chutes=[]


for tentativa in 1..limite_de_tentativas
    chute = pede_um_numero chutes, tentativa, limite_de_tentativas
    chutes[chutes.size] = chute
    chutes << chute

    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."
1 resposta
solução!

O erro estava no ultimo for do código com aplicação errada do .size. Abaixo código final.

def boas_vindas

    puts "        P  /_\  P                              "
      puts "       /_\_|_|_/_\                             "
    puts "   n_n | ||. .|| | n_n         Bem vindo ao    "
    puts "   |_|_|nnnn nnnn|_|_|     Jogo de Adivinhação!"
    puts "  |' '  |  |_|  |'  ' |                        "
    puts "  |_____| ' _ ' |_____|                        " 
    puts "        \__|_|__/                              "

    puts "Qual o seu nome?"
    nome = gets.strip 

    puts "\n\n\n\n\n"

    puts "Começaremos o jogo para você, #{nome}."
    return 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 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 adivinhar hoje o nosso número secreto?"
    sorteado
end

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

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

    if acertou
        ganhou
        return true
    end


    maior = numero_secreto > chute
    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)

    pontos_ate_agora = 1000
    limite_de_tentativas = 5
    chutes=[]


    for tentativa in 1..limite_de_tentativas
        chute = pede_um_numero chutes, tentativa, limite_de_tentativas

        chutes << chute

        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)"
    quer_jogar = gets.strip
    nao_quer_jogar = quer_jogar.upcase == "N"
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

nome = boas_vindas

dificuldade = pede_dificuldade

loop do
    joga nome, dificuldade
    if nao_quer_jogar?
        break
    end
end