2016-11-08 118 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