mirror of
https://github.com/QB64Official/qb64.git
synced 2024-08-22 11:25:08 +00:00
114 lines
2.9 KiB
Markdown
114 lines
2.9 KiB
Markdown
|
**RANDOMIZE** is used with a seed value to generate different random number sequences using the [RND](RND) function.
|
||
|
|
||
|
## Syntax
|
||
|
|
||
|
> **RANDOMIZE** [USING] **{*seednumber*|TIMER}**
|
||
|
|
||
|
* The *seed number* can be ANY positive or negative numerical type value. The [TIMER](TIMER) value is often used to change [RND](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](TIMER) starting value ensures that the initial return sequence values are different almost every time the program is run!
|
||
|
* [RUN](RUN) should reset the [RANDOMIZE](RANDOMIZE) sequence to the starting [RND](RND) function value.(Not yet in QB64)
|
||
|
|
||
|
## Example(s)
|
||
|
|
||
|
Using RANDOMIZE **TIMER** to set a different starting sequence of [RND](RND) numbers every run.
|
||
|
|
||
|
```vb
|
||
|
|
||
|
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.
|
||
|
|
||
|
```vb
|
||
|
|
||
|
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:
|
||
|
|
||
|
```vb
|
||
|
|
||
|
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
|
||
|
|
||
|
```
|
||
|
|
||
|
## See Also
|
||
|
|
||
|
* [RND](RND), [INT](INT), [CINT](CINT)
|
||
|
* [TIMER](TIMER)
|