Skip to content

Instantly share code, notes, and snippets.

@BrianDunlap89
Created September 23, 2015 22:41
Show Gist options
  • Select an option

  • Save BrianDunlap89/dc65ba3102e06c82fd59 to your computer and use it in GitHub Desktop.

Select an option

Save BrianDunlap89/dc65ba3102e06c82fd59 to your computer and use it in GitHub Desktop.
require "pry"
require "set"
word_list = [
"chicken", "dog", "duck", "cat", "clown", "brick",
"bananas", "totalitarianism", "Wednesday", "chicanery",
"ruby", "evaluation", "consternation"
]
MAX_TURNS = 6
answer = word_list.sample.downcase
def p1_turns_left(p1_guesses, answer)
answer_set = answer.chars.to_set
wrong_guesses = p1_guesses.difference(answer_set).count
MAX_TURNS - wrong_guesses
end
def p2_turns_left(p2_guesses, answer)
answer_set = answer.chars.to_set
wrong_guesses = p2_guesses.difference(answer_set).count
MAX_TURNS - wrong_guesses
end
def greeting
puts "Welcome to Hangman!\n"
puts "I'm not even going to explain it."
puts "All you do is guess a letter, dummy."
end
def game_over?(answer, p1_guesses, p2_guesses)
p1_turns_left(p1_guesses, answer).zero? || p1_win?(answer, p1_guesses) || (p2_turns_left(p2_guesses, answer).zero? || p2_win?(answer, p2_guesses))
end
def p1_show_progress(p1_partial_word, answer, p1_guesses)
turns_remaining = p1_turns_left(p1_guesses, answer)
puts
puts "The current word is: #{p1_partial_word}"
puts "You have #{turns_remaining} guesses left."
end
def p2_show_progress(p2_partial_word, answer, p2_guesses)
turns_remaining = p2_turns_left(p2_guesses, answer)
puts
puts "The current word is: #{p2_partial_word}"
puts "You have #{turns_remaining} guesses left."
end
def prompt_player_1
puts
puts "Player 1, please guess a letter: "
guess = gets.chomp
unless ('a'..'z').to_a.include?(guess)
puts "#{guess} is not a valid character. Please guess a single letter:"
guess = gets.chomp
end
guess
end
def prompt_player_2
puts
puts "Player 2, please guess a letter: "
guess = gets.chomp
unless ('a'..'z').to_a.include?(guess)
puts "#{guess} is not a valid character. Please guess a single letter:"
guess = gets.chomp
end
guess
end
def p1_make_partial(p1_guesses, answer)
answer.chars.map do |letter|
if p1_guesses.include?(letter)
letter
else
"_"
end
end
end
def p2_make_partial(p2_guesses, answer)
answer.chars.map do |letter|
if p2_guesses.include?(letter)
letter
else
"_"
end
end
end
def p1_win?(answer, p1_guesses)
answer_set = answer.chars.to_set
p1_guesses >= answer_set # contents of guesses is greater than or equal to
# the contents of answer_set
end
def p2_win?(answer, p2_guesses)
answer_set = answer.chars.to_set
p2_guesses >= answer_set # contents of guesses is greater than or equal to
# the contents of answer_set
end
# Variants:
# guesses.superset?(answer_set)
# answer_set.subset?(guesses)
# answer.chars.all? do |letter|
# guesses.include?(letter)
# winner = true
# answer.chars.each do |letter|
# winner = false unless guesses.include?(letter)
# end
# winner
def p1_take_turn(p1_guesses, answer)
p1_partial_word = p1_make_partial(p1_guesses, answer).join
p1_show_progress(p1_partial_word, answer, p1_guesses) # Could also do partial_word.join
prompt_player_1
end
def p2_take_turn(p2_guesses, answer)
p2_partial_word = p2_make_partial(p2_guesses, answer).join
p2_show_progress(p2_partial_word, answer, p2_guesses) # Could also do partial_word.join
prompt_player_2
end
def play_again?(word_list)
response = feedback
until response == "N"
hangman(word_list.sample)
response = feedback
end
puts "\nGoodbye!"
end
def feedback
puts "Would you like to play again? 'Y'es or 'N'o."
gets.chomp.upcase
end
def postmortem(answer, p1_guesses, p2_guesses, player1, player2)
if p1_win?(answer, p1_guesses)
puts "\nNice work, #{player1}! You win."
elsif p2_win?(answer, p2_guesses)
puts "\nNice work, #{player2}! You win."
else
puts "You both lose! The word was #{answer}"
end
end
# refresh function
# play again prompt function
def hangman(answer)
p1_guesses = Set.new
p2_guesses = Set.new
# guesses = Set.new
greeting
puts "Who's going to be player 1?"
player1 = gets.chomp
puts "Who's going to be player 2?"
player2 = gets.chomp
until game_over?(answer, p1_guesses, p2_guesses)
#guess = p1_take_turn(guesses, answer)
p1_guess = p1_take_turn(p1_guesses, answer)
# guesses.add(guess)
p1_guesses.add(p1_guess)
# turns_left(guesses, answer)
p1_turns_left(p1_guesses, answer)
# guess = p2_take_turn(guesses, answer)
p2_guess = p2_take_turn(p2_guesses, answer)
# guesses.add(guess)
p2_guesses.add(p2_guess)
p2_turns_left(p2_guesses, answer)
end
postmortem(answer, p1_guesses, p2_guesses, player1, player2)
end
hangman(answer)
play_again?(word_list)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment