Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ruby while loop not stopping when condition is met

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
like image 598
Sary Avatar asked Nov 16 '25 15:11

Sary


1 Answers

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 ... )

like image 147
danchik Avatar answered Nov 19 '25 09:11

danchik



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!