Alguém me ajuda nesse código de ruby, por gavor.
Comecei a estudar ruby hoje, fiz esse mini-jogo pra aprender algumas coisas e decidi colocar uma pergunta no final, pra saber se o usuário quer jogar novamente ou não. O problema é que mesmo se o usuário digitar “fim” o loop do while não termina. Segue o código:
res = “start”
while res != "fim"
num_pc = Random.rand(99) + 1
print "Advinhe o número que eu estou pensando, entre 1 e 100: "
num_user = gets.to_i
cont = 1
while num_pc != num_user
if num_pc > num_user
puts "Eu pensei num número maior."
else
puts "Eu pensei num número menor."
end
cont += 1
print "Tente novamente: "
num_user = gets.to_i
end
if num_pc == num_user
case cont
when 1
desempenho = "SENSACIONAL"
when 2…4
desempenho = "ótimo"
when 5…9
desempenho = "bom"
when 10…14
desempenho = "regular"
when 15…19
desempenho = "ruim"
else
desempenho = "péssimo"
end
puts "\nParabéns, você acertou!"
case cont
when 1
puts "Você tentou #{cont} vez."
else
puts "Você tentou #{cont} vezes."
end
puts "Seu desempenho foi #{desempenho}."
end
puts "\nDigite qualer caractere para jogar novamente.\nDigite “fim” para finalizar."
print "-> "
res = gets.downcase
end
puts “Obrigado por jogar!”
Fiz o mesmo jogo em Java (minha linguagem natal kk) e funcionou perfeitamente, não sei o que tem de errado aqui
Sei que já faz muito tempo mas eu só vi agora…kkkkkkkkkkkkkk. O problema do seu código é que o ruby conta o enter depois do “fim” então a verificação não funciona, tem que ser “fim\n”…kkkkkkkkkkkkk.
class Rb1
res = "start"
while res != "fim\n"
num_pc = Random.rand(99) + 1
print "Advinhe o número que eu estou pensando, entre 1 e 100: "
num_user = gets.to_i
cont = 1
while num_pc != num_user
if num_pc > num_user
puts "Eu pensei num número maior."
else
puts "Eu pensei num número menor."
end
cont += 1
print "Tente novamente: "
num_user = gets.to_i
end
if num_pc == num_user
case cont
when 1
desempenho = "SENSACIONAL"
when 2...4
desempenho = "ótimo"
when 5...9
desempenho = "bom"
when 10...14
desempenho = "regular"
when 15...19
desempenho = "ruim"
else
desempenho = "péssimo"
end
puts "\nParabéns, você acertou!"
case cont
when 1
puts "Você tentou #{cont} vez."
else
puts "Você tentou #{cont} vezes."
end
puts "Seu desempenho foi #{desempenho}."
end
puts "\nDigite qualer caractere para jogar novamente.\nDigite “fim” para finalizar."
print "-> "
res = gets.to_s.downcase
end
puts "Obrigado por jogar!"
end
Embora o while vai filtrar o caso em que num_user e num_pc sejam iguais acharia melhor deixar claro no else, colocando um segundo if ou iniciando com um unless.
Você poderia usar: if num_pc > num_user puts "Eu pensei num número maior." elsif num_pc < num_use puts "Eu pensei num número menor." end end
ou unless num_pc == num_user if num_pc > num_user puts "Eu pensei num número maior." else puts "Eu pensei num número menor." end end
while chomp(res) != "fim" … res = gets.downcase end
ou
while res != "fim" … res = chomp(gets.to_s.dowcase) end
Aliás é necessário usar o método .to_s após um gets? Não é redundante? Não seria melhor res = chomp(gets.downcase)