RANDOMIZE - QB64Official/qb64 GitHub Wiki
RANDOMIZE is used with a seed value to generate different random number sequences using the RND function.
Syntax
RANDOMIZE [USING] {seednumber|TIMER}
- The seed number can be ANY positive or negative numerical type value. The TIMER value is often used to change RND output each run.
- If the seed number is omitted, the program will display: Random-number seed (-32768 to 32767)? request on screen.
- USING resets a seed number sequence to the start of the sequence as if the program just started using that seed in QB64 only.
- Note: The RANDOMIZE USING seed number MUST be designated or a Name already in use status error will occur!
- If the same initial seed number is used, the sequence of random numbers returned will be identical every program run.
- The fact that random numbers would always be the same has been used for simple data encryption and decryption.
- Using a TIMER starting value ensures that the initial return sequence values are different almost every time the program is run!
- RUN should reset the RANDOMIZE sequence to the starting RND function value.(Not yet in QB64)
Example(s)
Using RANDOMIZE TIMER to set a different starting sequence of RND numbers every run.
RANDOMIZE TIMER
DO
randnum% = INT(RND * 11) + 2 'add one to multiplier as INT rounds down and never equals 10
PRINT randnum%
K$ = INPUT$(1)
LOOP UNTIL UCASE$(K$) = "Q" 'q = quit
END
Explanation: Procedure generates random integer values from 2 to 12 like a pair of dice.
Repeating a random number sequence with RANDOMIZE USING and a specific seed value in QB64 only.
seed = 10
RANDOMIZE seed
Print7
RANDOMIZE seed
Print7
PRINT "Press a key to start sequence over!"
K$ = INPUT$(1)
RANDOMIZE **USING** seed
Print7
SUB Print7
FOR r = 1 TO 7
PRINT RND;
NEXT
PRINT: PRINT
END SUB
Explanation: The second RANDOMIZE statement just continues the sequence where USING in the third restarts the sequence.
Random fireworks explosions:
RANDOMIZE TIMER
DEFINT A-Z
TYPE ftype
vx AS SINGLE
vy AS SINGLE
END TYPE
DIM frag(500) AS ftype 'fragments
DIM pi AS SINGLE
pi = 3.141593
DIM x AS SINGLE, y AS SINGLE
DIM t AS SINGLE, g AS SINGLE, p AS SINGLE
t = 0
g = 0.4 'gravity
p = 15 'explosion power
sw = 800
sh = 600
SCREEN _NEWIMAGE(sw, sh, 32)
DO
FOR i = 0 TO UBOUND(frag)
frag(i).vx = RND * COS(2 * pi * RND)
frag(i).vy = RND * SIN(2 * pi * RND)
NEXT
x = sw * RND
y = sh * RND
FOR t = 0 TO 25 STEP 0.1
LINE (0, 0)-(sw, sh), _RGB(0, 0, 0), BF
FOR i = 0 TO UBOUND(frag)
PSET (x + t * p * frag(i).vx, y + t * p * frag(i).vy + g * t * t), _RGB(255, 255, 0)
NEXT
_DISPLAY
_LIMIT 150
IF _KEYHIT = -27 THEN EXIT DO
NEXT
LOOP
SYSTEM