Dice Roller

It won’t work. It’s odd. It won’t stop and it won’t add a number onto x
so it would say
“Roll 1: 5
Roll 2: 3”
etc

It just repeats “Roll 1: (random number)”.

Also, is there a way for me to add one to the rand function so it won’t
get a zero?

On Sep 6, 5:01 pm, Hd Pwnz0r [email protected] wrote:

Attachments:http://www.ruby-forum.com/attachment/5009/dice.rb

Next time just put it here:

puts “How many dice do you want to roll?”
roll = gets.chomp
num_rolls = roll
y = 0
x = y.to_i + 1
while x <= roll.to_i
puts "Roll " + x.to_s + ": " + rand(max=6).to_s
end

Take out the gets.chomp:

roll = ‘12’ # gets.chomp

that lets you work on the loop without entering over and over again.

then either fix your while loop by incrementing: x += 1

or use an each loop (which is truly the Ruby way):

(0…roll.to_i).each do |x|
puts ‘etc’
end

On Mon, Sep 6, 2010 at 5:01 PM, Hd Pwnz0r
[email protected] wrote:

Attachments:
http://www.ruby-forum.com/attachment/5009/dice.rb

I’ve added comments to your code pointing to areas of concern:

puts “How many dice do you want to roll?”
roll = gets.chomp
num_rolls = roll # Why are you assigning to num_rolls here? You never
use this variable!
y = 0 # “y” is a bad name for a variable, generally. What is this
variable for? Why is it 0?
x = y.to_i + 1 # What is “x” for? Why are you calling to_i on
something you just assigned an integer value, so you should know you
don’t need this?
while x <= roll.to_i # since you never assign to x, if it is ever
true, it will always be true and you’ll never escape from the loop.
puts "Roll " + x.to_s + ": " + rand(max=6).to_s # you are assigning
6 to max – a variable you never use anywhere else – and then
immediately passing that to rand. Why?
end

Hi –

On Tue, 7 Sep 2010, Phlip wrote:

get a zero?
while x <= roll.to_i
puts "Roll " + x.to_s + ": " + rand(max=6).to_s
end

Take out the gets.chomp:

roll = ‘12’ # gets.chomp

that lets you work on the loop without entering over and over again.

That changes the behavior of the program pretty significantly, though.

then either fix your while loop by incrementing: x += 1

or use an each loop (which is truly the Ruby way):

(0…roll.to_i).each do |x|
puts ‘etc’
end

I’d be inclined to use #times:

print "How many dice do you want to roll? "
num_rolls = gets.to_i
num_rolls.times do |n|
puts “Roll #{n+1}: #{rand(6) + 1}”
end

David


David A. Black, Senior Developer, Cyrus Innovation Inc.

The Ruby training with Black/Brown/McAnally
Compleat Philadelphia, PA, October 1-2, 2010
Rubyist http://www.compleatrubyist.com

David A. Black wrote:

Hi –

On Tue, 7 Sep 2010, Phlip wrote:

get a zero?
while x <= roll.to_i
puts "Roll " + x.to_s + ": " + rand(max=6).to_s
end

Take out the gets.chomp:

roll = ‘12’ # gets.chomp

that lets you work on the loop without entering over and over again.

That changes the behavior of the program pretty significantly, though.

then either fix your while loop by incrementing: x += 1

or use an each loop (which is truly the Ruby way):

(0…roll.to_i).each do |x|
puts ‘etc’
end

I’d be inclined to use #times:

print "How many dice do you want to roll? "
num_rolls = gets.to_i
num_rolls.times do |n|
puts “Roll #{n+1}: #{rand(6) + 1}”
end

David


David A. Black, Senior Developer, Cyrus Innovation Inc.

The Ruby training with Black/Brown/McAnally
Compleat Philadelphia, PA, October 1-2, 2010
Rubyist http://www.compleatrubyist.com

Hi,

I have made a small change, but both will returns the same result…

By adding the min value to the rand(max-min), we can get random number
bw the range(min,max).

print "How many dice do you want to roll? "
num_rolls = gets.to_i
num_rolls.times do |n|
puts “Roll #{n+1}: #{1 + rand(6-1)}”
end

Thanks,
Vaddi

On Tue, Sep 7, 2010 at 8:01 AM, Hd Pwnz0r
[email protected] wrote:

puts “How many dice do you want to roll?”
roll = gets.chomp
num_rolls = roll

num_rolls = gets.to_i

y = 0
x = y.to_i + 1

x = 1

while x <= roll.to_i

while x <= num_rolls

puts "Roll " + x.to_s + ": " + rand(max=6).to_s

puts “Roll #{x} : #{rand(max=6)+1}”
x += 1

end

Also, is there a way for me to add one to the rand function so it won’t
get a zero?

cmon, a computer cannot add :wink:

revised code below.

DICE_SIDES=6
num_rolls = gets.to_i
x=1
while x <= num_rolls
puts “Roll #{x} : #{rand(DICE_SIDES)+1}”
x+=1
end

=>
Roll 1 : 3
Roll 2 : 1
Roll 3 : 6
Roll 4 : 2
Roll 5 : 3

Welcome to Ruby. Pls do not stop programming!
best regards -botp

Thanks Brian for pointed out this. Yes it will returns the value bw 0
and 4
suits for 5-sided die.

We can use this

puts “Roll #{n+1}: #{1 + rand(7-1)}”

This way we can get the values between 0 to 6 as final result.

On Tue, Sep 7, 2010 at 4:03 AM, vadivelan K [email protected] wrote:

You will get values 1 through 6 (Isn’t that why you added the 1?) Also,
seven minus one is six, so why the superfluous math?

(0…1000).map { 1 + rand(6) }.uniq.sort # => [1, 2, 3, 4, 5, 6]

Vadivelan Vaddi wrote:

By adding the min value to the rand(max-min), we can get random number
bw the range(min,max).

print "How many dice do you want to roll? "
num_rolls = gets.to_i
num_rolls.times do |n|
puts “Roll #{n+1}: #{1 + rand(6-1)}”
end

That’s a five-sided die. rand(5) gives a number between 0 and 4
inclusive.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs