200byteDemoChallenge!

BlitzMax Forums/BlitzMax Programming/200byteDemoChallenge!

The forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.

Amazing programs so far...
Here's my attempt... 255 bytes in size. :)
g=300;Graphics g,g,0;Local a[g*g];Repeat;a[Rand(g)]=1;For x=g To g*g
If(x+2)Mod g=0 Then x:+3
f=Rand(-3,2);If a[x]~a[x-g+f]
a[x-g+f]=0;a[x]=1;c=255;SetColor c,c,c;Plot x Mod g,x/g;SetColor 0,0,0;Plot x Mod g+f,x/g-1;End If;Next;Flip 0;Until KeyDown(27)

You can change the size of the graphics window with the variable g. Any optimisations are welcome! :)
Here's the "clean", commented code:
g=300
Graphics g,g,0 'square graphics window
Local a[g*g] 'initialise an array to hold the "snowflakes"
Repeat
	a[Rand(g)]=1 'spawn a snow flake
	For x=g To g*g 'update all snow flakes
		If(x+2)Mod g=0 Then x:+3  'skip some pixels if we're close to the edge to avoid "stuck" flakes
		f=Rand(-3,2)  'move flakes to the left or right randomly
		If a[x]~a[x-g+f]  'if the pixel the flake tries to move to is unoccupied
			a[x-g+f]=0    'move flake by swapping values
			a[x]=1
			c=255   
			SetColor c,c,c  'set color to white
			Plot x Mod g,x/g  'draw flake
			SetColor 0,0,0  
			Plot x Mod g+f,x/g-1  'remove trail
		End If
	Next
	Flip 0  'woo :)
Until KeyDown(27) 'repeat until escape is pressed