Not very random

Blitz3D Forums/Blitz3D Beginners Area/Not very random

Tobo(Posted 2005) [#1]
Wotcha, folks.

Can anyone tell me why the following code:
Graphics 800,600,32,2

SetBuffer BackBuffer()

SeedRnd MilliSecs

Type particle
	Field x,y
	Field angle
	Field red,green,blue
End Type

; MAIN LOOP
While Not KeyHit(1)
	
	Cls
	If MouseDown(1) Then boom
	updateboom
	Flip
	
Wend
End



Function boom()
	For f=1 To 10
		part.particle = New particle
		part\x=MouseX()
		part\y=MouseY()
		part\angle=Rnd(360)
		part\red=Rnd(255)
		part\green=Rnd(255)
		part\blue=Rnd(255)
	Next
End Function


Function updateboom()
	For part.particle = Each particle
		part\x=part\x + Cos(part\angle)*4
		part\y=part\y + Sin(part\angle)*4
		Color (part\red),(part\green),(part\blue)
		Rect part\x,part\y,4,4
		If part\x > 800 Or part\x<0 Or part\y>600 Or part\y<0 Then Delete part
	Next
End Function


Produces an 'ordered' sun-ray effect when the mouse button is held down?

Shouldn't my SEEDRND MILLISECS and PART\ANGLE=RND(360) produce a more .......random effect?

Much ta for any help.

Tobo.


ervin(Posted 2005) [#2]
Hi Tobo.

Take the SeedRnd out of the top part of the program, and put it into function boom() like so:

Function boom()
	For f=1 To 10
		SeedRnd MilliSecs()

		part.particle = New particle
		part\x=MouseX()
		part\y=MouseY()
		part\angle=Rnd(360)
		part\red=Rnd(255)
		part\green=Rnd(255)
		part\blue=Rnd(255)
	Next
End Function



tonyg(Posted 2005) [#3]
seedrnd millisecs()


big10p(Posted 2005) [#4]
What tonyg said. Without the brackets (indicating a function) blitz thinks 'millisecs' is a variable holding zero, so it's equivalent to 'SeedRnd 0'.


ervin(Posted 2005) [#5]
That is correct.
Millisecs needs the brackets after it, but it still won't work unless it is put into the For loop inside function boom.

I think.


tonyg(Posted 2005) [#6]
Not really. Reseeding might give more random results but the single seedrnd at the top should be good enough for most things.


Tobo(Posted 2005) [#7]
Hi, guys. Thanks for your help.

Apparently it was my use of integers, rather than floats.

Giving the types PART\X, PART\Y and PART\ANGLE a # seems to do the trick.

This was answered for me by someone on the CW.com website. May I ask what people's views are about crossposting between here and there, as i don't really want to annoy anyone if doing so!

Many thanks,

Tobo.