Created
September 23, 2015 22:41
-
-
Save BrianDunlap89/dc65ba3102e06c82fd59 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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