Ruby while while循环在满足条件时不停止

时间:2016-11-08 01:18:26

标签: ruby loops while-loop

我开始学习Ruby,并且我坚持使用这个程序我写的是假设是游戏" Craps"至少在任何时候游戏的一小部分,即使随机骰子满足循环条件,代码也会在第二个循环中循环。

这是循环

的循环
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

这是该计划的完整代码。

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

1 个答案:

答案 0 :(得分:1)

因为你对所有参数都做了,所以即使它首先匹配,它也会传递不匹配的第二个。

variable != firstcondition or variable != secondcondition更改while循环的逻辑... 至 !(variable == condition or variable == condition ... )