From 9d12baecb0ce557db38481617eb1cde9203f3016 Mon Sep 17 00:00:00 2001 From: Shaunna Date: Thu, 17 Aug 2017 13:50:19 -0700 Subject: [PATCH 01/14] [#JE/SW] Initial commit --- word_guess.rb | 1 + 1 file changed, 1 insertion(+) create mode 100644 word_guess.rb diff --git a/word_guess.rb b/word_guess.rb new file mode 100644 index 0000000..f542a29 --- /dev/null +++ b/word_guess.rb @@ -0,0 +1 @@ +#This is the word-guess project From 161faa9abfc810e9b40c20c5c0a596b3c72bce98 Mon Sep 17 00:00:00 2001 From: Shaunna Date: Thu, 17 Aug 2017 14:23:55 -0700 Subject: [PATCH 02/14] [JE/SW] made initial classes --- word_guess.rb | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/word_guess.rb b/word_guess.rb index f542a29..c1774b3 100644 --- a/word_guess.rb +++ b/word_guess.rb @@ -1 +1,40 @@ #This is the word-guess project + +class Game + attr_reader :level + + def initialize + + end + + def level + +end #of class Game + +# +class Card + + def initialize(word) + @word = word + @guess = nil + + end + + def get_guess + puts "What would you like to guess?" + @guess = gets.chomp + end + + def verify_guess + if @guess.length.to_i == @word.length.to_i + end + end + +end #of class Card + +class AsciiArt + + def initialize + end + +end #of class AsciiArt From 18b8e8f3a8ef14e9f502f4243e0236ce02deb807 Mon Sep 17 00:00:00 2001 From: Shaunna Date: Thu, 17 Aug 2017 14:53:53 -0700 Subject: [PATCH 03/14] "[JE/SW] DAY 1: Introduction" --- word_guess.rb | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/word_guess.rb b/word_guess.rb index c1774b3..720c452 100644 --- a/word_guess.rb +++ b/word_guess.rb @@ -8,6 +8,8 @@ def initialize end def level + "What level would you like to play at?" + end end #of class Game @@ -16,8 +18,8 @@ class Card def initialize(word) @word = word - @guess = nil - + @guess = nil #guess is the variable to store user input + @guess_type = "invalid" end def get_guess @@ -25,8 +27,11 @@ def get_guess @guess = gets.chomp end - def verify_guess + #guess types: actual word, a letter, or invalid(guessing too many letters, guessing a number) + def get_guess_type if @guess.length.to_i == @word.length.to_i + return @guess + end end @@ -38,3 +43,17 @@ def initialize end end #of class AsciiArt + + +#START OF GAME____________ + +introduction = < Date: Thu, 17 Aug 2017 15:54:18 -0700 Subject: [PATCH 04/14] [JE/SW] Game Class completed, Working on Card Class --- word_guess.rb | 54 +++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 44 insertions(+), 10 deletions(-) diff --git a/word_guess.rb b/word_guess.rb index 720c452..03d25ea 100644 --- a/word_guess.rb +++ b/word_guess.rb @@ -4,22 +4,41 @@ class Game attr_reader :level def initialize - + @word_bank = %W[Mercury Venus Mars Earth] end - def level - "What level would you like to play at?" + def get_level + puts "Let's get started! You have access to three levels: Easy, Medium, and Hard. \n\nNOTE: Easy gives you 10 guesses; Medium gives you 5 guesses, and Hard gives you only 3 guesses. Ready to play?" + + puts "Please enter your level choice below:" + + level_choice = gets.chomp end + def generate_word + return @word_bank.sample + end end #of class Game -# + class Card + attr_reader :word, :word_showing + def initialize(word) @word = word @guess = nil #guess is the variable to store user input @guess_type = "invalid" + @word_showing = build_initial_word_array.join + @guess_count = 0 + end + + def build_initial_word_array + array = [] + @word.length.times do + array << " ____ " + end + return array end def get_guess @@ -28,9 +47,15 @@ def get_guess end #guess types: actual word, a letter, or invalid(guessing too many letters, guessing a number) - def get_guess_type - if @guess.length.to_i == @word.length.to_i - return @guess + def check_guess + if @guess.length.to_i == @word.length.to_i #if user is guessing word + if @guess == @word + print "YAY! CONGRATS! #{@word.upcase} IS CORRECT!" + else + print "Sorry, that was incorrect!" + + end + end end end @@ -42,18 +67,27 @@ class AsciiArt def initialize end + def level_easy_initial + puts "" + end + end #of class AsciiArt #START OF GAME____________ -introduction = < Date: Thu, 17 Aug 2017 16:59:12 -0700 Subject: [PATCH 05/14] [JE/SW] Completed Card Class basic methods, still needing loops and user entry verification, guess count termination --- word_guess.rb | 58 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/word_guess.rb b/word_guess.rb index 03d25ea..8ed0cb7 100644 --- a/word_guess.rb +++ b/word_guess.rb @@ -4,11 +4,11 @@ class Game attr_reader :level def initialize - @word_bank = %W[Mercury Venus Mars Earth] + @word_bank = %W[MERCURY VENUS MARS EARTH] end def get_level - puts "Let's get started! You have access to three levels: Easy, Medium, and Hard. \n\nNOTE: Easy gives you 10 guesses; Medium gives you 5 guesses, and Hard gives you only 3 guesses. Ready to play?" + puts "Let's get started! You have access to three levels: Easy, Medium, and Hard. \n\nNOTE: Easy gives you 5 missed guesses; Medium gives you 4 guesses, and Hard gives you only 3 guesses. Ready to play?" puts "Please enter your level choice below:" @@ -26,11 +26,12 @@ class Card attr_reader :word, :word_showing def initialize(word) - @word = word + @word = word.upcase @guess = nil #guess is the variable to store user input @guess_type = "invalid" @word_showing = build_initial_word_array.join - @guess_count = 0 + @missed_count = 0 + @word_array = @word.split("") #Check at end if this is used more than in the guess method... if not... delete! end def build_initial_word_array @@ -46,32 +47,42 @@ def get_guess @guess = gets.chomp end - #guess types: actual word, a letter, or invalid(guessing too many letters, guessing a number) + #guess types: actual word, a letter, or invalid(guessing too many letters, guessing a number) def check_guess - if @guess.length.to_i == @word.length.to_i #if user is guessing word - if @guess == @word + if @guess.length.to_i == @word.length.to_i #IF USER GUESSES A WORD + if @guess.upcase == @word print "YAY! CONGRATS! #{@word.upcase} IS CORRECT!" else print "Sorry, that was incorrect!" - + @missed_count += 1 end - end - end - end -end #of class Card + elsif @guess.length == 1 #IF USER GUESSES A LETTER + if @word.include?(@guess) #if guessed letter exists in generated word array, iterate over word array to check if letter matches + @word_array.each do |element| + if element == @guess.upcase#letter + letter_index = @word_array.index(element) + @word_showing[letter_index] = element #resetting "__" to element which is the guessed letter + end + end#of word_array loop + else #if guessed letter does not exist, then increment guess count + @missed_count += 1 + end + end + end #of class Card +end -class AsciiArt + class AsciiArt - def initialize - end + def initialize + end - def level_easy_initial - puts "" - end + def level_easy_initial + puts "" + end -end #of class AsciiArt + end #of class AsciiArt #START OF GAME____________ @@ -82,12 +93,17 @@ def level_easy_initial YES - puts introduction game1 = Game.new -game1.get_level #card may need to know level type +# game1.get_level #card may need to know level type card1 = Card.new(game1.generate_word) +puts card1.word puts card1.word_showing +card1.get_guess +card1.check_guess +puts card1.word_showing + + # This card1.word will read the card's word From 300a7b3069de43724dcbfb7c85530762bd71e073 Mon Sep 17 00:00:00 2001 From: Shaunna Date: Thu, 17 Aug 2017 18:34:24 -0700 Subject: [PATCH 06/14] [JE/SW] We did a lot! Now it's late and we're going home. Tomorrow: handle missed & invalid guesses and control flow + ascii artgit add word_guess.rb --- word_guess.rb | 68 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 47 insertions(+), 21 deletions(-) diff --git a/word_guess.rb b/word_guess.rb index 8ed0cb7..0f57a57 100644 --- a/word_guess.rb +++ b/word_guess.rb @@ -1,18 +1,33 @@ #This is the word-guess project class Game - attr_reader :level + attr_reader :max_missed_guesses def initialize @word_bank = %W[MERCURY VENUS MARS EARTH] + get_level_and_max_misses end - def get_level - puts "Let's get started! You have access to three levels: Easy, Medium, and Hard. \n\nNOTE: Easy gives you 5 missed guesses; Medium gives you 4 guesses, and Hard gives you only 3 guesses. Ready to play?" + def get_level_and_max_misses + puts "You have access to three levels: Easy, Medium, and Hard. \n\nNOTE: \n* Easy gives you 5 missed guesses \n* Medium gives you 4 guesses\n* Hard gives you only 3 guesses. \n\nReady to play?" + + puts "\nPlease enter your level choice below:" + + level_choice = gets.chomp.downcase + + case level_choice + when "easy" + @max_missed_guesses = 5 + when "medium" + @max_missed_guesses = 4 + when "hard" + @max_missed_guesses = 3 + else + puts "I'm sorry. I didn't understand. " + get_level_and_max_misses + end - puts "Please enter your level choice below:" - level_choice = gets.chomp end def generate_word @@ -23,28 +38,28 @@ def generate_word class Card - attr_reader :word, :word_showing + attr_reader :word, :word_showing, :missed_count def initialize(word) @word = word.upcase @guess = nil #guess is the variable to store user input @guess_type = "invalid" - @word_showing = build_initial_word_array.join + @word_showing = build_blank_word_array @missed_count = 0 @word_array = @word.split("") #Check at end if this is used more than in the guess method... if not... delete! end - def build_initial_word_array + def build_blank_word_array array = [] @word.length.times do - array << " ____ " + array << " _ " end return array end def get_guess puts "What would you like to guess?" - @guess = gets.chomp + @guess = gets.chomp.upcase end #guess types: actual word, a letter, or invalid(guessing too many letters, guessing a number) @@ -60,11 +75,13 @@ def check_guess elsif @guess.length == 1 #IF USER GUESSES A LETTER if @word.include?(@guess) #if guessed letter exists in generated word array, iterate over word array to check if letter matches + puts "YES! It DOES include #{@guess}!" + i = 0 @word_array.each do |element| - if element == @guess.upcase#letter - letter_index = @word_array.index(element) - @word_showing[letter_index] = element #resetting "__" to element which is the guessed letter + if @guess == element #letter + @word_showing[i] = "#{element} " #resetting "__" to element which is the guessed letter end + i += 1 end#of word_array loop else #if guessed letter does not exist, then increment guess count @missed_count += 1 @@ -73,7 +90,7 @@ def check_guess end #of class Card end - class AsciiArt +class AsciiArt def initialize end @@ -95,15 +112,24 @@ def level_easy_initial puts introduction -game1 = Game.new -# game1.get_level #card may need to know level type +game1 = Game.new #get user input for level + card1 = Card.new(game1.generate_word) -puts card1.word -puts card1.word_showing -card1.get_guess -card1.check_guess -puts card1.word_showing +while true + puts card1.word #test: view word + puts card1.word_showing.join + card1.get_guess + card1.check_guess + puts card1.missed_count + puts card1.word_showing.join + puts "Would you like to make another guess?" + response = gets.chomp.upcase + if response == "NO" + exit + end +end +# level_choice = game1.get_level #card may need to know level type # This card1.word will read the card's word From 5ace97b97013f5a2af5500cc432621b9066905a7 Mon Sep 17 00:00:00 2001 From: Shaunna Date: Fri, 18 Aug 2017 13:31:23 -0700 Subject: [PATCH 07/14] [JE/SW] Combined classes to just one. Working on level choice. --- word_guess.rb | 96 ++++++++++++++++++++++----------------------------- 1 file changed, 41 insertions(+), 55 deletions(-) diff --git a/word_guess.rb b/word_guess.rb index 0f57a57..b9b98fd 100644 --- a/word_guess.rb +++ b/word_guess.rb @@ -1,11 +1,20 @@ #This is the word-guess project -class Game - attr_reader :max_missed_guesses +class WordGame + + attr_reader :word, :word_showing, :missed_count, :letters_guessed, :words_guessed def initialize - @word_bank = %W[MERCURY VENUS MARS EARTH] + @word_bank = %W[APPLE, SANDWICH, PICNIC, BASKET, ANTS, BLANKET, IDYLLIC, MOUNTAINS, LAKE, SUMMMER, FRIENDS, FAMILY] get_level_and_max_misses + @word = @word_bank.sample + @guess = nil #guess is the variable to store user input + @guess_type = "invalid" + @word_showing = build_blank_word_array + @missed_count = 0 + @word_array = @word.split("") #Check at end if this is used more than in the guess method... if not... delete! + @letters_guessed = [] + @words_guessed = [] end def get_level_and_max_misses @@ -16,37 +25,17 @@ def get_level_and_max_misses level_choice = gets.chomp.downcase case level_choice - when "easy" - @max_missed_guesses = 5 - when "medium" - @max_missed_guesses = 4 - when "hard" - @max_missed_guesses = 3 - else - puts "I'm sorry. I didn't understand. " - get_level_and_max_misses + when "easy" + @max_missed_guesses = 5 + + when "medium" + @max_missed_guesses = 4 + when "hard" + @max_missed_guesses = 3 + else + puts "I'm sorry. I didn't understand. " + get_level_and_max_misses end - - - end - - def generate_word - return @word_bank.sample - end -end #of class Game - - -class Card - - attr_reader :word, :word_showing, :missed_count - - def initialize(word) - @word = word.upcase - @guess = nil #guess is the variable to store user input - @guess_type = "invalid" - @word_showing = build_blank_word_array - @missed_count = 0 - @word_array = @word.split("") #Check at end if this is used more than in the guess method... if not... delete! end def build_blank_word_array @@ -71,11 +60,9 @@ def check_guess print "Sorry, that was incorrect!" @missed_count += 1 end - - elsif @guess.length == 1 #IF USER GUESSES A LETTER if @word.include?(@guess) #if guessed letter exists in generated word array, iterate over word array to check if letter matches - puts "YES! It DOES include #{@guess}!" + puts "YES! It DOES include #{@guess}!" i = 0 @word_array.each do |element| if @guess == element #letter @@ -88,18 +75,19 @@ def check_guess end end end #of class Card -end - -class AsciiArt - - def initialize - end - def level_easy_initial - puts "" - end +end - end #of class AsciiArt +# class AsciiArt +# +# def initialize +# end +# +# def level_easy_initial +# puts "" +# end +# +# end #of class AsciiArt #START OF GAME____________ @@ -112,17 +100,15 @@ def level_easy_initial puts introduction -game1 = Game.new #get user input for level - -card1 = Card.new(game1.generate_word) +game1 = WordGame.new #get user input for level while true - puts card1.word #test: view word - puts card1.word_showing.join - card1.get_guess - card1.check_guess - puts card1.missed_count - puts card1.word_showing.join + puts game1.word #test: view word + puts game1.word_showing.join + game1.get_guess + game1.check_guess + puts game1.missed_count + puts game1.word_showing.join puts "Would you like to make another guess?" response = gets.chomp.upcase if response == "NO" From 22c8a99a7ef35718d2c637d957901cc99222d0be Mon Sep 17 00:00:00 2001 From: Shaunna Date: Fri, 18 Aug 2017 15:15:42 -0700 Subject: [PATCH 08/14] [JE/SW] Committing check_guess version where it compares @guess.length --- word_guess.rb | 76 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 45 insertions(+), 31 deletions(-) diff --git a/word_guess.rb b/word_guess.rb index b9b98fd..7b5d1e3 100644 --- a/word_guess.rb +++ b/word_guess.rb @@ -1,41 +1,31 @@ #This is the word-guess project +require 'terminal-table' + class WordGame - attr_reader :word, :word_showing, :missed_count, :letters_guessed, :words_guessed + attr_reader :word, :word_showing, :letters_guessed, :words_guessed, :level_choice def initialize - @word_bank = %W[APPLE, SANDWICH, PICNIC, BASKET, ANTS, BLANKET, IDYLLIC, MOUNTAINS, LAKE, SUMMMER, FRIENDS, FAMILY] - get_level_and_max_misses - @word = @word_bank.sample + @word_bank = %W[APPLE SANDWICH PICNIC BASKET ANTS BLANKET IDYLLIC MOUNTAINS LAKE SUMMMER FRIENDS FAMILY] + @level_choice = get_level + @word = @word_bank.sample #generates the word @guess = nil #guess is the variable to store user input - @guess_type = "invalid" @word_showing = build_blank_word_array - @missed_count = 0 @word_array = @word.split("") #Check at end if this is used more than in the guess method... if not... delete! @letters_guessed = [] @words_guessed = [] end - def get_level_and_max_misses + def get_level puts "You have access to three levels: Easy, Medium, and Hard. \n\nNOTE: \n* Easy gives you 5 missed guesses \n* Medium gives you 4 guesses\n* Hard gives you only 3 guesses. \n\nReady to play?" - puts "\nPlease enter your level choice below:" level_choice = gets.chomp.downcase - - case level_choice - when "easy" - @max_missed_guesses = 5 - - when "medium" - @max_missed_guesses = 4 - when "hard" - @max_missed_guesses = 3 - else - puts "I'm sorry. I didn't understand. " - get_level_and_max_misses + until level_choice == "easy" || level_choice == "medium" || level_choice == "hard" + level_choice = self.get_level end + return level_choice end def build_blank_word_array @@ -54,6 +44,7 @@ def get_guess #guess types: actual word, a letter, or invalid(guessing too many letters, guessing a number) def check_guess if @guess.length.to_i == @word.length.to_i #IF USER GUESSES A WORD + @words_guessed << @guess if @guess.upcase == @word print "YAY! CONGRATS! #{@word.upcase} IS CORRECT!" else @@ -70,8 +61,7 @@ def check_guess end i += 1 end#of word_array loop - else #if guessed letter does not exist, then increment guess count - @missed_count += 1 + else #if guessed letter does not exist, end end end #of class Card @@ -102,20 +92,44 @@ def check_guess game1 = WordGame.new #get user input for level -while true - puts game1.word #test: view word + +case game1.level_choice +when "easy" + guesses_remaining = 5 + puts "\e[H\e[2J" + puts "\n\n" + puts game1.word puts game1.word_showing.join + puts "guessed letters: #{game1.letters_guessed}" + puts "guessed words: #{game1.words_guessed}" + puts "remaining guesses: #{guesses_remaining}" game1.get_guess game1.check_guess - puts game1.missed_count - puts game1.word_showing.join - puts "Would you like to make another guess?" - response = gets.chomp.upcase - if response == "NO" - exit - end + +when "medium" + guesses_remaining = 4 +when "hard" + guesses_remaining = 3 +else + puts "I'm sorry. I didn't understand. " + get_level end +# while true +# puts "\e[H\e[2J" +# puts game1.word #test: view word +# puts game1.word_showing.join +# game1.get_guess +# game1.check_guess +# puts game1.missed_count +# puts game1.word_showing.join +# puts "Would you like to make another guess?" +# response = gets.chomp.upcase +# if response == "NO" +# exit +# end +# end + # level_choice = game1.get_level #card may need to know level type # This card1.word will read the card's word From 85c33eca0ff9c604caa37b4d50815484f5bd86fc Mon Sep 17 00:00:00 2001 From: Shaunna Date: Fri, 18 Aug 2017 15:36:25 -0700 Subject: [PATCH 09/14] [JE/SW] working on running easy method through class --- word_guess.rb | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/word_guess.rb b/word_guess.rb index 7b5d1e3..084297f 100644 --- a/word_guess.rb +++ b/word_guess.rb @@ -42,30 +42,35 @@ def get_guess end #guess types: actual word, a letter, or invalid(guessing too many letters, guessing a number) - def check_guess - if @guess.length.to_i == @word.length.to_i #IF USER GUESSES A WORD - @words_guessed << @guess + def check_guess_easy + @guesses_remaining = 5 + + if @guess.length.to_i > 1 + @words_guessed << @guess if @guess.upcase == @word print "YAY! CONGRATS! #{@word.upcase} IS CORRECT!" else print "Sorry, that was incorrect!" - @missed_count += 1 + @guesses_remaining -= 1 end elsif @guess.length == 1 #IF USER GUESSES A LETTER + @letters_guessed << @guess + if @word.include?(@guess) #if guessed letter exists in generated word array, iterate over word array to check if letter matches puts "YES! It DOES include #{@guess}!" + i = 0 @word_array.each do |element| if @guess == element #letter @word_showing[i] = "#{element} " #resetting "__" to element which is the guessed letter end i += 1 + end#of word_array loop else #if guessed letter does not exist, end end end #of class Card - end # class AsciiArt @@ -104,7 +109,10 @@ def check_guess puts "guessed words: #{game1.words_guessed}" puts "remaining guesses: #{guesses_remaining}" game1.get_guess - game1.check_guess + game1.check_guess_easy + puts "guessed letters: #{game1.letters_guessed}" + puts "guessed words: #{game1.words_guessed}" + puts "remaining guesses: #{guesses_remaining}" when "medium" guesses_remaining = 4 From 42336f1fd7ac78fc377a05e1618c3ade9be3067d Mon Sep 17 00:00:00 2001 From: Shaunna Date: Sat, 19 Aug 2017 12:28:01 -0700 Subject: [PATCH 10/14] [JE/SW] wrote easy loop block of code --- word_guess.rb | 61 ++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 43 insertions(+), 18 deletions(-) diff --git a/word_guess.rb b/word_guess.rb index 084297f..e811456 100644 --- a/word_guess.rb +++ b/word_guess.rb @@ -6,6 +6,8 @@ class WordGame attr_reader :word, :word_showing, :letters_guessed, :words_guessed, :level_choice + attr_accessor :stop_guessing, :guesses_remaining + def initialize @word_bank = %W[APPLE SANDWICH PICNIC BASKET ANTS BLANKET IDYLLIC MOUNTAINS LAKE SUMMMER FRIENDS FAMILY] @level_choice = get_level @@ -15,6 +17,7 @@ def initialize @word_array = @word.split("") #Check at end if this is used more than in the guess method... if not... delete! @letters_guessed = [] @words_guessed = [] + @stop_guessing = false end def get_level @@ -43,12 +46,12 @@ def get_guess #guess types: actual word, a letter, or invalid(guessing too many letters, guessing a number) def check_guess_easy - @guesses_remaining = 5 if @guess.length.to_i > 1 @words_guessed << @guess if @guess.upcase == @word print "YAY! CONGRATS! #{@word.upcase} IS CORRECT!" + win else print "Sorry, that was incorrect!" @guesses_remaining -= 1 @@ -67,11 +70,24 @@ def check_guess_easy i += 1 end#of word_array loop - else #if guessed letter does not exist, + else #if guessed letter does not exist + puts "Sorry, that letter does not exist!" + @guesses_remaining -= 1 end end - end #of class Card -end + end + + def win + #print AsciiArt of food + puts "YAY! YOU SAVED YOUR FAMILY'S PICNIC BASKET!!" + @stop_guessing = true + end + + def lose + puts "YOU LOSE! YOU LOSE! NO PICNIC FOR YOU!" + @stop_guessing = true + end +end #of WordGame clas # class AsciiArt # @@ -97,22 +113,30 @@ def check_guess_easy game1 = WordGame.new #get user input for level - case game1.level_choice -when "easy" - guesses_remaining = 5 +when "easy" #user only has 5 guesses puts "\e[H\e[2J" puts "\n\n" - puts game1.word - puts game1.word_showing.join - puts "guessed letters: #{game1.letters_guessed}" - puts "guessed words: #{game1.words_guessed}" - puts "remaining guesses: #{guesses_remaining}" - game1.get_guess - game1.check_guess_easy - puts "guessed letters: #{game1.letters_guessed}" - puts "guessed words: #{game1.words_guessed}" - puts "remaining guesses: #{guesses_remaining}" + game1.guesses_remaining = 5 + until game1.stop_guessing == true + puts game1.word + puts game1.word_showing.join + puts "guessed letters: #{game1.letters_guessed}" + puts "guessed words: #{game1.words_guessed}" + puts "remaining guesses: #{game1.guesses_remaining}\n" + game1.get_guess + game1.check_guess_easy + if game1.guesses_remaining <= 0 + game1.lose + end + end + + + #TABLE Idea + # headers = ["Guessed Letters", "Guessed Words", "Total Guesses Left"] + # rows = [game1.letters_guessed, game1.words_guessed, guesses_remaining] + # table = Terminal::Table.new :title => "WORD-GUESS SUMMARY", :headings => headers, :rows => rows + # puts table when "medium" guesses_remaining = 4 @@ -123,13 +147,14 @@ def check_guess_easy get_level end + # while true # puts "\e[H\e[2J" # puts game1.word #test: view word # puts game1.word_showing.join # game1.get_guess # game1.check_guess -# puts game1.missed_count +# puts game1.missed_countcd # puts game1.word_showing.join # puts "Would you like to make another guess?" # response = gets.chomp.upcase From eebc26710867fae0e04e091dffdfb03c07f397b5 Mon Sep 17 00:00:00 2001 From: Shaunna Date: Sat, 19 Aug 2017 13:04:03 -0700 Subject: [PATCH 11/14] [JE/SW] IT RUNS! IT RUNS! (We need Ascii art... and a table...) --- word_guess.rb | 81 +++++++++++++++++++++++++-------------------------- 1 file changed, 39 insertions(+), 42 deletions(-) diff --git a/word_guess.rb b/word_guess.rb index e811456..7661aa1 100644 --- a/word_guess.rb +++ b/word_guess.rb @@ -28,13 +28,24 @@ def get_level until level_choice == "easy" || level_choice == "medium" || level_choice == "hard" level_choice = self.get_level end - return level_choice + case level_choice + when "easy" + @guesses_remaining = 5 + when "medium" + @guesses_remaining = 4 + when "hard" + @guesses_remaining = 3 + else + get_level + end + + end def build_blank_word_array array = [] @word.length.times do - array << " _ " + array << "_" end return array end @@ -65,11 +76,11 @@ def check_guess_easy i = 0 @word_array.each do |element| if @guess == element #letter - @word_showing[i] = "#{element} " #resetting "__" to element which is the guessed letter + @word_showing[i] = "#{element}" #resetting "__" to element which is the guessed letter end i += 1 - end#of word_array loop + else #if guessed letter does not exist puts "Sorry, that letter does not exist!" @guesses_remaining -= 1 @@ -79,30 +90,22 @@ def check_guess_easy def win #print AsciiArt of food + puts "\e[H\e[2J" puts "YAY! YOU SAVED YOUR FAMILY'S PICNIC BASKET!!" @stop_guessing = true end def lose + puts "\e[H\e[2J" puts "YOU LOSE! YOU LOSE! NO PICNIC FOR YOU!" @stop_guessing = true end -end #of WordGame clas - -# class AsciiArt -# -# def initialize -# end -# -# def level_easy_initial -# puts "" -# end -# -# end #of class AsciiArt +end #of WordGame class #START OF GAME____________ +while true introduction = < "WORD-GUESS SUMMARY", :headings => headers, :rows => rows - # puts table -when "medium" - guesses_remaining = 4 -when "hard" - guesses_remaining = 3 -else - puts "I'm sorry. I didn't understand. " - get_level -end # while true -# puts "\e[H\e[2J" -# puts game1.word #test: view word -# puts game1.word_showing.join -# game1.get_guess -# game1.check_guess -# puts game1.missed_countcd -# puts game1.word_showing.join -# puts "Would you like to make another guess?" + # response = gets.chomp.upcase # if response == "NO" # exit @@ -166,3 +157,9 @@ def lose # level_choice = game1.get_level #card may need to know level type # This card1.word will read the card's word + +#TABLE Idea +# headers = ["Guessed Letters", "Guessed Words", "Total Guesses Left"] +# rows = [game1.letters_guessed, game1.words_guessed, guesses_remaining] +# table = Terminal::Table.new :title => "WORD-GUESS SUMMARY", :headings => headers, :rows => rows +# puts table From 7e4132e10a1106777b824aab7bafda2d986d7338 Mon Sep 17 00:00:00 2001 From: Shaunna Date: Sat, 19 Aug 2017 13:09:11 -0700 Subject: [PATCH 12/14] [JE/SW] now prompts user to enter a new answer if they put in a number --- word_guess.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/word_guess.rb b/word_guess.rb index 7661aa1..8c0dc9d 100644 --- a/word_guess.rb +++ b/word_guess.rb @@ -53,11 +53,14 @@ def build_blank_word_array def get_guess puts "What would you like to guess?" @guess = gets.chomp.upcase + while @guess[/^[a-zA-Z]+/] != @guess + puts "Please enter letters only!" + @guess = gets.chomp.upcase + end end #guess types: actual word, a letter, or invalid(guessing too many letters, guessing a number) def check_guess_easy - if @guess.length.to_i > 1 @words_guessed << @guess if @guess.upcase == @word From 8d0a87e5a8127fa6b34e0cfe627943586a4d82c5 Mon Sep 17 00:00:00 2001 From: Shaunna Date: Tue, 22 Aug 2017 08:32:29 -0700 Subject: [PATCH 13/14] [JE/SW] Final version including word art, table and spacing --- word_guess.rb | 124 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 80 insertions(+), 44 deletions(-) diff --git a/word_guess.rb b/word_guess.rb index 8c0dc9d..709fb59 100644 --- a/word_guess.rb +++ b/word_guess.rb @@ -1,7 +1,10 @@ #This is the word-guess project +require 'colorize' +require './word_guess_asciiart.rb' require 'terminal-table' +#One class to monitor the game class WordGame attr_reader :word, :word_showing, :letters_guessed, :words_guessed, :level_choice @@ -9,7 +12,7 @@ class WordGame attr_accessor :stop_guessing, :guesses_remaining def initialize - @word_bank = %W[APPLE SANDWICH PICNIC BASKET ANTS BLANKET IDYLLIC MOUNTAINS LAKE SUMMMER FRIENDS FAMILY] + @word_bank = %W[APPLE SANDWICH PICNIC BASKET ANTS BLANKET IDYLLIC MOUNTAINS LAKE SUMMER FRIENDS FAMILY FUN NATURE TREES SUN] @level_choice = get_level @word = @word_bank.sample #generates the word @guess = nil #guess is the variable to store user input @@ -18,16 +21,22 @@ def initialize @letters_guessed = [] @words_guessed = [] @stop_guessing = false + end def get_level - puts "You have access to three levels: Easy, Medium, and Hard. \n\nNOTE: \n* Easy gives you 5 missed guesses \n* Medium gives you 4 guesses\n* Hard gives you only 3 guesses. \n\nReady to play?" + puts "You have access to three levels: Easy, Medium, and Hard" + puts "\nNOTE: \n* Easy gives you 5 missed guesses \n* Medium gives you 4 guesses\n* Hard gives you only 3 guesses." + puts "\nREADY TO PLAY!?" puts "\nPlease enter your level choice below:" level_choice = gets.chomp.downcase + until level_choice == "easy" || level_choice == "medium" || level_choice == "hard" - level_choice = self.get_level + puts "Please enter a level: Easy, Medium, or Hard" + level_choice = gets.chomp.downcase end + case level_choice when "easy" @guesses_remaining = 5 @@ -35,32 +44,32 @@ def get_level @guesses_remaining = 4 when "hard" @guesses_remaining = 3 - else - get_level end - - end def build_blank_word_array array = [] @word.length.times do - array << "_" + array << "_" #currently does not have spaces end return array end def get_guess - puts "What would you like to guess?" + puts "\nWhat would you like to guess?" @guess = gets.chomp.upcase while @guess[/^[a-zA-Z]+/] != @guess puts "Please enter letters only!" @guess = gets.chomp.upcase end + while @letters_guessed.include?(@guess) + puts "You've already guessed that letter! Try again." + @guess = gets.chomp.upcase + end end #guess types: actual word, a letter, or invalid(guessing too many letters, guessing a number) - def check_guess_easy + def check_guess if @guess.length.to_i > 1 @words_guessed << @guess if @guess.upcase == @word @@ -79,7 +88,7 @@ def check_guess_easy i = 0 @word_array.each do |element| if @guess == element #letter - @word_showing[i] = "#{element}" #resetting "__" to element which is the guessed letter + @word_showing[i] = "#{element}" #resetting "__" element to guessed letter end i += 1 end#of word_array loop @@ -91,16 +100,32 @@ def check_guess_easy end end + def print_guesses_art + case @guesses_remaining + when 5 + return ONLY_BASKET + when 4 + return MISSED_GUESS1_ALERT1.colorize(:red).blink + MISSED_GUESS1 + when 3 + return MISSED_GUESS1_ALERT2.colorize(:red).blink + MISSED_GUESS2 + when 2 + return MISSED_GUESS1_ALERT3.colorize(:red).blink + MISSED_GUESS3 + when 1 + return MISSED_GUESS_FINAL_ALERT.colorize(:red).blink + MISSED_GUESS_FINAL + end + end + def win - #print AsciiArt of food puts "\e[H\e[2J" puts "YAY! YOU SAVED YOUR FAMILY'S PICNIC BASKET!!" + puts YOU_WIN #prints winner ascii art @stop_guessing = true end def lose puts "\e[H\e[2J" puts "YOU LOSE! YOU LOSE! NO PICNIC FOR YOU!" + puts YOU_LOSE #prints loser ascii art @stop_guessing = true end end #of WordGame class @@ -109,29 +134,61 @@ def lose #START OF GAME____________ while true -introduction = < "WORD-GUESS SUMMARY", :headings => headers, :rows => rows + + + table = Terminal::Table.new do |t| + t.add_row ["Guessed Letters", game1.letters_guessed.join( ", ").to_s] + t << :separator + t.add_row ["Guessed Words", game1.words_guessed.join(", ").to_s] + t << :separator + t.add_row ["Remaining Guesses", game1.guesses_remaining] + end + + puts table + game1.get_guess - game1.check_guess_easy + game1.check_guess if game1.guesses_remaining <= 0 game1.lose elsif game1.word_showing.join == game1.word @@ -139,30 +196,9 @@ def lose end end - puts "Would you like to play again?" + puts "Would you like to play again? (To exit, enter NO)" replay_response = gets.chomp.upcase if replay_response == "NO" exit end end - - - - -# while true - -# response = gets.chomp.upcase -# if response == "NO" -# exit -# end -# end - - -# level_choice = game1.get_level #card may need to know level type -# This card1.word will read the card's word - -#TABLE Idea -# headers = ["Guessed Letters", "Guessed Words", "Total Guesses Left"] -# rows = [game1.letters_guessed, game1.words_guessed, guesses_remaining] -# table = Terminal::Table.new :title => "WORD-GUESS SUMMARY", :headings => headers, :rows => rows -# puts table From 15f77b14c6e609a3ed2ecffd2cfb1a77366cd3fa Mon Sep 17 00:00:00 2001 From: Shaunna Date: Tue, 22 Aug 2017 08:33:27 -0700 Subject: [PATCH 14/14] [JE/SW] Ascii art file --- word_guess_asciiart.rb | 283 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 283 insertions(+) create mode 100644 word_guess_asciiart.rb diff --git a/word_guess_asciiart.rb b/word_guess_asciiart.rb new file mode 100644 index 0000000..c604e9b --- /dev/null +++ b/word_guess_asciiart.rb @@ -0,0 +1,283 @@ +#Ascii font (Modular) print source: http://patorjk.com/software/taag/#p=display&f=Modular&t=Word%20Guess + +#intro_art to be printed at top of introduction +INTRO_ART = </>'/ @ '. ,@@@@@@@@@@, (''' '' ''') + ( @ /_