2017-10-13 2 views
1

VBA Würfel Rolle ist sehr einfach, auch für mich, aber ich brauche einen bestimmten Typ, wenn man 6 würfelt, kann man wieder rollen und die zwei Rollen zusammenfügen (plus wenn man 6 zweimal hintereinander würfelt), Sie bekommen die dritte Rolle und so weiter).VBA Würfel Rolle mit Zusatz

Ich habe zwei Ansätze ausprobiert, aber beide scheiterten

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 

Dies kann jedoch Ergebnis von 12 produzieren, was eindeutig nicht möglich ist, weil zweimal 6 dritte Walze

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 

Dies geben sollte funktioniert noch schlechter, weil es 6 zurückgeben kann.

Ich versuchte Suche hoch und niedrig, aber alles, was ich bekam, waren einfache Codes für einfache Würfe, Rollen mit zwei Würfeln und Rollen wenn bestimmte Ergebnisse wiederholt werden können. Wieder alle Optionen ziemlich einfach, im Gegensatz zu diesem

Antwort

1

Ihr Problem ist sind Sie eine Zufallszahl gegen testen und dann eine andere Erzeugung eine, die zu deinem Ergebnis hinzugefügt wird. Sie müssen gleich sein. Auch VBA hat eine eigene Zufallsfunktion.

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

Danke, ich wusste, dass die Schleife Fehler etwas so sein würde, aber ich war die Ideen aus, wie es – telesien

+1

BTW arbeiten zu lassen gibt es keinen Grund, warum Sie Ergebnis und rollen so lange erklären, wenn integer sein sollte genug? – telesien

+0

Wahrscheinlich schlechte Angewohnheit in diesem Fall. Ich bin es gewohnt, es zu verwenden, um Überlauffehler zu vermeiden, aber Sie werden dieses Problem in diesem Fall nicht riskieren. Also hast du recht. Haben korrigiert – Tom

0

Die Schleife ist falsch. Sie können nicht im Zustand rollen und dann wieder ansammeln, da diese bereits 2 Rollen sind.

Grundsätzlich benötigen Sie eine Schleife, wo die Bedingung zuletzt kommt, z.

Ergebnis = 0 Do Rolle = ... Ergebnis = Ergebnis + Rolle Schleife während Rolle <> 6