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