Difference between revisions of "RANDOMIZE"

From QB64 Wiki
Jump to navigation Jump to search
imported>Clippy
m
imported>Clippy
m
 
(12 intermediate revisions by the same user not shown)
Line 3: Line 3:


{{PageSyntax}}
{{PageSyntax}}
:: RANDOMIZE [USING] ''seednumber''
:: '''RANDOMIZE''' [USING] '''{''seednumber''|TIMER}'''




* The ''seednumber'' can be any positive or negative numerical value. The [[TIMER]] value is often used to change [[RND]] output each run.
* The ''seed number'' can be ANY positive or negative numerical type value. The [[TIMER]] value is often used to change [[RND]] output each run.
* '''USING''' resets a ''seed number'' sequence to the start of the sequence as if the program just started using that seed.
* 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 {{text|Name already in use|blue}} status error will occur!
* If the same initial seed number is used, the sequence of random numbers returned will be identical every program run.
* 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 encrytion.
* 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!
* 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 value.
* [[RUN]] should reset the [[RANDOMIZE]] sequence to the starting [[RND]] function value.(Not yet in QB64)




''Example:'' Using RANDOMIZE TIMER to set a different starting sequence of numbers every run.
''Example 1:'' Using RANDOMIZE '''TIMER''' to set a different starting sequence of [[RND|random]] numbers every run.
{{CodeStart}} '' ''
{{CodeStart}}{{Cl|RANDOMIZE}} {{Cl|TIMER}}
{{Cl|RANDOMIZE}} {{Cl|TIMER}}
{{Cl|DO...LOOP|DO}}
{{Cl|DO...LOOP|DO}}
randnum% = INT({{Cl|RND}} * 11) + 2  'add one to multiplier as INT rounds down and never equals 10
randnum% = INT({{Cl|RND}} * 11) + 2  'add one to multiplier as INT rounds down and never equals 10
Line 25: Line 26:
{{CodeEnd}}
{{CodeEnd}}
:''Explanation:'' Procedure generates random integer values from 2 to 12 like a pair of dice.
:''Explanation:'' Procedure generates random integer values from 2 to 12 like a pair of dice.
''Example 2:'' Repeating a random number sequence with RANDOMIZE '''USING''' and a specific seed value in '''QB64''' only.
{{CodeStart}}seed = 10
{{Cl|RANDOMIZE}} seed
Print7
{{Cl|RANDOMIZE}} seed
Print7
{{Cl|PRINT}} "Press a key to start sequence over!"
K$ = {{Cl|INPUT$}}(1)
{{Cl|RANDOMIZE}} '''USING''' seed
Print7
{{Cl|SUB}} Print7
{{Cl|FOR...NEXT|FOR}} r = 1 TO 7
  {{Cl|PRINT}} {{Cl|RND}};
{{Cl|NEXT}}
{{Cl|PRINT}}: {{Cl|PRINT}}
{{Cl|END SUB}} '' ''
{{CodeEnd}}
: ''Explanation:'' The second RANDOMIZE statement just continues the sequence where USING in the third restarts the sequence.
''Example 3:'' Random fireworks explosions:
{{CodeStart}}{{Cl|RANDOMIZE}} {{Cl|TIMER}}
{{Cl|DEFINT}} A-Z
{{Cl|TYPE}} ftype
    vx {{Cl|AS}} {{Cl|SINGLE}}
    vy {{Cl|AS}} {{Cl|SINGLE}}
{{Cl|END}} {{Cl|TYPE}}
{{Cl|DIM}} frag(500) {{Cl|AS}} ftype 'fragments
{{Cl|DIM}} pi {{Cl|AS}} {{Cl|SINGLE}}
pi = 3.141593
{{Cl|DIM}} x {{Cl|AS}} {{Cl|SINGLE}}, y {{Cl|AS}} {{Cl|SINGLE}}
{{Cl|DIM}} t {{Cl|AS}} {{Cl|SINGLE}}, g {{Cl|AS}} {{Cl|SINGLE}}, p {{Cl|AS}} {{Cl|SINGLE}}
t = 0
g = 0.4 'gravity
p = 15 'explosion power
sw = 800
sh = 600
{{Cl|SCREEN}} {{Cl|_NEWIMAGE}}(sw, sh, 32)
DO
    {{Cl|FOR...NEXT|FOR}} i = 0 {{Cl|TO}} {{Cl|UBOUND}}(frag)
        frag(i).vx = {{Cl|RND}} * {{Cl|COS}}(2 * pi * {{Cl|RND}})
        frag(i).vy = {{Cl|RND}} * {{Cl|SIN}}(2 * pi * {{Cl|RND}})
    {{Cl|NEXT}}
    x = sw * {{Cl|RND}}
    y = sh * {{Cl|RND}}
    {{Cl|FOR...NEXT|FOR}} t = 0 {{Cl|TO}} 25 {{Cl|STEP}} 0.1
        {{Cl|LINE}} (0, 0)-(sw, sh), {{Cl|_RGB}}(0, 0, 0), BF
        {{Cl|FOR...NEXT|FOR}} i = 0 {{Cl|TO}} {{Cl|UBOUND}}(frag)
            {{Cl|PSET}} (x + t * p * frag(i).vx, y + t * p * frag(i).vy + g * t * t), {{Cl|_RGB}}(255, 255, 0)
        {{Cl|NEXT}}
        {{Cl|_DISPLAY}}
        {{Cl|_LIMIT}} 150
        {{Cl|IF...THEN|IF}} {{Cl|_KEYHIT}} = -27 {{Cl|THEN}} {{Cl|EXIT DO}}
    {{Cl|NEXT}}
{{Cl|LOOP}}
{{Cl|SYSTEM}}
{{CodeEnd}}{{small|Code by Ben}}





Latest revision as of 14:13, 27 December 2015

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 1: Using RANDOMIZE TIMER to set a different starting sequence of random 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.


Example 2: 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.


Example 3: 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

Code by Ben


See also:



Navigation:
Keyword Reference - Alphabetical
Keyword Reference - By Usage
Main Wiki Page