에이바바
에이바바

Reputation: 1031

Simple High-Low game in Ruby

I'm trying to write a simple high-low program that will output like this:

$ ./highlow.rb 
Please tell me the max value of the random number: 100
Ok. The random number is generated between 1 and 100.  
Make your guess: 50
That's too low.  Guess again: 75
That's too high.  Guess again: 63
That's too low.  Guess again: 68
Correct!  You guessed the answer in 4 tries!
Would you like to play again? no
OK. Goodbye.
$

This is the code I have, but I'm going wrong somewhere. It appears to work sometimes:


count=0
play = true
while play = true 

print "Please tell me the max value of the random number: "
    max= gets.to_i
    num= rand(max)
puts "Ok. The random number is generated between 1 and " + max.to_s + 
"."
print "Make your guess: "
    guess=gets.to_i

    while guess != num && play != false 
        if guess > num
            print "That's too high. Guess again: "
            guess=gets.to_i
            count+=1
        end

        if guess < num
            print "That's too low. Guess again: "
            guess=gets.to_i
            count+=1
        else
            break
        end
end

puts "Correct! You guessed the answer in " + count.to_s + " tries!" print "Would you like to play again? "

answer=gets.chomp! if answer == 'n' play = false break end

if 
    answer == 'y'
    play = true
end 

end puts "OK. Goodbye"

Any suggestions? Where am I going wrong?

Upvotes: 0

Views: 2050

Answers (1)

Blorgbeard
Blorgbeard

Reputation: 103467

I think your problem (the one I can see anyway) is with number checking code.

If guess is greater than num, then the first if statement will execute, but then the second one will redirect to the else, breaking out of the loop.

You need to use an elsif. Try changing it to this:

    if guess > num
        print "That's too high. Guess again: "
        guess=gets.to_i
        count+=1
    elsif guess < num
        print "That's too low. Guess again: "
        guess=gets.to_i
        count+=1
    else
        break
    end

Upvotes: 2

Related Questions