Random numbers can be very useful in your Small Basic games. They can be used to make the game play vary from one game to the next.
The Small Basic keyword to get a random number is Math.GetRandomNumber(maxNumber). It will return a random integer between 1 and the input value maxNumber.
Here are a few ideas and tips:
Random Position and Speed
We can position sprites with random positions and velocities.
radius = 25numSprite = 10gw = GraphicsWindow.Widthgh = GraphicsWindow.HeightFor i = 1 To numSprite sprite[i] = Shapes.AddEllipse(2*radius,2*radius) spritePosX[i] = radius+Math.GetRandomNumber(gw-2*radius) spritePosY[i] = radius+Math.GetRandomNumber(gh-2*radius) spriteVelX[i] = Math.GetRandomNumber(11)-6 spriteVelY[i] = Math.GetRandomNumber(11)-6EndFor While "True" For i = 1 To numSprite spritePosX[i] = spritePosX[i]+spriteVelX[i] spritePosY[i] = spritePosY[i]+spriteVelY[i] If (spritePosX[i] < radius) Then spritePosX[i] = radius spriteVelX[i] = -spriteVelX[i] ElseIf (spritePosX[i] > gw-radius) Then spritePosX[i] = gw-radius spriteVelX[i] = -spriteVelX[i] EndIf If (spritePosY[i] < radius) Then spritePosY[i] = radius spriteVelY[i] = -spriteVelY[i] ElseIf (spritePosY[i] > gh-radius) Then spritePosY[i] = gh-radius spriteVelY[i] = -spriteVelY[i] EndIf Shapes.Move(sprite[i],spritePosX[i]-radius,spritePosY[i]-radius) EndFor Program.Delay(20)EndWhileRandom Branching
We can randomly do different things in the code, perhaps equivalent to rolling a dice.
dice = Math.GetRandomNumber(6)If (dice = 1) Then TextWindow.WriteLine("Do something for a dice roll of 1")ElseIf (dice = 2) Then TextWindow.WriteLine("Do something for a dice roll of 2")ElseIf (dice = 3) Then TextWindow.WriteLine("Do something for a dice roll of 3")ElseIf (dice = 4) Then TextWindow.WriteLine("Do something for a dice roll of 4")ElseIf (dice = 5) Then TextWindow.WriteLine("Do something for a dice roll of 5")ElseIf (dice = 6) Then TextWindow.WriteLine("Do something for a dice roll of 6")EndIfWe could also only do something with a probability, say 1 in 10.
If (Math.GetRandomNumber(10) = 1) Then TextWindow.WriteLine("This is a 1 in 10 event!!!")Else TextWindow.WriteLine("A 10% probability event didn't happen")EndIfRanges and Intervals
If we want random numbers over a different range (not 1 to maxNumber) or with smaller intervals, for example 0.2, then we can use the following formula.
rand = min + Math.GetRandomNumber((max-min+1)/interval)*intervalHere is an example using this to create random numbers between -5 and 3, with intervals of 0.2.
min = -5max = 3interval = 0.2 For i = 1 To 1000 Random() TextWindow.WriteLine(rand)EndFor Sub Random rand = min + Math.GetRandomNumber((max-min+1)/interval)*intervalEndSub
