随机数生成器,总是产生一个与前一个随机数不同的数字

Random number generator that always produces a number different from the previous random number

所以我一直在为我的学生在 PowerPoint 上开发一个词汇足球游戏。感谢 John Korchok () 我能够实现一个 VBA 代码,当我击中某个形状时,它会为我提供一个随机数(这是让我的学生知道轮到谁的必要条件) .代码看起来像这样并且工作得很好:

    Sub ShapeNumber()
    Dim X As Long
    Dim ShapeNumber As String
    Dim oSlide As Slide
    Dim oShape As Shape

    X = 30
    Randomize
    ShapeNumber = Int((X * Rnd) + 1)
    For Each oSlide In ActivePresentation.Slides
        For Each oShape In oSlide.Shapes
            If oShape.Name = "RandomNumber Shape" Then
                oShape.TextFrame.TextRange.Text = ShapeNumber
            End If
        Next oShape
    Next oSlide
End Sub

我一直在想是否可以修改代码,使其始终生成与上次生成的数字不同的数字。在实践中,我意识到当我按下形状但没有任何变化时,我的学生往往会感到困惑(他们不知道它是否再次出现相同的数字或者它是否根本不起作用)。

初始化为:

X = 30
Randomize
ShapeNumber = Int(X * Rnd)
X = X - 1

要生成数字,请使用:

ShapeNumber = (ShapeNumber + Int(X * Rnd) + 1) Mod 30

并在此处添加 1:

oShape.TextFrame.TextRange.Text = ShapeNumber + 1

您可以跟踪最后一个号码:

Dim LastNumber As Long

Sub ShapeNumber()
    Dim X As Long
    Dim ShapeNumber As Long
    Dim oSlide As Slide
    Dim oShape As Shape

    X = 30
    Randomize
    Do
        ShapeNumber = CLng((X * Rnd) + 1)
    Loop While ShapeNumber = LastNumber

    LastNumber = ShapeNumber 

    For Each oSlide In ActivePresentation.Slides
        For Each oShape In oSlide.Shapes
            If oShape.Name = "RandomNumber Shape" Then
                oShape.TextFrame.TextRange.Text = ShapeNumber
            End If
        Next oShape
    Next oSlide

End Sub