Hey I need help with my code.

B

Brian Geds

Hello guys I am doing a little something for class but I need help
Okay the point of the game is to roll to random dice and if the dice
lands on [one] you lose or if you dont you get to add up the two sums of
what you did roll. or you get the option to choose to roll again or
pass. heres that my code looks like....it will do the while, but when it
gets to the if(and lands on 1) it will stay in the while for some
reason. Here is what my code looks like

# roll or pass
#
# A Ruby dice game. Each turn you can play it safe and keep your score,
# or roll again to rack up points. But watch out! A roll of 1 could
cost
# you everything!


# dice face rows

frame = "+-----+\n"
blank = "| |\n"
center = "| * |\n"
left = "|* |\n"
right = "| *|\n"
both = "|* *|\n"
# dice faces

one = frame + blank + center + blank + frame
two = frame + left + blank + right + frame
three = frame + left + center + right + frame
four = frame + both + blank + both + frame
five = frame + both + center + both + frame
six = frame + both*3 + frame
weird = frame + blank*3 + frame
faces = [one, two, three, four, five, six]
points = 0
puts 'Would you like the roll or pass?'
user_turn = gets.chomp()

while (user_turn != 'pass') do
result1= faces[(rand(6))]
result2= faces[(rand(6))]
puts result1
puts result2
puts 'current score is'
if (result1 result2 != faces[0])
puts 'Would you like to roll again?'
user_turn = gets.chomp
end
end
 
Z

Zundra Daniel

[Note: parts of this message were removed to make it a legal post.]

You need a break in your loop. Also the conditional syntax is wrong

it should be something like:

unless result1 == faces[0] or results2 == faces[0]
puts 'Would you like to roll again?'
else
break
end
 
B

Brian Geds

Hey I got it working now I need help with one last thing. The game is
suppose to take the number of the dice and put them into points, and
this gives you, your score. the numbers are suppose to be like this one
= *0, two = 2, and so oh. How can I do this?


# roll or pass
#
# A Ruby dice game. Each turn you can play it safe and keep your score,
# or roll again to rack up points. But watch out! A roll of 1 could
cost
# you everything!


# dice face rows

frame = "+-----+\n"
blank = "| |\n"
center = "| * |\n"
left = "|* |\n"
right = "| *|\n"
both = "|* *|\n"
# dice faces

one = frame + blank + center + blank + frame
two = frame + left + blank + right + frame
three = frame + left + center + right + frame
four = frame + both + blank + both + frame
five = frame + both + center + both + frame
six = frame + both*3 + frame
weird = frame + blank*3 + frame
faces = [one, two, three, four, five, six]
points = 0
puts 'Would you like the roll or pass?'
user_turn = gets.chomp()
while (user_turn != 'pass') do
result1= faces[(rand(6))]
result2= faces[(rand(6))]
puts result1
puts result2
if (result1 != faces[0]) and (result2 != faces[0])
puts 'current score is'
puts 'Would you like to roll again?'
user_turn = gets.chomp
else
break
end
end
 
Z

Zundra Daniel

[Note: parts of this message were removed to make it a legal post.]

The integer you want is the random number + 1. Just save the rand value.
 
B

Bertram Scharpf

Hi,

do yourself the favour and make your code more readable.

UNTESTED.

Am Mittwoch, 28. Okt 2009, 12:25:41 +0900 schrieb Brian Geds:
# dice face rows

frame = "+-----+\n"
blank = "| |\n"
center = "| * |\n"
left = "|* |\n"
right = "| *|\n"
both = "|* *|\n"

FRAME = "+-----+"
BLANK = "| |"
CENTER = "| * |"
LEFT = "|* |"
RIGHT = "| *|"
BOTH = "|* *|"
# dice faces

one = frame + blank + center + blank + frame
two = frame + left + blank + right + frame
three = frame + left + center + right + frame
four = frame + both + blank + both + frame
five = frame + both + center + both + frame
six = frame + both*3 + frame
weird = frame + blank*3 + frame
faces = [one, two, three, four, five, six]

FACES = [
[ BLANK, CENTER, BLANK],
[ LEFT , BLANK , RIGHT],
[ LEFT , CENTER, RIGHT],
[ BOTH , BLANK , BOTH ],
[ BOTH , CENTER, BOTH ],
[ BOTH , BOTH , BOTH ],
]

FACES.map! { |a| ([ FACES] + a + [ FACES]).map { |x| x + $/ }.join "" }
# As it's a constant it is only evaluated once.
points = 0
puts 'Would you like the roll or pass?'
user_turn = gets.chomp()

`gets' may return nil (EOF == Ctrl-D).
while (user_turn != 'pass') do
result1= faces[(rand(6))]
result2= faces[(rand(6))]
puts result1
puts result2
puts 'current score is'
if (result1 result2 != faces[0])
puts 'Would you like to roll again?'
user_turn = gets.chomp
end
end

Argh. Indent the `if' correctly.
Just call `gets' in one place.

You should store and compare the _number_ of resulting eyes but
not the whole image. That's just for displaying.

Then the problem will be obvious, I bet.

Bertram
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,906
Latest member
SkinfixSkintag

Latest Threads

Top