hangman/hangman.rb
2022-01-23 18:19:04 -05:00

110 lines
2.4 KiB
Ruby

#hangman game
#01/21/2022
def pick_word(a)
rand_int = rand(0..a.size)
return a[rand_int].chop!
end
def generate_hidden_letters(word)
hidden_letters = Array.new
word.length.times do |i|
if rand(0..1) == 0 #do this 50% of the time
hidden_letters.push(word[i]) #create an array of letters to be hidden
end
end
return hidden_letters
end
def scramble_word(word, hidden_letters, scrambled_word)
hidden_letters.each do |letter| #for each hidden letter
word.length.times do |i|
if word[i] == letter #if you find one, replace it with a "_" in the string
scrambled_word[i] = "_"
end
end
end
return scrambled_word
end
def unscramble_word(word, guesses, scrambled_word)
guesses.each do |letter| #for each hidden letter
word.length.times do |i|
if word[i] == letter #if you find one, replace it with a "_" in the string
scrambled_word[i] = letter
end
end
end
return scrambled_word
end
a = Array.new
dict = File.open('5desk.txt')
dict.each do |row|
a.push(row)
end
#picking a word between 5 and 12 characters long
word = pick_word(a)
until word.length.between?(5, 12)
word = pick_word(a)
word.downcase!
end
#initialize some variables
guess = ""
guesses = Array.new
wrong_guesses = 0
scrambled_word = ""
scrambled_word << word
hidden_letters = generate_hidden_letters(word)
scrambled_word = scramble_word(word, hidden_letters, scrambled_word)
puts "Word is #{word}"
while true
#puts the array as a readable string
puts scrambled_word.inspect[1...-1].gsub('"',"").gsub(',','')
#check game end conditions
if hidden_letters.size == 0
puts "YOU WIN"
exit
end
if wrong_guesses > 5
puts "YOU HANG"
exit
end
#get player input
print "Guess a letter: "
guess = gets.chop
unless guesses.include?(guess) #keep track of previous guesses
guesses.push(guess)
end
#if guess is wrong, add another piece to the hangman
unless word.include?(guess)
wrong_guesses = wrong_guesses + 1
end
print "Guesses: #{guesses.inspect[1...-1].gsub('"',"").gsub(',','')}\n\n"
scrambled_word = unscramble_word(word, guesses, scrambled_word)
hidden_letters.delete(guess)
end
#if input is included in word but not hidden word then
#if word[x] == input then hidden[x] == input
#do this over the array
#if guess == a hidden letter
# fill in that letter
#else
# increase hangman counter