2016-11-08 169 views
3

我開始學習Ruby,並且我堅持使用這個程序我正在寫這是假設遊戲「骰子」的一小部分,至少反正即使在隨機骰子滿足循環條件時,代碼仍在第2個while循環中循環。當條件得到滿足時,Ruby while while循環不停止

這是一個不斷循環

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 
+0

如果要停止循環,你應該叫回歸。而且你的代碼使用嵌套的if和loop來複雜化。 – araratan

+0

如果你有你的答案我建議關閉帖子或標記接受的答案。並非所有人都閱讀評論部分。 – Rishav

回答

1

因爲你正在做的所有參數的,因此即使它首先匹配它會通過不匹配第二。

改變你的邏輯,而從循環... variable != firstcondition or variable != secondcondition!(variable == condition or variable == condition ...)

+2

呃......你可能想'=='在那裏,而不是'='。就個人而言,我只是建議'而![7,11,2,3,12] .include?(變量)' – philomory

+0

lol是,ty,更新了答案,不確定關於ruby語法看邏輯 – danchik

+0

我的印象是,如果任何**或**返回true循環將結束。 – Sary