From eb11e3696b89faf87319c435ac6ac3a8c1aacc26 Mon Sep 17 00:00:00 2001 From: enigmagnetic Date: Thu, 17 Aug 2017 14:41:28 -0700 Subject: [PATCH 01/15] [LC/JO] Began Word class, practice git commit --- word-guess.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 word-guess.rb diff --git a/word-guess.rb b/word-guess.rb new file mode 100644 index 0000000..83a4ccc --- /dev/null +++ b/word-guess.rb @@ -0,0 +1,13 @@ + +## CLASS DEFINITIONS + +class Word + + + def initialize(given_word) + @stored_letters = Array.new + given_word.each_char {|c| @stored_letters << c } + end + + +end From a76843ef784d508e80944967f54f2e341f8a9ef9 Mon Sep 17 00:00:00 2001 From: enigmagnetic Date: Thu, 17 Aug 2017 15:17:17 -0700 Subject: [PATCH 02/15] [LC/JO] We started defining Letter class, and refined creation of Letter objects in Word initialization. --- word-guess.rb | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/word-guess.rb b/word-guess.rb index 83a4ccc..a7eab34 100644 --- a/word-guess.rb +++ b/word-guess.rb @@ -2,12 +2,30 @@ ## CLASS DEFINITIONS class Word - + attr_reader :stored_letters def initialize(given_word) @stored_letters = Array.new given_word.each_char {|c| @stored_letters << c } + + done_array = [] + @stored_letters.each_index do |index| + if done_array.include?(@stored_letters[index]) + # how do we make sure the letter object is passed here? + Letter.position << index + else + Letter.new(@stored_letters[index], [index]) + done_array << @stored_letters[index] + end + end end +end # end of Word class definition +class Letter + def initialize(letter, positions) + @visible = false + @positions = positions + Word.stored_letters + end end From 4c329f0a09187f3080ce7cc19026eaa78d668684 Mon Sep 17 00:00:00 2001 From: enigmagnetic Date: Thu, 17 Aug 2017 17:18:14 -0700 Subject: [PATCH 03/15] [LC/JO] Eliminated letter class, added some more game logic. --- word-guess.rb | 134 +++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 115 insertions(+), 19 deletions(-) diff --git a/word-guess.rb b/word-guess.rb index a7eab34..a14eed3 100644 --- a/word-guess.rb +++ b/word-guess.rb @@ -2,30 +2,126 @@ ## CLASS DEFINITIONS class Word - attr_reader :stored_letters + attr_reader :word_characters def initialize(given_word) - @stored_letters = Array.new - given_word.each_char {|c| @stored_letters << c } - - done_array = [] - @stored_letters.each_index do |index| - if done_array.include?(@stored_letters[index]) - # how do we make sure the letter object is passed here? - Letter.position << index + @word_characters = [] + given_word.each_char {|c| @word_characters << c } + end + +end # end of Word class definition + +# class Letter +# attr_accessor :visible, :positions +# attr_reader :character +# +# def initialize(letter, positions) +# @character = letter +# @visible = false +# @positions = positions +# end +# +# def self.list +# ObjectSpace.each_object(self) { |star| puts star.name } +# end +# +# end # End of Letter class definition + +class Display + + #TODO ASCII / Tally + + + #TODO Word Display + + + + +end # End of Display definition + +class Game + attr_reader :level, :word_to_guess + + attr_accessor :user_guess + #Select a Level + def initialize + + puts "Welcome.." + print "Choose a level (easy, medium, hard)" + @level = gets.chomp.strip.downcase + + until @level == "easy" || @level == "medium" || @level == "hard" + print "Please select a valid level (easy, medium, hard): " + @level = gets.chomp.strip.downcase + end + + #Pick A Word + easy_words = ["pipes", "carets", "apple", "orange", "book", "computer"] + med_words = ["esoteric", "consciousness", "illuminate", "discrepancy", "galactic"] + hard_words = ["the meaning of life", "vibrational entity", "we are made of star stuff"] + + case @level + when "easy" + @word_to_guess = easy_words.sample + @string_word = easy_words.sample + when "medium" + @word_to_guess = med_words.sample + @string_word = med_words.sample + when "hard" + @word_to_guess = hard_words.sample + @string_word = hard_words.sample + end + + @word_to_guess = Word.new(@word_to_guess) + + end #End of Game initialization method + + def accept_guess + puts "Please enter a letter to guess:" + guess = gets.chomp.strip.downcase + until /[a-z]+[[:blank]]*\b/.match(guess) #&& guess != nil + puts "Please enter alpha characters only:" + guess = gets.chomp.strip.downcase + end + @user_guess = guess + check_guess + end + + def check_guess + if @user_guess.length == 1 + if @string_word.include? (@user_guess) + puts true + accept_guess else - Letter.new(@stored_letters[index], [index]) - done_array << @stored_letters[index] + puts "Nope!" + accept_guess end + else + if @user_guess == @string_word + win_game + else + accept_guess end end -end # end of Word class definition -class Letter + #Validate User input - def initialize(letter, positions) - @visible = false - @positions = positions - Word.stored_letters - end -end + #Accept Letter Guesses + # guess = gets.chomp + # if guess.length = 1 #run Letter + # + # else # run Word + # + # end + + #Accept Word Guesses + + #Update Display + + #Decide win or Lose + +end # End of Game class definition + +game_1 = Game.new +puts game_1.word_to_guess +game_1.accept_guess From 1b5ba349b5e47f3a36aec07de31a076b7335f6ef Mon Sep 17 00:00:00 2001 From: enigmagnetic Date: Thu, 17 Aug 2017 23:31:17 -0700 Subject: [PATCH 04/15] [LC/JO] Got the word display to update with each user guess. Cleaned up some unnecessary code, added comments. --- word-guess.rb | 109 +++++++++++++++++++++++++++----------------------- 1 file changed, 58 insertions(+), 51 deletions(-) diff --git a/word-guess.rb b/word-guess.rb index a14eed3..1e9fa41 100644 --- a/word-guess.rb +++ b/word-guess.rb @@ -11,41 +11,55 @@ def initialize(given_word) end # end of Word class definition -# class Letter -# attr_accessor :visible, :positions -# attr_reader :character -# -# def initialize(letter, positions) -# @character = letter -# @visible = false -# @positions = positions -# end -# -# def self.list -# ObjectSpace.each_object(self) { |star| puts star.name } -# end -# -# end # End of Letter class definition - class Display + attr_accessor :display_word, :user_guess + + def initialize(game_instance) + @string_word = game_instance.string_word + @user_guess = game_instance.user_guess + @display_word = "" + # set initial word display + @string_word.each_char do |char| + if char == " " + @display_word += " " + else + @display_word += "_ " + end + end + end #TODO ASCII / Tally + def update_display + char_positions =[] + i = -1 + # push guessed character index to an array + @string_word.each_char do |char| + i += 1 + if char == @user_guess + # times 2 to adjust for blanks in display_word + char_positions.push(i * 2) + end + end + # replace _ at those indices with the guessed character + char_positions.each do |pos| + @display_word[pos] = @user_guess + end + end - #TODO Word Display - - + def counter_update #race progession + end end # End of Display definition class Game - attr_reader :level, :word_to_guess + attr_reader :level, :word_to_guess, :string_word - attr_accessor :user_guess - #Select a Level - def initialize + attr_accessor :user_guess, :interface + def initialize + # gets difficulty level from the user puts "Welcome.." print "Choose a level (easy, medium, hard)" @level = gets.chomp.strip.downcase @@ -60,68 +74,61 @@ def initialize med_words = ["esoteric", "consciousness", "illuminate", "discrepancy", "galactic"] hard_words = ["the meaning of life", "vibrational entity", "we are made of star stuff"] + # choose a random sample from the selected level array case @level when "easy" - @word_to_guess = easy_words.sample @string_word = easy_words.sample when "medium" - @word_to_guess = med_words.sample @string_word = med_words.sample when "hard" - @word_to_guess = hard_words.sample @string_word = hard_words.sample end - - @word_to_guess = Word.new(@word_to_guess) - + # create a new Display for this game, pass the Game instance to it + @interface = Display.new(self) end #End of Game initialization method + #Validate User input def accept_guess + puts "Phrase: " + @interface.display_word puts "Please enter a letter to guess:" - guess = gets.chomp.strip.downcase - until /[a-z]+[[:blank]]*\b/.match(guess) #&& guess != nil + @user_guess = gets.chomp.strip.downcase + until /[a-z]+[[:blank]]*\b/.match(@user_guess) #&& guess != nil puts "Please enter alpha characters only:" - guess = gets.chomp.strip.downcase + @user_guess = gets.chomp.strip.downcase end - @user_guess = guess + @interface.user_guess = @user_guess check_guess end def check_guess + #Accept Letter Guesses if @user_guess.length == 1 if @string_word.include? (@user_guess) - puts true + @interface.update_display accept_guess else puts "Nope!" + #@interface.counter_update accept_guess end + #Accept Word Guesses else - if @user_guess == @string_word - win_game - else - accept_guess + if @user_guess == @string_word + win_game + else + accept_guess + end end - end - #Validate User input - #Accept Letter Guesses - # guess = gets.chomp - # if guess.length = 1 #run Letter - # - # else # run Word - # - # end + end - #Accept Word Guesses - #Update Display #Decide win or Lose - end # End of Game class definition +## EXECUTIES + game_1 = Game.new -puts game_1.word_to_guess game_1.accept_guess From dfd02acffa01ba76e287f5672d7e8e9855bc57cb Mon Sep 17 00:00:00 2001 From: enigmagnetic Date: Fri, 18 Aug 2017 00:38:31 -0700 Subject: [PATCH 05/15] [LC/JO] Added win logic. --- word-guess.rb | 43 +++++++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/word-guess.rb b/word-guess.rb index 1e9fa41..0e27da3 100644 --- a/word-guess.rb +++ b/word-guess.rb @@ -1,15 +1,16 @@ ## CLASS DEFINITIONS -class Word - attr_reader :word_characters - - def initialize(given_word) - @word_characters = [] - given_word.each_char {|c| @word_characters << c } - end - -end # end of Word class definition +# class Word +# attr_reader :word_characters +# +# def initialize(given_word) +# @word_characters = [] +# given_word.each_char {|c| @word_characters << c } +# end +# +# end # end of Word class definition +# require colorize class Display attr_accessor :display_word, :user_guess @@ -99,31 +100,41 @@ def accept_guess @interface.user_guess = @user_guess check_guess end - + # we can eliminate this distinction and just run a longer accept_guess method def check_guess #Accept Letter Guesses if @user_guess.length == 1 if @string_word.include? (@user_guess) @interface.update_display - accept_guess + end_game + # accept_guess else puts "Nope!" #@interface.counter_update - accept_guess + end_game + # accept_guess end #Accept Word Guesses else if @user_guess == @string_word - win_game + @interface.display_word.gsub!("_", "-") + end_game else accept_guess end end - - end - + def end_game + # declares a win when all blanks have been replaced in display_word + if !(@interface.display_word.include?("_")) + puts "You got it!" + elsif #counter has reached max + puts "Womp womp! Out of guesses :'(" + else + accept_guess + end + end #Decide win or Lose end # End of Game class definition From b5e15376c44ef3738e66d645b655e1ef60432781 Mon Sep 17 00:00:00 2001 From: enigmagnetic Date: Fri, 18 Aug 2017 14:39:26 -0700 Subject: [PATCH 06/15] [LC/JO] Added counter display and update_counter method, tied to incorrect guesses. --- word-guess.rb | 40 +++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/word-guess.rb b/word-guess.rb index 0e27da3..d9133cb 100644 --- a/word-guess.rb +++ b/word-guess.rb @@ -13,12 +13,13 @@ # require colorize class Display - attr_accessor :display_word, :user_guess + attr_accessor :display_word, :user_guess, :counter_finish, :counter_orb, :counter_base def initialize(game_instance) @string_word = game_instance.string_word @user_guess = game_instance.user_guess @display_word = "" + @selected_level = game_instance.selected_level # set initial word display @string_word.each_char do |char| if char == " " @@ -27,6 +28,10 @@ def initialize(game_instance) @display_word += "_ " end end + + @counter_finish = " " * (@selected_level - 1) + "|" + @counter_orb = "o" + @counter_base = "=" * @selected_level end #TODO ASCII / Tally @@ -48,14 +53,20 @@ def update_display end end - def counter_update #race progession + def display_counter #race progession + puts @counter_finish + puts @counter_orb + puts @counter_base + end + def update_counter + @counter_orb.prepend(" ") end end # End of Display definition class Game - attr_reader :level, :word_to_guess, :string_word + attr_reader :level, :word_to_guess, :string_word, :selected_level attr_accessor :user_guess, :interface @@ -79,10 +90,13 @@ def initialize case @level when "easy" @string_word = easy_words.sample + @selected_level = 12 when "medium" @string_word = med_words.sample + @selected_level = 10 when "hard" @string_word = hard_words.sample + @selected_level = 10 end # create a new Display for this game, pass the Game instance to it @interface = Display.new(self) @@ -98,21 +112,17 @@ def accept_guess @user_guess = gets.chomp.strip.downcase end @interface.user_guess = @user_guess - check_guess - end - # we can eliminate this distinction and just run a longer accept_guess method - def check_guess + #Accept Letter Guesses if @user_guess.length == 1 if @string_word.include? (@user_guess) @interface.update_display end_game - # accept_guess else puts "Nope!" + @interface.update_counter #@interface.counter_update end_game - # accept_guess end #Accept Word Guesses else @@ -129,9 +139,17 @@ def end_game # declares a win when all blanks have been replaced in display_word if !(@interface.display_word.include?("_")) puts "You got it!" - elsif #counter has reached max - puts "Womp womp! Out of guesses :'(" + elsif + if @interface.counter_orb.length >= @interface.counter_finish.length + puts "You are trapped on this plane of entanglement." + #display something dramatic + exit #TODO TBD + elsif @interface.counter_orb.length == @interface.counter_finish.length + puts "EEKS! Last guess!" + #display maybe some flashing... + end else + @interface.display_counter accept_guess end end From eeb879e9b58d2ea3f5fc9bf624c56649f799577f Mon Sep 17 00:00:00 2001 From: enigmagnetic Date: Fri, 18 Aug 2017 15:24:49 -0700 Subject: [PATCH 07/15] [LC/JO] Got the counter to not penalize for a repeated guess. Added display of already guessed letters. --- word-guess.rb | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/word-guess.rb b/word-guess.rb index d9133cb..88d097b 100644 --- a/word-guess.rb +++ b/word-guess.rb @@ -34,8 +34,6 @@ def initialize(game_instance) @counter_base = "=" * @selected_level end - #TODO ASCII / Tally - def update_display char_positions =[] i = -1 @@ -100,11 +98,14 @@ def initialize end # create a new Display for this game, pass the Game instance to it @interface = Display.new(self) + @used_letters = [] end #End of Game initialization method #Validate User input def accept_guess + puts @interface.display_counter puts "Phrase: " + @interface.display_word + puts "Incorrect guesses: #{@used_letters.join(", ")}" puts "Please enter a letter to guess:" @user_guess = gets.chomp.strip.downcase until /[a-z]+[[:blank]]*\b/.match(@user_guess) #&& guess != nil @@ -115,14 +116,19 @@ def accept_guess #Accept Letter Guesses if @user_guess.length == 1 - if @string_word.include? (@user_guess) + if @string_word.include?(@user_guess) @interface.update_display end_game else - puts "Nope!" - @interface.update_counter - #@interface.counter_update - end_game + if @used_letters.include?(@user_guess) + puts "You already tried #{@user_guess}. Try again" + end_game + else + puts "Nope!" + @used_letters << @user_guess + @interface.update_counter + end_game + end end #Accept Word Guesses else @@ -130,6 +136,7 @@ def accept_guess @interface.display_word.gsub!("_", "-") end_game else + @interface.update_counter accept_guess end end @@ -149,7 +156,6 @@ def end_game #display maybe some flashing... end else - @interface.display_counter accept_guess end end From 07ada0e90bf01065305a98685ad96859b4f5abb1 Mon Sep 17 00:00:00 2001 From: enigmagnetic Date: Fri, 18 Aug 2017 15:30:06 -0700 Subject: [PATCH 08/15] [LC/JO] Added logic to handle word guesses, adding to used_letters array. --- word-guess.rb | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/word-guess.rb b/word-guess.rb index 88d097b..09de667 100644 --- a/word-guess.rb +++ b/word-guess.rb @@ -136,8 +136,15 @@ def accept_guess @interface.display_word.gsub!("_", "-") end_game else - @interface.update_counter - accept_guess + if @used_letters.include?(@user_guess) + puts "You already tried #{@user_guess}. Try again" + end_game + else + puts "Wrong!" + @used_letters << @user_guess + @interface.update_counter + accept_guess + end end end end From 3e0a276d5824becd24a528b2c57a8825b29cdaa8 Mon Sep 17 00:00:00 2001 From: enigmagnetic Date: Mon, 21 Aug 2017 14:45:21 -0700 Subject: [PATCH 09/15] Remove unused instance variable, cleaned up bad. --- word-guess.rb | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/word-guess.rb b/word-guess.rb index 09de667..99eb87e 100644 --- a/word-guess.rb +++ b/word-guess.rb @@ -1,15 +1,5 @@ ## CLASS DEFINITIONS - -# class Word -# attr_reader :word_characters -# -# def initialize(given_word) -# @word_characters = [] -# given_word.each_char {|c| @word_characters << c } -# end -# -# end # end of Word class definition # require colorize class Display @@ -17,7 +7,7 @@ class Display def initialize(game_instance) @string_word = game_instance.string_word - @user_guess = game_instance.user_guess + @user_guess = nil @display_word = "" @selected_level = game_instance.selected_level # set initial word display @@ -52,9 +42,11 @@ def update_display end def display_counter #race progession - puts @counter_finish - puts @counter_orb - puts @counter_base + <<-COUNTER + #{@counter_finish} + #{@counter_orb} + #{@counter_base} + COUNTER end def update_counter @@ -64,7 +56,7 @@ def update_counter end # End of Display definition class Game - attr_reader :level, :word_to_guess, :string_word, :selected_level + attr_reader :level, :string_word, :selected_level attr_accessor :user_guess, :interface @@ -143,7 +135,7 @@ def accept_guess puts "Wrong!" @used_letters << @user_guess @interface.update_counter - accept_guess + end_game end end end From b4413e500b7c379ac274044c0a11d8808b52cbef Mon Sep 17 00:00:00 2001 From: enigmagnetic Date: Mon, 21 Aug 2017 14:50:14 -0700 Subject: [PATCH 10/15] Start branch for guess class --- Guess.rb | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 Guess.rb diff --git a/Guess.rb b/Guess.rb new file mode 100644 index 0000000..93d1cc8 --- /dev/null +++ b/Guess.rb @@ -0,0 +1,3 @@ +class Guess + +end From a8ffe7643b18412f0d730ad8d6635ebcda8f9891 Mon Sep 17 00:00:00 2001 From: enigmagnetic Date: Mon, 21 Aug 2017 15:18:36 -0700 Subject: [PATCH 11/15] Define correct? method --- Guess.rb | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++ word-guess.rb | 1 + 2 files changed, 65 insertions(+) diff --git a/Guess.rb b/Guess.rb index 93d1cc8..9c76bb0 100644 --- a/Guess.rb +++ b/Guess.rb @@ -1,3 +1,67 @@ class Guess + attr_accessor :user_guess + def valid?(user_guess) + /[a-z]+[[:blank]]*\b/.match(user_guess) ? true : false + end + + def correct?(user_guess) + @user_guess.length == 1 && @string_word.include?(@user_guess) ? true : false + end + + def end_game? + + end +end + +guess = Guess.new + +puts guess.valid?("4737nd8d9") + + + +#Accept Letter Guesses + +# this goes in game + #if @user_guess == @string_word + # @interface.display_word.gsub!("_", "-") + # end_game? + #elsif @used_letters.include?(@user_guess) + # puts "You already guessed that" + #elsif @user_guess.correct? + # update_display + # used_letters << @user_guess + # else + # puts "Nope!" + # update_counter + # end_game? + + @interface.update_display + end_game + else + if @used_letters.include?(@user_guess) + puts "You already tried #{@user_guess}. Try again" + end_game + else + puts "Nope!" + @used_letters << @user_guess + @interface.update_counter + end_game + end + end +#Accept Word Guesses +else + + else + if @used_letters.include?(@user_guess) + puts "You already tried #{@user_guess}. Try again" + end_game + else + puts "Wrong!" + @used_letters << @user_guess + @interface.update_counter + end_game + end + end +end end diff --git a/word-guess.rb b/word-guess.rb index 99eb87e..686878f 100644 --- a/word-guess.rb +++ b/word-guess.rb @@ -100,6 +100,7 @@ def accept_guess puts "Incorrect guesses: #{@used_letters.join(", ")}" puts "Please enter a letter to guess:" @user_guess = gets.chomp.strip.downcase + # can be replaced with guess.valid until /[a-z]+[[:blank]]*\b/.match(@user_guess) #&& guess != nil puts "Please enter alpha characters only:" @user_guess = gets.chomp.strip.downcase From 4663683217bf7b6aaf0291cf7d565f8a5a48ad85 Mon Sep 17 00:00:00 2001 From: enigmagnetic Date: Mon, 21 Aug 2017 15:45:40 -0700 Subject: [PATCH 12/15] edited game logic and defined correct method --- Guess.rb | 182 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 138 insertions(+), 44 deletions(-) diff --git a/Guess.rb b/Guess.rb index 9c76bb0..b479857 100644 --- a/Guess.rb +++ b/Guess.rb @@ -1,67 +1,161 @@ +#Game Dictionary +easy_words = ["pipes", "carets", "apple", "orange", "book", "computer"] +med_words = ["esoteric", "consciousness", "illuminate", "discrepancy", "galactic"] +hard_words = ["the meaning of life", "vibrational entity", "we are made of star stuff"] + +class Display + attr_accessor :display_word, :user_guess, :counter_finish, :counter_orb, :counter_base + + def initialize(game_instance) + @winning_word = game_instance.winning_word + @user_guess = nil + @display_word = "" + @selected_level = game_instance.selected_level + # set initial word display + @winning_word.each_char do |char| + if char == " " + @display_word += " " + else + @display_word += "_ " + end + end + + @counter_finish = " " * (@selected_level - 1) + "|" + @counter_orb = "o" + @counter_base = "=" * @selected_level + end + + def update_display + char_positions =[] + i = -1 + # push guessed character index to an array + @winning_word.each_char do |char| + i += 1 + if char == @user_guess + # times 2 to adjust for blanks in display_word + char_positions.push(i * 2) + end + end + # replace _ at those indices with the guessed character + char_positions.each do |pos| + @display_word[pos] = @user_guess + end + end + + def display_counter #race progession + <<-COUNTER + #{@counter_finish} + #{@counter_orb} + #{@counter_base} + COUNTER + end + + def update_counter + @counter_orb.prepend(" ") + end + +end # End of Display definition + class Guess - attr_accessor :user_guess + attr_accessor :guess - def valid?(user_guess) - /[a-z]+[[:blank]]*\b/.match(user_guess) ? true : false + def initialize(input) + @guess = input end - def correct?(user_guess) - @user_guess.length == 1 && @string_word.include?(@user_guess) ? true : false + def valid? + /[a-z]+[[:blank]]*\b/.match(@guess) ? true : false + end + + def correct?(word) + @guess.length == 1 && word.include?(@guess) ? true : false end def end_game? end -end +end # End of Guess class -guess = Guess.new +class Game + attr_reader :level, :winning_word, :selected_level -puts guess.valid?("4737nd8d9") + attr_accessor :user_guess, :interface + def initialize + # gets difficulty level from the user + puts "Welcome.." + print "Choose a level (easy, medium, hard)" + @level = gets.chomp.strip.downcase + until @level == "easy" || @level == "medium" || @level == "hard" + print "Please select a valid level (easy, medium, hard): " + @level = gets.chomp.strip.downcase + end -#Accept Letter Guesses + # choose a random sample from the selected level array + case @level + when "easy" + @winning_word = easy_words.sample + @selected_level = 12 + when "medium" + @winning_word = med_words.sample + @selected_level = 10 + when "hard" + @winning_word = hard_words.sample + @selected_level = 10 + end + # create a new Display for this game, pass the Game instance to it + @interface = Display.new(self) + @used_letters = [] + end #End of Game initialization method -# this goes in game - #if @user_guess == @string_word - # @interface.display_word.gsub!("_", "-") - # end_game? - #elsif @used_letters.include?(@user_guess) - # puts "You already guessed that" - #elsif @user_guess.correct? - # update_display - # used_letters << @user_guess - # else - # puts "Nope!" - # update_counter - # end_game? + #Validate User input + puts @interface.display_counter + puts "Phrase: " + @interface.display_word + # puts "Incorrect guesses: #{@used_letters.join(", ")}" + puts "Please enter a letter to guess:" + @user_guess = Guess.new(gets.chomp.strip.downcase) - @interface.update_display + until @user_guess.valid? + puts "Please enter alpha characters only:" + @user_guess = Guess.new(gets.chomp.strip.downcase) + end + + @interface.user_guess = @user_guess + + if @user_guess == @winning_word + @interface.display_word.gsub!("_", "-") + end_game + elsif @used_letters.include?(@user_guess) + puts "You already tried #{@user_guess}. Try again" end_game + elsif @user_guess.correct?(@winning_word) + @interface.update_display else - if @used_letters.include?(@user_guess) - puts "You already tried #{@user_guess}. Try again" - end_game - else - puts "Nope!" - @used_letters << @user_guess - @interface.update_counter - end_game - end + puts "Nope!" + @used_letters << @user_guess + @interface.update_counter + end_game end -#Accept Word Guesses -else - else - if @used_letters.include?(@user_guess) - puts "You already tried #{@user_guess}. Try again" - end_game + + def end_game + # declares a win when all blanks have been replaced in display_word + if !(@interface.display_word.include?("_")) + puts "You got it!" + elsif + if @interface.counter_orb.length >= @interface.counter_finish.length + puts "You are trapped on this plane of entanglement." + #display something dramatic + exit #TODO TBD + elsif @interface.counter_orb.length == @interface.counter_finish.length + puts "EEKS! Last guess!" + #display maybe some flashing... + end else - puts "Wrong!" - @used_letters << @user_guess - @interface.update_counter - end_game + accept_guess end end -end -end + + #Decide win or Lose +end # End of Game class definition From b90e6eee4275459468d7322669ddc6b686aa7c4c Mon Sep 17 00:00:00 2001 From: enigmagnetic Date: Mon, 21 Aug 2017 16:51:39 -0700 Subject: [PATCH 13/15] Add colorize, terminal clear, fix interface calls --- Guess.rb | 102 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 52 insertions(+), 50 deletions(-) diff --git a/Guess.rb b/Guess.rb index b479857..7f437f0 100644 --- a/Guess.rb +++ b/Guess.rb @@ -1,7 +1,4 @@ -#Game Dictionary -easy_words = ["pipes", "carets", "apple", "orange", "book", "computer"] -med_words = ["esoteric", "consciousness", "illuminate", "discrepancy", "galactic"] -hard_words = ["the meaning of life", "vibrational entity", "we are made of star stuff"] +require 'colorize' class Display attr_accessor :display_word, :user_guess, :counter_finish, :counter_orb, :counter_base @@ -31,14 +28,14 @@ def update_display # push guessed character index to an array @winning_word.each_char do |char| i += 1 - if char == @user_guess + if char == @user_guess.guess # times 2 to adjust for blanks in display_word char_positions.push(i * 2) end end # replace _ at those indices with the guessed character char_positions.each do |pos| - @display_word[pos] = @user_guess + @display_word[pos] = @user_guess.guess end end @@ -70,10 +67,6 @@ def valid? def correct?(word) @guess.length == 1 && word.include?(@guess) ? true : false end - - def end_game? - - end end # End of Guess class class Game @@ -82,6 +75,11 @@ class Game attr_accessor :user_guess, :interface def initialize + #Game Dictionary + easy_words = ["pipes", "carets", "apple", "orange", "book", "computer"] + med_words = ["esoteric", "consciousness", "illuminate", "discrepancy", "galactic"] + hard_words = ["the meaning of life", "vibrational entity", "we are made of star stuff"] + # gets difficulty level from the user puts "Welcome.." print "Choose a level (easy, medium, hard)" @@ -107,55 +105,59 @@ def initialize # create a new Display for this game, pass the Game instance to it @interface = Display.new(self) @used_letters = [] - end #End of Game initialization method - - #Validate User input - puts @interface.display_counter - puts "Phrase: " + @interface.display_word - # puts "Incorrect guesses: #{@used_letters.join(", ")}" - puts "Please enter a letter to guess:" - @user_guess = Guess.new(gets.chomp.strip.downcase) - - until @user_guess.valid? - puts "Please enter alpha characters only:" - @user_guess = Guess.new(gets.chomp.strip.downcase) - end - @interface.user_guess = @user_guess - - if @user_guess == @winning_word - @interface.display_word.gsub!("_", "-") - end_game - elsif @used_letters.include?(@user_guess) - puts "You already tried #{@user_guess}. Try again" - end_game - elsif @user_guess.correct?(@winning_word) - @interface.update_display - else - puts "Nope!" - @used_letters << @user_guess - @interface.update_counter - end_game + play end + def play + # clears the terminal each turn + puts "\e[H\e[2J" + puts @interface.display_counter + puts "Phrase: " + @interface.display_word + puts "Incorrect guesses: #{@used_letters.join(", ")}" + puts "Please enter a letter to guess:" + @user_guess = Guess.new(gets.chomp.strip.downcase) + + until @user_guess.valid? + puts "Please enter alpha characters only:" + @user_guess = Guess.new(gets.chomp.strip.downcase) + end + @interface.user_guess = @user_guess + + if @user_guess.guess == @winning_word + @interface.display_word.gsub!("_", "-") + win_lose? + elsif @used_letters.include?(@user_guess.guess) + puts "You already tried #{@user_guess.guess}. Try again" + win_lose? + elsif @user_guess.correct?(@winning_word) + @interface.update_display + win_lose? + else + puts "Nope!" + @used_letters << @user_guess.guess + @interface.update_counter + win_lose? + end + end #End of Game initialization method - def end_game + def win_lose? # declares a win when all blanks have been replaced in display_word if !(@interface.display_word.include?("_")) puts "You got it!" - elsif - if @interface.counter_orb.length >= @interface.counter_finish.length - puts "You are trapped on this plane of entanglement." - #display something dramatic - exit #TODO TBD - elsif @interface.counter_orb.length == @interface.counter_finish.length - puts "EEKS! Last guess!" - #display maybe some flashing... - end + puts "Some celebration art!".colorize(:cyan).blink + puts "!~~~~!~~~~!~~~~!~~~~!" + " ©ASCII Finger Painters".colorize(:light_black) + elsif @interface.counter_orb.length >= @interface.counter_finish.length + puts "You are trapped on this plane of entanglement." + puts "Dramatic Death Art!".colorize(:red).blink + puts "XXXXXXXXXXXXXXXXXXX" + " ©ASCII Finger Painters".colorize(:light_black) + exit + # or add another instance of Game to play again else - accept_guess + play end end - #Decide win or Lose end # End of Game class definition + +game = Game.new From fcddc5aa75108d4c8fee844425f497311655fa27 Mon Sep 17 00:00:00 2001 From: enigmagnetic Date: Mon, 21 Aug 2017 16:55:00 -0700 Subject: [PATCH 14/15] Reset word-guess file --- word-guess.rb | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/word-guess.rb b/word-guess.rb index 686878f..df0c251 100644 --- a/word-guess.rb +++ b/word-guess.rb @@ -6,12 +6,12 @@ class Display attr_accessor :display_word, :user_guess, :counter_finish, :counter_orb, :counter_base def initialize(game_instance) - @string_word = game_instance.string_word + @winning_word = game_instance.winning_word @user_guess = nil @display_word = "" @selected_level = game_instance.selected_level # set initial word display - @string_word.each_char do |char| + @winning_word.each_char do |char| if char == " " @display_word += " " else @@ -28,7 +28,7 @@ def update_display char_positions =[] i = -1 # push guessed character index to an array - @string_word.each_char do |char| + @winning_word.each_char do |char| i += 1 if char == @user_guess # times 2 to adjust for blanks in display_word @@ -56,7 +56,7 @@ def update_counter end # End of Display definition class Game - attr_reader :level, :string_word, :selected_level + attr_reader :level, :winning_word, :selected_level attr_accessor :user_guess, :interface @@ -79,13 +79,13 @@ def initialize # choose a random sample from the selected level array case @level when "easy" - @string_word = easy_words.sample + @winning_word = easy_words.sample @selected_level = 12 when "medium" - @string_word = med_words.sample + @winning_word = med_words.sample @selected_level = 10 when "hard" - @string_word = hard_words.sample + @winning_word = hard_words.sample @selected_level = 10 end # create a new Display for this game, pass the Game instance to it @@ -109,7 +109,7 @@ def accept_guess #Accept Letter Guesses if @user_guess.length == 1 - if @string_word.include?(@user_guess) + if @winning_word.include?(@user_guess) @interface.update_display end_game else @@ -125,7 +125,7 @@ def accept_guess end #Accept Word Guesses else - if @user_guess == @string_word + if @user_guess == @winning_word @interface.display_word.gsub!("_", "-") end_game else From 410937bbd1f736185cc65ae2efa1b65122845362 Mon Sep 17 00:00:00 2001 From: enigmagnetic Date: Mon, 21 Aug 2017 16:59:40 -0700 Subject: [PATCH 15/15] Manual copy of new Guess version to word-guess file --- word-guess.rb | 124 ++++++++++++++++++++++++-------------------------- 1 file changed, 59 insertions(+), 65 deletions(-) diff --git a/word-guess.rb b/word-guess.rb index df0c251..7f437f0 100644 --- a/word-guess.rb +++ b/word-guess.rb @@ -1,6 +1,4 @@ - -## CLASS DEFINITIONS -# require colorize +require 'colorize' class Display attr_accessor :display_word, :user_guess, :counter_finish, :counter_orb, :counter_base @@ -30,14 +28,14 @@ def update_display # push guessed character index to an array @winning_word.each_char do |char| i += 1 - if char == @user_guess + if char == @user_guess.guess # times 2 to adjust for blanks in display_word char_positions.push(i * 2) end end # replace _ at those indices with the guessed character char_positions.each do |pos| - @display_word[pos] = @user_guess + @display_word[pos] = @user_guess.guess end end @@ -55,12 +53,33 @@ def update_counter end # End of Display definition +class Guess + attr_accessor :guess + + def initialize(input) + @guess = input + end + + def valid? + /[a-z]+[[:blank]]*\b/.match(@guess) ? true : false + end + + def correct?(word) + @guess.length == 1 && word.include?(@guess) ? true : false + end +end # End of Guess class + class Game attr_reader :level, :winning_word, :selected_level attr_accessor :user_guess, :interface def initialize + #Game Dictionary + easy_words = ["pipes", "carets", "apple", "orange", "book", "computer"] + med_words = ["esoteric", "consciousness", "illuminate", "discrepancy", "galactic"] + hard_words = ["the meaning of life", "vibrational entity", "we are made of star stuff"] + # gets difficulty level from the user puts "Welcome.." print "Choose a level (easy, medium, hard)" @@ -71,11 +90,6 @@ def initialize @level = gets.chomp.strip.downcase end - #Pick A Word - easy_words = ["pipes", "carets", "apple", "orange", "book", "computer"] - med_words = ["esoteric", "consciousness", "illuminate", "discrepancy", "galactic"] - hard_words = ["the meaning of life", "vibrational entity", "we are made of star stuff"] - # choose a random sample from the selected level array case @level when "easy" @@ -91,79 +105,59 @@ def initialize # create a new Display for this game, pass the Game instance to it @interface = Display.new(self) @used_letters = [] - end #End of Game initialization method - #Validate User input - def accept_guess + play + end + def play + # clears the terminal each turn + puts "\e[H\e[2J" puts @interface.display_counter puts "Phrase: " + @interface.display_word puts "Incorrect guesses: #{@used_letters.join(", ")}" puts "Please enter a letter to guess:" - @user_guess = gets.chomp.strip.downcase - # can be replaced with guess.valid - until /[a-z]+[[:blank]]*\b/.match(@user_guess) #&& guess != nil + @user_guess = Guess.new(gets.chomp.strip.downcase) + + until @user_guess.valid? puts "Please enter alpha characters only:" - @user_guess = gets.chomp.strip.downcase + @user_guess = Guess.new(gets.chomp.strip.downcase) end + @interface.user_guess = @user_guess - #Accept Letter Guesses - if @user_guess.length == 1 - if @winning_word.include?(@user_guess) - @interface.update_display - end_game - else - if @used_letters.include?(@user_guess) - puts "You already tried #{@user_guess}. Try again" - end_game - else - puts "Nope!" - @used_letters << @user_guess - @interface.update_counter - end_game - end - end - #Accept Word Guesses + if @user_guess.guess == @winning_word + @interface.display_word.gsub!("_", "-") + win_lose? + elsif @used_letters.include?(@user_guess.guess) + puts "You already tried #{@user_guess.guess}. Try again" + win_lose? + elsif @user_guess.correct?(@winning_word) + @interface.update_display + win_lose? else - if @user_guess == @winning_word - @interface.display_word.gsub!("_", "-") - end_game - else - if @used_letters.include?(@user_guess) - puts "You already tried #{@user_guess}. Try again" - end_game - else - puts "Wrong!" - @used_letters << @user_guess - @interface.update_counter - end_game - end - end + puts "Nope!" + @used_letters << @user_guess.guess + @interface.update_counter + win_lose? end - end + end #End of Game initialization method - def end_game + def win_lose? # declares a win when all blanks have been replaced in display_word if !(@interface.display_word.include?("_")) puts "You got it!" - elsif - if @interface.counter_orb.length >= @interface.counter_finish.length - puts "You are trapped on this plane of entanglement." - #display something dramatic - exit #TODO TBD - elsif @interface.counter_orb.length == @interface.counter_finish.length - puts "EEKS! Last guess!" - #display maybe some flashing... - end + puts "Some celebration art!".colorize(:cyan).blink + puts "!~~~~!~~~~!~~~~!~~~~!" + " ©ASCII Finger Painters".colorize(:light_black) + elsif @interface.counter_orb.length >= @interface.counter_finish.length + puts "You are trapped on this plane of entanglement." + puts "Dramatic Death Art!".colorize(:red).blink + puts "XXXXXXXXXXXXXXXXXXX" + " ©ASCII Finger Painters".colorize(:light_black) + exit + # or add another instance of Game to play again else - accept_guess + play end end - #Decide win or Lose end # End of Game class definition -## EXECUTIES - -game_1 = Game.new -game_1.accept_guess +game = Game.new