sary - 7 months ago 47

Ruby Question

I starting to learn Ruby, and i'm stuck with this program i'm writing which is suppose to be the game "Craps" small part of the game at least anyway, the code is looping at the 2nd while loop even when the random dice is meeting the loop's condition.

This is the loop that keeps looping

`while new_dice_sum != 7 or new_dice_sum != 11 or new_dice_sum != 2 or new_dice_sum != 3 or new_dice_sum != 12 or new_dice_sum != point`

dice1 = 1 + rand(6)

dice2 = 1 + rand(6)

new_dice_sum = dice1.to_i + dice2.to_i

This is the complete code of the program.

`input = ""`

point = 0

balance = 100

Bet = 10

dice1 = 0

dice2 = 0

dice_sum = 0

new_dice_sum = 0

won = 0

lost = 0

while input != "Q"

print "Please choose R to roll the dice or Q to exit the game: "

input = gets.chomp.upcase

if input == "R"

if balance > 10

dice1 = 1 + rand(6)

dice2 = 1 + rand(6)

dice_sum = dice1.to_i + dice2.to_i

puts "First dice is #{dice1} while the second dice is #{dice2} both are a total of #{dice_sum}"

if dice_sum == 7 || dice_sum == 11

balance = balance + Bet

won = won + 1

puts "You won, Your new balance is #{balance}"

elsif dice_sum == 2 || dice_sum == 3 || dice_sum == 12

balance = balance - Bet

lost = lost + 1

puts "You lost, Your new balance is #{balance}"

else

point = dice_sum

while new_dice_sum != 7 or new_dice_sum != 11 or new_dice_sum != 2 or new_dice_sum != 3 or new_dice_sum != 12 or new_dice_sum != point

dice1 = 1 + rand(6)

dice2 = 1 + rand(6)

new_dice_sum = dice1.to_i + dice2.to_i

puts "In the new roll with your point #{point}, The first dice is #{dice1} while the second dice is #{dice2} both are a total of #{new_dice_sum}"

if new_dice_sum == 7 || new_dice_sum == 11

balance = balance + Bet

won = won + 1

puts "You won, Your new balance is #{balance}"

elsif new_dice_sum == 2 || new_dice_sum == 3 || new_dice_sum == 12

balance = balance - Bet

lost = lost + 1

puts "You lost, Your new balance is #{balance}"

elsif new_dice_sum == point

balance = balance + Bet

won = won + 1

puts "Your Total dice is equal to your point you won, your new balance is #{balance}"

end

end

end

else

puts "Your balance is not enough to place a bet, Your balance now is #{balance}"

end

elsif input != "Q"

puts "#{input} is not valid choice"

end

end

puts "Your current balance is #{balance}$ and you won #{won} times and lost #{lost} times"

exit

Answer

Because you are doing **or** on all of the parameters, so even if it matches first it will pass not matching the second.

Change your logic for while loop from `variable != firstcondition or variable != secondcondition`

...
to
`!(variable == condition or variable == condition ... )`

Source (Stackoverflow)