VBA 掷骰子加法

VBA dice roll with addition

VBA 掷骰子对我来说也是很容易的事情,但我需要特定的类型,当掷出 6 意味着你可以再次掷骰子并将两个掷骰子加在一起(加上当你连续掷出 6 两次时,你得到第三卷等等)。

我尝试了两种方法,但都失败了

Sub roll_dice_1()

Dim result As Range

Set result = Range("A1")

result = Application.WorksheetFunction.RandBetween(1, 6)

If result = 6 Then
  result = result + Application.WorksheetFunction.RandBetween(1, 6)
  Do Until Application.WorksheetFunction.RandBetween(1, 6) <> 6
  result = result + Application.WorksheetFunction.RandBetween(1, 6)
  Loop
   Else
End If

End Sub

然而这个可以产生12的结果,这显然是不可能的,因为两次6应该给出第三个roll

Sub roll_dice_2()

Dim result As Range

Set result = Range("A1")

result = Application.WorksheetFunction.RandBetween(1, 6)

If result = 6 Then
  Do Until Application.WorksheetFunction.RandBetween(1, 6) <> 6
  result = result + Application.WorksheetFunction.RandBetween(1, 6)
  Loop
   Else
End If

End Sub

这个效果更差,因为它可以 return 6.

我尝试了高搜索和低搜索,但我得到的只是一些简单的代码,用于简单的投掷、用两个骰子掷骰子以及在某些结果可以重新掷骰时掷骰子。同样,所有选项都非常简单,与这个不同

循环错误。您不能在条件中 roll 然后再次 roll 来累积,因为这些已经是 2 卷了。

基本上你需要的是一个条件最后出现的循环,例如

结果 = 0 做 滚=... 结果 = 结果 + 掷骰子 滚动时循环 <> 6

您的问题是您要生成一个随机数进行测试,然后生成一个不同的随机数以添加到您的结果中。它们必须相同。 VBA 也有它自己的随机函数。

Sub roll_dice()
    Dim result As Integer, roll as Integer
    Dim lowerbound As Integer, upperbound As Integer

    lowerbound = 1
    upperbound = 6

    result = Int((upperbound - lowerbound + 1) * Rnd + lowerbound)

    If result = upperbound Then
        roll = result
        Do While roll = upperbound
          roll = Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
          result = result + roll
        Loop
    End If

    MsgBox result
End Sub

如果处理 6 似乎是个问题,如果要重投,那么你应该执行:

... 滚 = 6

do while roll = 6
 roll = Int(( 6 * Rnd + 1)
 ShowRoll(roll)
loop

DoStuffWithRollValue

...

这将显示每卷直到第 1-5 行 ShowRoll 是调用动画或其他显示滚动的方法

Sub roll_dice()
    Dim die1, die2 As Integer
    
    'Randomize
    die1 = (Hour(Rnd) Mod 6) + 1
    die2 = (Hour(Rnd) Mod 6) + 1
Exit Sub