我开始学习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
答案 0 :(得分:1)
因为你对所有参数都做了或,所以即使它首先匹配,它也会传递不匹配的第二个。
从variable != firstcondition or variable != secondcondition
更改while循环的逻辑...
至
!(variable == condition or variable == condition ... )