Boa noite. Quando vou executar o meu código ele sempre escolhe a segunda palavra do "dicionario.txt". O código não está aleatorizando uma palavra, sempre a mesma.
Segue os códigos:
main.rb
require_relative 'forca'
jogo_da_forca
forca.rb
require_relative 'ui'
require_relative 'rank'
def sorteia_palavra_secreta_sem_consumir_muita_memoria
puts "\n\n\n"
avisa_escolhendo_palavra
arquivo = File.new("dicionario.txt")
quantidade_de_palavras = arquivo.gets.to_i
numero_escolhido = rand(quantidade_de_palavras)
for linha in 1..(numero_escolhido-1)
arquivo.gets
end
palavra_secreta = arquivo.gets.strip.downcase
arquivo.close
avisa_palavra_escolhida palavra_secreta
end
def palavra_mascarada(chutes, palavra_secreta)
mascara = ""
for letra in palavra_secreta.chars
if chutes.include? letra
mascara << letra
else
mascara << "_"
end
end
mascara
end
def pede_um_chute_valido chutes, erros, mascara
cabecalho_de_tentativa chutes, erros, mascara
loop do
chute = pede_um_chute
if chutes.include? chute
avisa_chute_efetuado chute
else
return chute
end
end
end
def joga nome
palavra_secreta = sorteia_palavra_secreta_sem_consumir_muita_memoria
erros = 0
chutes = []
pontos_ate_agora = 0
while erros < 5
mascara = palavra_mascarada chutes, palavra_secreta
chute = pede_um_chute_valido chutes, erros, mascara
chutes << chute
chutou_uma_letra = chute.size == 1
if chutou_uma_letra
letra_procurada = chute [0]
total_encontrado = palavra_secreta.count letra_procurada
if total_encontrado == 0
avisa_letra_nao_encontrada
erros += 1
else
avisa_letra_encontrada total_encontrado
end
else
acertou = chute == palavra_secreta
if acertou
avisa_acertou_palavra
pontos_ate_agora += 100
break
else
avisa_errou_palavra
pontos_ate_agora -= 30
erros +=1
end
end
end
avisa_pontos pontos_ate_agora
pontos_ate_agora
end
def jogo_da_forca
nome = da_boas_vindas
pontos_totais = 0
avisa_campeao_atual le_rank
loop do
pontos_totais += joga nome
avisa_pontos_totais pontos_totais
if le_rank[1].to_i < pontos_totais
salva_rank nome, pontos_totais
end
if nao_quer_jogar?
break
end
end
end
ui.rb
def avisa_campeao_atual dados
puts "Nosso campeão atual é #{dados[0]} com #{dados[1]} pontos."
end
def avisa_chute_efetuado chute
puts "Você já chutou #{chute}."
end
def avisa_letra_nao_encontrada
puts "Letra não encontrada."
end
def avisa_letra_encontrada total_encontrado
puts "Letra encontrada #{total_encontrado} vezes."
end
def avisa_acertou_palavra
puts
puts "\nParabéns, você ganhou!"
puts
puts " ___________ "
puts " '._==_==_=_.' "
puts " .-\\: /-. "
puts " | (|:. |) | "
puts " '-|:. |-' "
puts " \\::. / "
puts " '::. .' "
puts " ) ( "
puts " _.' '._ "
puts " '-------' "
puts
end
def avisa_errou_palavra
puts "Que pena... errou."
end
def avisa_pontos pontos_ate_agora
puts "Você ganhou #{pontos_ate_agora} pontos."
end
def da_boas_vindas
puts
puts "/****************/"
puts "/ Jogo de Forca */"
puts "/****************/"
puts
puts "Qual é o seu nome?"
nome = gets.strip
puts "\n\n\n\n\n\n"
puts "Começaremos o jogo para você, #{nome}"
nome
end
def desenha_forca (erros)
cabeca = " "
corpo = " "
pernas = " "
bracos = " "
if erros >= 1
cabeca = "(_)"
end
if erros >= 2
bracos = " | "
corpo = "|"
end
if erros >= 3
bracos = "\\|/"
end
if erros >= 4
pernas = "/ \\"
end
puts " _______ "
puts " |/ | "
puts " | #{cabeca} "
puts " | #{bracos} "
puts " | #{corpo} "
puts " | #{pernas} "
puts " | "
puts "_|___ "
puts
end
def cabecalho_de_tentativa(chutes, erros, mascara)
puts "\n\n\n\n"
desenha_forca erros
puts "Palavra secreta: #{mascara}"
puts "Erros até agora: #{erros}"
puts "Chutes até agora: #{chutes}"
end
def pede_um_chute
puts "Entre com a letra ou palavra"
chute = gets.strip.downcase
puts
puts "Será que acertou? Você chutou #{chute}"
chute
end
def nao_quer_jogar?
puts "Deseja jogar novamente? (S/N)"
quero_jogar = gets.strip
nao_quero_jogar = quero_jogar.upcase == "N"
end
def avisa_escolhendo_palavra
puts "Escolhendo uma palavra secreta..."
end
def avisa_palavra_escolhida palavra_secreta
puts "Escolhida uma palavra com #{palavra_secreta.size} letras... boa sorte!"
palavra_secreta
end
def avisa_pontos_totais pontos_totais
puts "Você possui #{pontos_totais} pontos."
end
rank.rb
def salva_rank nome, pontos_totais
conteudo = "#{nome}\n#{pontos_totais}"
File.write "rank.txt", conteudo
end
def le_rank
conteudo = File.read("rank.txt")
conteudo.split "\n"
end
dicionario.txt
alura
casa do codigo
caelum
desenvolvedor
programador
software
refatorar
code smell
rank.txt
Maurilio
200
Agradeço desde já!