Created
February 25, 2016 02:51
-
-
Save TonyNguyen87/5d72bc49e2fd205285dc to your computer and use it in GitHub Desktop.
tony 2player hangman
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
# Hangman 2.0 | |
## Data/Variables in the system | |
# * dictionary | |
# * guesses | |
# * turn_count | |
# * answer | |
## Open Questions | |
# How do we show progress? letter pool (alphabet - guesses) | |
## Behaviors/Actions are in the system | |
# * greeting / rules | |
# * until the game over | |
# * show them the current game state/progress | |
# * ask them for a guess | |
# * do bookkeeping | |
# * tell them what happened | |
require "pry" | |
require "set" | |
MAX_TURNS = 7 | |
WORD_LIST = [ | |
"puppies", "iron", "yard", "beer", | |
"programmers", "coffee", "whiskey", "cigarettes", | |
"bacon", "vices", "gambling", "star", | |
"wars", "motorcycle", "elbow", "ruby" | |
] | |
# binding.pry | |
def greeting | |
puts | |
puts "Welcome to Hangman!" | |
puts "Please guess letters and get this over with." | |
puts "I'm too lazy to tell you the rules." | |
puts | |
end | |
def turns_left(guesses, answer) | |
wrong_guesses = guesses - answer.chars.to_set | |
MAX_TURNS - wrong_guesses.count | |
end | |
def win?(guesses, answer) | |
# Are all the letters in the answer are in guesses | |
guesses >= answer.chars.to_set | |
end | |
def lose?(guesses, answer) | |
turns_left(guesses, answer).zero? | |
end | |
def game_over?(guesses, answer) | |
win?(guesses, answer) || lose?(guesses, answer) | |
end | |
def intermediate_word(guesses, answer) | |
result = [] | |
answer.each_char do |letter| | |
if guesses.include?(letter) | |
result.push(letter) | |
else | |
result.push("-") | |
end | |
end | |
result.join | |
end | |
def show_progress(current_guess, current_player, answer) | |
puts | |
puts "#{current_player} | |
" | |
puts "You have #{turns_left(current_guess, answer)} turns left." | |
puts "You already guessed #{current_guess.to_a.join(", ")}." | |
puts "The word is: #{intermediate_word(current_guess, answer)}." | |
end | |
def take_turn(guesses) | |
puts "Please guess a letter: " | |
guess = gets.chomp.downcase | |
until ("a".."z").include?(guess) | |
puts "Guesses can only be one letter. Guess again: " | |
guess = gets.chomp.downcase | |
end | |
guess | |
end | |
def hangman | |
answer = WORD_LIST.sample | |
p1guesses = Set.new | |
p2guesses = Set.new | |
greeting | |
puts "Please enter Player 1 name:" | |
p1 = gets.chomp.upcase | |
puts "please enter Player 2 name:" | |
p2 = gets.chomp.upcase | |
current_player = p1 | |
current_guess = p1guesses | |
until game_over?(current_guess, answer) | |
show_progress(current_guess, current_player, answer) | |
guess = take_turn(current_guess) | |
current_guess.add(guess) | |
if current_player == p1 | |
current_player = p2 | |
current_guess = p2guesses | |
else | |
current_player = p1 | |
current_guess = p1guesses | |
end | |
end | |
postmortem(guesses, answer) | |
end | |
def postmortem(guesses, answer) | |
if win?(guesses, answer) | |
puts "Congratulations!!!! You're good at letters." | |
else | |
puts "Better luck next time. The word was: #{answer}." | |
end | |
end | |
def play_again? | |
puts "Want to play a game of Hangman? (y/n)" | |
choice = gets.chomp.downcase | |
until ["y", "n"].include?(choice) | |
puts "Please choose 'Y' or 'N'." | |
choice = gets.chomp.downcase | |
end | |
choice == "y" | |
end | |
def play | |
more = play_again? | |
while more | |
hangman | |
more = play_again? | |
end | |
end | |
play |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment