# How Do I Change a .gsub

**URL:** <https://www.ruby-forum.com/t/how-do-i-change-a-gsub/179694>\
**Category:** Ruby\
**Created:** [December 2, 2009, 7:16am UTC](https://www.ruby-forum.com/t/how-do-i-change-a-gsub/179694 "2009-12-02T07:16:36Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![jovijunki](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/848f3c/32.png) [@jovijunki](https://www.ruby-forum.com/u/jovijunki)\
**Post date:** [December 2, 2009, 7:16am UTC](https://www.ruby-forum.com/t/how-do-i-change-a-gsub/179694/1 "2009-12-02T07:16:36Z")

</div>

I’m trying to make a Hangman game

def guessed\_word()

```
    word_letters = @word.split("")

```

blank = @word.gsub(/[a-z]/, ‘\_’)

return blank  
end

the array for the correct guesses made by the user is @good\_guesses and  
incorrect is @bad\_guesses

So, my game will print out the right number of blanks for however many  
letters are in the word…but I don’t know how to add the elements from  
@good\_guesses into the correct spots.

I’ve tried things like

if @word.include?(@good.guesses)  
right = blank.gsub(/[\_]/, @good\_guesses.split)  
end

and things in that nature  
i always end up getting an error  
i have no idea what to do at this point and i’ve tried like 1000  
combinations and i can’t find an explanation anywhere

please help?

---

<div class="post-metadata">

**Author:** ![jovijunki](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/848f3c/32.png) [@jovijunki](https://www.ruby-forum.com/u/jovijunki)\
**Post date:** [December 2, 2009, 5:25pm UTC](https://www.ruby-forum.com/t/how-do-i-change-a-gsub/179694/2 "2009-12-02T17:25:42Z")

</div>

I tried what you suggested and it will give either a can’t covert string  
to integer error. and idk why. or it’ll add correct guesses to incorrect  
guesses…??

---

<div class="post-metadata">

**Author:** ![jovijunki](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/848f3c/32.png) [@jovijunki](https://www.ruby-forum.com/u/jovijunki)\
**Post date:** [December 2, 2009, 7:45am UTC](https://www.ruby-forum.com/t/how-do-i-change-a-gsub/179694/3 "2009-12-02T07:45:06Z")

</div>

On Wed, Dec 2, 2009 at 11:46 AM, Dylan R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> the array for the correct guesses made by the user is @good\_guesses and  
> end  
> Try maintaining the word as an array. Here’s a basic sketch:

class Hangman  
def initialize(word)  
@word = word.split //  
@good\_guesses = {}  
end

def display\_word  
@word.map {|i| @good\_guesses[i] ? i : “\_”}.join(" ")  
end

def guess(letter)  
if @word.include? letter  
@good\_guesses[letter] = true  
end  
end  
end

martin

---

<div class="post-metadata">

**Author:** ![jovijunki](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/848f3c/32.png) [@jovijunki](https://www.ruby-forum.com/u/jovijunki)\
**Post date:** [December 2, 2009, 5:37pm UTC](https://www.ruby-forum.com/t/how-do-i-change-a-gsub/179694/4 "2009-12-02T17:37:25Z")

</div>

On Wed, Dec 2, 2009 at 9:55 PM, Dylan R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> I tried what you suggested and it will give either a can’t covert string  
> to integer error. and idk why. or it’ll add correct guesses to incorrect  
> guesses…??

Paste your complete code in and I’ll take a look.

martin

---

<div class="post-metadata">

**Author:** ![jovijunki](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/848f3c/32.png) [@jovijunki](https://www.ruby-forum.com/u/jovijunki)\
**Post date:** [December 2, 2009, 5:45pm UTC](https://www.ruby-forum.com/t/how-do-i-change-a-gsub/179694/5 "2009-12-02T17:45:14Z")

</div>

class Hangman  
def initialize(word=nil)  
if word != nil  
@word = word.split  
else  
word = $dictionary[rand($dictionary.length)]# FIX  
@word = word.split  
end

```
# the player's guesses
@guesses = []
@bad_guesses = []
@good_guesses = {}

```

end

def guess(letter)

@guesses \<\< letter

if @word.include?(letter)  
@good\_guesses[letter] = true  
else  
@bad\_guesses \<\< letter  
end  
end

def word()  
return @word  
end

def total\_guess\_count()  
return @guess.length()  
end

def bad\_guess\_count()  
return @bad\_guesses.length()  
end

def misses()  
return @bad\_guesses  
end

def lost?()  
lose\_game = false

if (bad\_guess\_count() == MAX\_GUESSES)  
lose\_game = true  
end

return lose\_game  
end

def guessed\_word()

hidden\_word = @word.map {|i| @good\_guesses[i] ? i : “\_”}.join(" ")

return hidden\_word  
end

def to\_s()  
return guessed\_word.split(’’).join(’ ')  
end

---

<div class="post-metadata">

**Author:** ![jovijunki](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/848f3c/32.png) [@jovijunki](https://www.ruby-forum.com/u/jovijunki)\
**Post date:** [December 2, 2009, 5:53pm UTC](https://www.ruby-forum.com/t/how-do-i-change-a-gsub/179694/6 "2009-12-02T17:53:48Z")

</div>

On Wed, Dec 2, 2009 at 4:45 PM, Dylan R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> class Hangman  
> def initialize(word=nil)  
> if word != nil  
> @word = word.split

This doesn’t split the word up into individual letters - you need  
@word=word.split(//) for that AFAIK.

> else  
> word = $dictionary[rand($dictionary.length)]# FIX  
> @word = word.split  
> end
> 
> # the player’s guesses
> 
> @guesses = []  
> @bad\_guesses = []  
> @good\_guesses = {}

Why are you storing the guesses and the bad guesses and the good  
guesses? You’re at least storing things twice here!

A single hash of guesses, where good guesses map to true and bad  
guesses map to false is probably better.

> end  
> end
> 
> def word()  
> return @word  
> end

attr\_accessor :word at the top of the class def is more idiomatic.  
For that matter, so i leaving off the empty () for method calls

> return @bad\_guesses  
> end  
> this could be written much more simply as

def lost?  
bad\_guess\_count == MAX\_GUESSES  
end

though you might find

def lost?  
return bad\_guess\_count == MAX\_GUESSES  
end

more readable

> ## end
> 
> Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/).

–  
Paul S.  
[http://www.nomadicfun.co.uk](http://www.nomadicfun.co.uk)

removed\_email\_address@domain.invalid
