From c2a9a19ceed4aeecba2a6b4ed716bfd8ba9c9a3b Mon Sep 17 00:00:00 2001 From: Kelly Souza Date: Thu, 16 Feb 2017 15:48:20 -0800 Subject: [PATCH 1/9] WIP - getting started --- word_guess.rb | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 word_guess.rb diff --git a/word_guess.rb b/word_guess.rb new file mode 100644 index 0000000..7ea77dc --- /dev/null +++ b/word_guess.rb @@ -0,0 +1,43 @@ +# Monalisa and Kelly's word guess game +require 'Faker' + + +class Game + attr_accessor :word, :letter, :board + + def initialize + @attempts = 0 + @board = [] + @letter = :letter + @word = ["happy", "coders"].sample + puts @word + end + + + def display + @word.length.times do + @board << "_" + end + print @board + end + + def get_letter + puts "Guess the letter:" + @letter = gets.chomp.downcase + if @letter.match(/^[a-z]$/) + puts "valid guess" + else + puts "invalid" + end + + end +end +# +# def make_guess +# if make_guess = "correct" +# puts "" +# end + +game1 = Game.new +game1.display +game1.get_letter From b7ed975310b7a7dea06b51a8fa29dc70d631d64f Mon Sep 17 00:00:00 2001 From: Kelly Souza Date: Thu, 16 Feb 2017 17:00:28 -0800 Subject: [PATCH 2/9] WIP - add methods up to showing index --- word_guess.rb | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/word_guess.rb b/word_guess.rb index 7ea77dc..c9a4251 100644 --- a/word_guess.rb +++ b/word_guess.rb @@ -11,6 +11,9 @@ def initialize @letter = :letter @word = ["happy", "coders"].sample puts @word + @petals = 5 + @guess_letters = [] + @answer_array = [] end @@ -26,11 +29,50 @@ def get_letter @letter = gets.chomp.downcase if @letter.match(/^[a-z]$/) puts "valid guess" + push_guess_letters + @attempts += 1 + if match_letter + puts "YES!!" + modify_board + else + puts "NO" + drop_flower + end else - puts "invalid" + puts "invalid: Try again." end + end + + def match_letter + @answer_array = @word.split("") + puts @answer_array + return @answer_array.include?(@letter) + end + + + def drop_flower + while @petals > 0 + flower = @petals - @attempts + puts flower + return flower + end + end + + def push_guess_letters + @guess_letters.push(letter) + puts @guess_letters end + + def modify_board + puts "HERE" + puts @answer_array.index{|x|x==@letter} + + end + + + + end # # def make_guess From bcd9608b6150ec86a1279b497ea0126863c7472e Mon Sep 17 00:00:00 2001 From: Kelly Souza Date: Fri, 17 Feb 2017 13:05:34 -0800 Subject: [PATCH 3/9] Working word guess game. --- word_guess.rb | 237 ++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 199 insertions(+), 38 deletions(-) diff --git a/word_guess.rb b/word_guess.rb index c9a4251..9bfde6c 100644 --- a/word_guess.rb +++ b/word_guess.rb @@ -1,5 +1,7 @@ # Monalisa and Kelly's word guess game require 'Faker' +require 'colorize' +require 'colorized_string' class Game @@ -9,77 +11,236 @@ def initialize @attempts = 0 @board = [] @letter = :letter - @word = ["happy", "coders"].sample - puts @word + @word = ["Dog","Cat","Apple","Bear","Zoo","Coconut","Pineapple","Cake","Book","Smile"].sample.upcase + # puts @word @petals = 5 + @petals_left = 5 @guess_letters = [] @answer_array = [] + @incorrect_attempts = 0 + @imatch = [] + # pick_word + create_board + end + # + # def pick_word + # @word = ["Dog","Cat","Apple","Bear","Zoo","Coconut","Pineapple","Cake","Book","Smile"].sample.downcase + # end + def create_board + @word.length.times { @board << "_"} + end - def display - @word.length.times do - @board << "_" - end + def display_board print @board end + def get_letter - puts "Guess the letter:" - @letter = gets.chomp.downcase - if @letter.match(/^[a-z]$/) - puts "valid guess" - push_guess_letters - @attempts += 1 - if match_letter - puts "YES!!" - modify_board + if @petals_left > 0 + + + show_flower + display_board + puts "\nGuess the letter:" + @letter = gets.chomp.upcase + + if @letter.match(/^[A-Z]$/) + + if find_duplicates + puts "You already tried that letter!" + puts "Try again (no penalties)." + + else + push_guess_letters + @attempts += 1 + if match_letter + puts "YES! That letter is in the word!" + modify_board + check_for_win + else + puts "Nope! That letter is not in the word!" + @incorrect_attempts += 1 + drop_flower + end + end else - puts "NO" - drop_flower + puts "Oops,that is not valid input, please try again." end - else - puts "invalid: Try again." + # puts "@@@@@@@" + puts @petal end end + def show_answer + print "The answer was #{@word}!" + puts + end + def match_letter @answer_array = @word.split("") - puts @answer_array return @answer_array.include?(@letter) end + def find_duplicates + if @guess_letters.include?(@letter) + return true + else + return false + end + end + + def check_for_win + if !@board.include?("_") + display_board + puts "\nCongratulations, you got all the letters." + show_answer + puts "You beat Word Guess!!!" + exit + end + end + + + + def display + print @board + # print ascii art + flower #puts "\npetals = #{@petals}" + end + + def show_flower() + case @petals_left + when 5 + puts """ + (@)(@)(@)(@)(@) + ,\\,\\,|,/,/, + _\\|/_ + |_____| + | | + |___| + """.green + when 4 + puts """ + (@)(@)(@)(@) + ,\\,\\,|,/,/, + _\\|/_ + |_____| + | | + |___| + """.yellow + when 3 + puts """ + (@)(@)(@) + ,\\,\\,|,/,/, + _\\|/_ + |_____| + | | + |___| + """.red + when 2 + puts """ + (@)(@) + ,\\,\\,|,/,/, + _\\|/_ + |_____| + | | + |___| + """.red + when 1 + puts """ + (@) + ,\\,\\,|,/,/, + _\\|/_ + |_____| + | | + |___| + """.light_red + when 0 + puts """ + + ,\\,\\,|,/,/, + _\\|/_ + |_____| + | | + |___| + """.red + + end + end + + + + + + + + + + + + + # def match_multiple_letters + # @occurance = @answer_array.count(@letter) + # @occurance.times do + # + + + def drop_flower - while @petals > 0 - flower = @petals - @attempts - puts flower - return flower + if @petals_left > 1 + @petals_left = @petals - @incorrect_attempts + # show_flower + return @petals_left + else + @petals_left = 0 + show_flower + puts "Your flowers are all dead." + show_answer + puts "GAME OVER" + exit end end def push_guess_letters - @guess_letters.push(letter) - puts @guess_letters + @guess_letters.push(@letter) end def modify_board - puts "HERE" - puts @answer_array.index{|x|x==@letter} - + @imatch = @answer_array.each_index.select{|i| @answer_array[i] == @letter} + # puts @imatch + @imatch.each do + |i| @board[i] = @letter + end + # print @board + # puts "index stuff" end +end + +#START GAME +puts "Would you like to play Word Guess?" +play_game = gets.chomp.downcase + +if play_game == "yes" + game1 = Game.new +elsif play_game == "no" + puts "Ok, come again soon!" + exit +else + puts "Oops, try again" end -# -# def make_guess -# if make_guess = "correct" -# puts "" -# end - -game1 = Game.new -game1.display -game1.get_letter + +still_playing = true +while still_playing + + game1.get_letter +end + +# game1.display +# game1.get_letter From 30855823d00ea303dee75b10695a16c6e7659011 Mon Sep 17 00:00:00 2001 From: Kelly Souza Date: Fri, 17 Feb 2017 13:51:25 -0800 Subject: [PATCH 4/9] colorize and improve visuals --- word_guess.rb | 45 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/word_guess.rb b/word_guess.rb index 9bfde6c..2c26d14 100644 --- a/word_guess.rb +++ b/word_guess.rb @@ -2,6 +2,7 @@ require 'Faker' require 'colorize' require 'colorized_string' +require 'rainbow' class Game @@ -19,6 +20,7 @@ def initialize @answer_array = [] @incorrect_attempts = 0 @imatch = [] + @word_guess # pick_word create_board @@ -36,6 +38,21 @@ def display_board print @board end + def check_guess + if @word == @letter + puts "\nCongratulations, you got all the letters.".green + show_answer + show_flower + puts "You beat Word Guess!!!".green + end + end + + + # def give_hint + # index = @answer_array.index(@letter) + # if @board[index] = '~' + # puts + def get_letter if @petals_left > 0 @@ -43,7 +60,11 @@ def get_letter show_flower display_board - puts "\nGuess the letter:" + puts ("\nYou have guessed these letters: + #{@guess_letters}.").blue + puts "Please guess the word or another letter?" + check_guess + @letter = gets.chomp.upcase if @letter.match(/^[A-Z]$/) @@ -51,22 +72,24 @@ def get_letter if find_duplicates puts "You already tried that letter!" puts "Try again (no penalties)." - else push_guess_letters @attempts += 1 + if match_letter puts "YES! That letter is in the word!" + puts "=".green * 60 modify_board check_for_win else puts "Nope! That letter is not in the word!" + puts "=".red * 60 @incorrect_attempts += 1 drop_flower end end else - puts "Oops,that is not valid input, please try again." + puts "Oops,that is not valid input, please try again.".red end # puts "@@@@@@@" puts @petal @@ -103,11 +126,11 @@ def check_for_win - def display - print @board - # print ascii art - flower #puts "\npetals = #{@petals}" - end + # def display + # print @board + # # print ascii art + # flower #puts "\npetals = #{@petals}" + # end def show_flower() case @petals_left @@ -141,16 +164,18 @@ def show_flower() when 2 puts """ (@)(@) - ,\\,\\,|,/,/, + ,\\,\\,|,/,/, _\\|/_ |_____| | | |___| """.red when 1 + puts "Hint:" + print @answer_array[0] puts """ (@) - ,\\,\\,|,/,/, + ,\\,\\,|,/,/, _\\|/_ |_____| | | From 0f327702bcac1f83ef4cd6a1fd1c62355907929c Mon Sep 17 00:00:00 2001 From: Kelly Souza Date: Fri, 17 Feb 2017 14:54:24 -0800 Subject: [PATCH 5/9] add working hint --- word_guess.rb | 73 +++++++++++++++++++++++++++++---------------------- 1 file changed, 41 insertions(+), 32 deletions(-) diff --git a/word_guess.rb b/word_guess.rb index 2c26d14..dd2d526 100644 --- a/word_guess.rb +++ b/word_guess.rb @@ -13,23 +13,30 @@ def initialize @board = [] @letter = :letter @word = ["Dog","Cat","Apple","Bear","Zoo","Coconut","Pineapple","Cake","Book","Smile"].sample.upcase - # puts @word @petals = 5 @petals_left = 5 @guess_letters = [] @answer_array = [] @incorrect_attempts = 0 @imatch = [] - @word_guess - # pick_word create_board - + @number_of_hints = 0 + @level end - # - # def pick_word - # @word = ["Dog","Cat","Apple","Bear","Zoo","Coconut","Pineapple","Cake","Book","Smile"].sample.downcase - # end + def pick_word + puts "Please choose a level: EASY, MEDIUM, DIFFICULT" + @level = gets.chomp.downcase + if @level == "easy" + @word = ["Dog","Cat","Zoo","Cake","Book","Smile"].sample.downcase + elsif @level == "medium" + @word = ["Apple","Bear"].sample.downcase + elsif @level == "difficult" + @word = ["Coconut","Pineapple"].sample.downcase + else + puts "Choose the level." + end + end def create_board @word.length.times { @board << "_"} end @@ -58,14 +65,15 @@ def get_letter if @petals_left > 0 - show_flower - display_board - puts ("\nYou have guessed these letters: - #{@guess_letters}.").blue - puts "Please guess the word or another letter?" - check_guess + pick_word + show_flower + display_board + puts ("\nYou have guessed these letters: + #{@guess_letters}.").blue + puts "Please guess the word or another letter?" + check_guess - @letter = gets.chomp.upcase + @letter = gets.chomp.upcase if @letter.match(/^[A-Z]$/) @@ -96,6 +104,16 @@ def get_letter end end + def hint + if @number_of_hints < 1 + puts "Hint:" + hint_indexes = @board.each_index.select{|i| @board[i] == "_"} + hint_index = hint_indexes.sample + print @answer_array[hint_index] + @number_of_hints += 1 + end + end + def show_answer print "The answer was #{@word}!" puts @@ -124,17 +142,9 @@ def check_for_win end end - - - # def display - # print @board - # # print ascii art - # flower #puts "\npetals = #{@petals}" - # end - - def show_flower() - case @petals_left - when 5 + def show_flower() + case @petals_left + when 5 puts """ (@)(@)(@)(@)(@) ,\\,\\,|,/,/, @@ -143,7 +153,7 @@ def show_flower() | | |___| """.green - when 4 + when 4 puts """ (@)(@)(@)(@) ,\\,\\,|,/,/, @@ -152,7 +162,7 @@ def show_flower() | | |___| """.yellow - when 3 + when 3 puts """ (@)(@)(@) ,\\,\\,|,/,/, @@ -161,7 +171,7 @@ def show_flower() | | |___| """.red - when 2 + when 2 puts """ (@)(@) ,\\,\\,|,/,/, @@ -170,9 +180,8 @@ def show_flower() | | |___| """.red - when 1 - puts "Hint:" - print @answer_array[0] + when 1 + hint puts """ (@) ,\\,\\,|,/,/, From 34e569cc0e466db6b9d9a8e69211a01ff5694fab Mon Sep 17 00:00:00 2001 From: Kelly Souza Date: Fri, 17 Feb 2017 15:50:43 -0800 Subject: [PATCH 6/9] finalize word_guess --- word_guess.rb | 112 ++++++++++++++++++++------------------------------ 1 file changed, 44 insertions(+), 68 deletions(-) diff --git a/word_guess.rb b/word_guess.rb index dd2d526..ac9cf96 100644 --- a/word_guess.rb +++ b/word_guess.rb @@ -12,67 +12,51 @@ def initialize @attempts = 0 @board = [] @letter = :letter - @word = ["Dog","Cat","Apple","Bear","Zoo","Coconut","Pineapple","Cake","Book","Smile"].sample.upcase + # @word @petals = 5 @petals_left = 5 @guess_letters = [] @answer_array = [] @incorrect_attempts = 0 @imatch = [] - create_board @number_of_hints = 0 - @level + pick_word + create_board end def pick_word puts "Please choose a level: EASY, MEDIUM, DIFFICULT" @level = gets.chomp.downcase if @level == "easy" - @word = ["Dog","Cat","Zoo","Cake","Book","Smile"].sample.downcase + @word = ["Dog","Cat", "Bear", "zoo"].sample.upcase elsif @level == "medium" - @word = ["Apple","Bear"].sample.downcase + @word = ["Cake","Book","Smile"].sample.upcase elsif @level == "difficult" - @word = ["Coconut","Pineapple"].sample.downcase + @word = ["Coconut","Pineapple"].sample.upcase else - puts "Choose the level." + @word = ["Dog","Cat","Apple","Bear","Zoo","Coconut","Pineapple","Cake","Book","Smile"].sample.upcase end end + + def create_board @word.length.times { @board << "_"} end + def display_board print @board end - def check_guess - if @word == @letter - puts "\nCongratulations, you got all the letters.".green - show_answer - show_flower - puts "You beat Word Guess!!!".green - end - end - - # def give_hint - # index = @answer_array.index(@letter) - # if @board[index] = '~' - # puts - - - def get_letter + def play_game if @petals_left > 0 - - - pick_word show_flower display_board puts ("\nYou have guessed these letters: #{@guess_letters}.").blue - puts "Please guess the word or another letter?" + puts "Please guess a letter or wnter the word." check_guess - @letter = gets.chomp.upcase if @letter.match(/^[A-Z]$/) @@ -99,11 +83,25 @@ def get_letter else puts "Oops,that is not valid input, please try again.".red end - # puts "@@@@@@@" puts @petal end end + + + def match_letter + @answer_array = @word.split("") + return @answer_array.include?(@letter) + end + + def find_duplicates + if @guess_letters.include?(@letter) + return true + else + return false + end + end + def hint if @number_of_hints < 1 puts "Hint:" @@ -114,23 +112,21 @@ def hint end end + def check_guess + if @word == @letter + puts "\nCongratulations, you got all the letters.".green + show_answer + show_flower + puts "You beat Word Guess!!!".green + end + end + def show_answer print "The answer was #{@word}!" puts end - def match_letter - @answer_array = @word.split("") - return @answer_array.include?(@letter) - end - def find_duplicates - if @guess_letters.include?(@letter) - return true - else - return false - end - end def check_for_win if !@board.include?("_") @@ -161,7 +157,7 @@ def show_flower() |_____| | | |___| - """.yellow + """.green when 3 puts """ (@)(@)(@) @@ -170,21 +166,21 @@ def show_flower() |_____| | | |___| - """.red + """.yellow when 2 puts """ (@)(@) - ,\\,\\,|,/,/, + ,\\,\\,|,/,/, _\\|/_ |_____| | | |___| - """.red + """.yellow when 1 hint puts """ (@) - ,\\,\\,|,/,/, + ,\\,\\,|,/,/, _\\|/_ |_____| | | @@ -193,31 +189,15 @@ def show_flower() when 0 puts """ - ,\\,\\,|,/,/, + ,\\,\\,|,/,/, _\\|/_ |_____| | | |___| """.red - end end - - - - - - - - - - - - - # def match_multiple_letters - # @occurance = @answer_array.count(@letter) - # @occurance.times do - # + end @@ -272,9 +252,5 @@ def modify_board still_playing = true while still_playing - - game1.get_letter + game1.play_game end - -# game1.display -# game1.get_letter From 1f69f310768da90b8f21f782459d5fee1bd9772f Mon Sep 17 00:00:00 2001 From: Kelly Souza Date: Fri, 17 Feb 2017 15:53:46 -0800 Subject: [PATCH 7/9] final word guess --- word_guess.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/word_guess.rb b/word_guess.rb index ac9cf96..0444884 100644 --- a/word_guess.rb +++ b/word_guess.rb @@ -12,7 +12,6 @@ def initialize @attempts = 0 @board = [] @letter = :letter - # @word @petals = 5 @petals_left = 5 @guess_letters = [] From 70ac107ed1ac5f815e128c9797756939046f8daa Mon Sep 17 00:00:00 2001 From: Kelly Souza Date: Fri, 17 Feb 2017 16:32:57 -0800 Subject: [PATCH 8/9] Fix typo --- word_guess.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/word_guess.rb b/word_guess.rb index 0444884..f13d35f 100644 --- a/word_guess.rb +++ b/word_guess.rb @@ -54,7 +54,7 @@ def play_game display_board puts ("\nYou have guessed these letters: #{@guess_letters}.").blue - puts "Please guess a letter or wnter the word." + puts "Please guess a letter or enter the word." check_guess @letter = gets.chomp.upcase From f198fa94f3cde3c96cb6109925edd8b1c67d320d Mon Sep 17 00:00:00 2001 From: Kelly Souza Date: Sat, 18 Feb 2017 09:36:43 -0800 Subject: [PATCH 9/9] add GameLevel class --- word_guess.rb | 79 ++++++++++++++++++++++++++------------------------- 1 file changed, 40 insertions(+), 39 deletions(-) diff --git a/word_guess.rb b/word_guess.rb index f13d35f..44e3148 100644 --- a/word_guess.rb +++ b/word_guess.rb @@ -1,9 +1,18 @@ # Monalisa and Kelly's word guess game -require 'Faker' require 'colorize' require 'colorized_string' require 'rainbow' +class GameLevel + attr_accessor :easy, :medium, :difficult, :default + + def initialize + @easy = ["Dog","Cat", "Bear", "zoo"] + @medium = ["Cake","Book","Smile"] + @difficult = ["Coconut","Pineapple"] + @default = ["Dog","Cat","Apple","Bear","Zoo","Coconut","Pineapple","Cake","Book","Smile"] + end +end class Game attr_accessor :word, :letter, :board @@ -19,6 +28,7 @@ def initialize @incorrect_attempts = 0 @imatch = [] @number_of_hints = 0 + @game_level = GameLevel.new pick_word create_board end @@ -27,27 +37,24 @@ def pick_word puts "Please choose a level: EASY, MEDIUM, DIFFICULT" @level = gets.chomp.downcase if @level == "easy" - @word = ["Dog","Cat", "Bear", "zoo"].sample.upcase + @word = @game_level.easy.sample.upcase elsif @level == "medium" - @word = ["Cake","Book","Smile"].sample.upcase + @word = @game_level.medium.sample.upcase elsif @level == "difficult" - @word = ["Coconut","Pineapple"].sample.upcase + @word = @game_level.difficult.sample.upcase else - @word = ["Dog","Cat","Apple","Bear","Zoo","Coconut","Pineapple","Cake","Book","Smile"].sample.upcase + @word = @game_level.default.sample.upcase end end - def create_board @word.length.times { @board << "_"} end - def display_board print @board end - def play_game if @petals_left > 0 show_flower @@ -55,11 +62,9 @@ def play_game puts ("\nYou have guessed these letters: #{@guess_letters}.").blue puts "Please guess a letter or enter the word." - check_guess @letter = gets.chomp.upcase - + check_guess if @letter.match(/^[A-Z]$/) - if find_duplicates puts "You already tried that letter!" puts "Try again (no penalties)." @@ -86,8 +91,6 @@ def play_game end end - - def match_letter @answer_array = @word.split("") return @answer_array.include?(@letter) @@ -106,7 +109,7 @@ def hint puts "Hint:" hint_indexes = @board.each_index.select{|i| @board[i] == "_"} hint_index = hint_indexes.sample - print @answer_array[hint_index] + print @answer_array[hint_index].cyan @number_of_hints += 1 end end @@ -117,22 +120,22 @@ def check_guess show_answer show_flower puts "You beat Word Guess!!!".green + exit end end def show_answer - print "The answer was #{@word}!" + print Rainbow("The answer was #{@word}!").blue.bg(:white) puts end - - def check_for_win if !@board.include?("_") display_board - puts "\nCongratulations, you got all the letters." + puts "\nCongratulations, you got all the letters.".green show_answer - puts "You beat Word Guess!!!" + show_flower + puts "You beat Word Guess!!!".green exit end end @@ -187,7 +190,6 @@ def show_flower() """.light_red when 0 puts """ - ,\\,\\,|,/,/, _\\|/_ |_____| @@ -198,9 +200,6 @@ def show_flower() end end - - - def drop_flower if @petals_left > 1 @petals_left = @petals - @incorrect_attempts @@ -216,7 +215,6 @@ def drop_flower end end - def push_guess_letters @guess_letters.push(@letter) end @@ -227,26 +225,29 @@ def modify_board @imatch.each do |i| @board[i] = @letter end - # print @board - # puts "index stuff" end end - #START GAME - -puts "Would you like to play Word Guess?" -play_game = gets.chomp.downcase - - -if play_game == "yes" - game1 = Game.new -elsif play_game == "no" - puts "Ok, come again soon!" - exit -else - puts "Oops, try again" +no_response = true +while no_response + + puts "Would you like to play Word Guess?" + play_game = gets.chomp.downcase + + + if play_game == "yes" + game1 = Game.new + no_response = false + elsif play_game == "no" + puts "Ok, come again soon!" + exit + else + puts "Oops, try again" + puts "Would you like to play Word Guess?" + play_game = gets.chomp.downcase + end end still_playing = true