A first attempt with BMax - Feedback Appreciated

BlitzMax Forums/BlitzMax Beginners Area/A first attempt with BMax - Feedback Appreciated

Not sure about 'BlitzMax Beginners Area', i need a 'BlitzMax Forum Beginners Area' to hone my posting skills ;) Here goes for the third time, hopefully with a codebox, a couple more comments and better formatting, preview post was a good idea this time too...
'----------------------------------------
' Matt's little radioactive decay program
'----------------------------------------

'--------------------------------
' Setup variables
'--------------------------------
Strict
Global atoms[24,24] 'an array to hold the states of all the atoms, 1 = active, 0 = decayed
Global undecayed[100] 'an array to store the number of undecayed atoms after each second
Global time:Int = 0
Global graphx:Int = 390 'position of graph on screen
Global graphy:Int = 110 'position of graph on screen
Global atomx:Int = 100 'position of atoms diagram on screen
Global atomy:Int = 100 'position of atoms diagram on screen
Global probofdecay:Float = 0.05 'probability of atom decaying each second
Global height:Int = 600
Global width:Int = 800
Const hdivision:Int = 600/20 'for drawing gradient background
SeedRnd MilliSecs()

' --------------
' Start graphics
' --------------

'SetGraphicsDriver GLMax2DDriver()
Graphics width,height,24

'-----------
' initialise
'-----------

newstart()

' ---------
' main loop
' ---------

While Not KeyHit(KEY_ESCAPE)


		If KeyHit(KEY_SPACE) And time < 99
			For Local t = 1 To 99
				time:+1
				decayatoms()
				drawatoms()
				countatoms()
				drawscreen()
			Next
		EndIf
		
		If KeyHit(KEY_SPACE) And time = 99
					newstart()
		EndIf
				
		If KeyHit(KEY_ESCAPE)
					FlushMem
					End
		EndIf


Wend 

End



'========== FUNCTIONS ================


'-------------------------------------------------------
' populate atoms - sets every atom in array atoms() to 1
'-------------------------------------------------------

Function populateatoms()
For Local x:Int = 0 To 23
	For Local y:Int = 0 To 23
		
		atoms[x,y] = 1
	Next
Next
EndFunction


'------------------------------------------------------------------------
' draw atoms - draw the square of atoms, colour coded, to the back buffer
'------------------------------------------------------------------------

Function drawatoms()

For Local x:Int = 0 To 23
	For Local y:Int = 0 To 23
		If atoms[x,y] = 1
			SetColor ((atoms[x,y] * 255),0,0)
		Else
			SetColor(0,0,128)
		EndIf		
		DrawText "o",(10 + (x * 10))+atomx,(10 + (y * 10))+atomy
	Next
Next

EndFunction

'----------------------------------------------------
' count atoms - counts the number of atoms remaining (i.e. equal to 1)
'----------------------------------------------------

Function countatoms()

For Local x:Int = 0 To 23
	For Local y:Int = 0 To 23
		
		undecayed[time] = undecayed[time] + atoms[x,y]
	
	Next
Next
EndFunction

'-----------------------------------------------------------------
' decay atoms - change array value to 0 for each atom which decays
'-----------------------------------------------------------------

Function decayatoms()
' decay atoms
For Local x:Int = 0 To 23
	For Local y:Int = 0 To 23
		
		If atoms[x,y] = 1 And Rnd() < probofdecay
			atoms[x,y] = 0
		EndIf
	
	Next
Next
EndFunction

'--------------------------
' draw graph to back buffer
'--------------------------

Function drawgraph()

	SetColor(255,255,255)
	DrawRect(graphx,graphy,305,305)
	For Local x = 0 To time
		SetColor(0,0,0)
		DrawOval((x * 3)+graphx,(Int(((Float(undecayed[0]) - Float(undecayed[x]))/Float(undecayed[0]))*300))+graphy,5,5)
			If x>0
			 	SetColor(0,0,255)
				DrawOval((x*3)+graphx,(300-Int(((Float(undecayed[x-1]) - Float(undecayed[x]))/Float(undecayed[0]))*300))+graphy,5,5)
			EndIf
	Next
	
SetColor(0,0,0)
SetClsColor(0,0,0)
EndFunction

'----------------------------------------------
' drawscreen - draws the screen image and flips
'----------------------------------------------

Function drawscreen()
	SetClsColor(0,0,64)
	Cls
	drawbg()
	SetColor(255,255,0)
	DrawText("Probability of Decay = "+Int(probofdecay*100)+"%",70,430)
	DrawText("Atoms Remaining = "+undecayed[time],70,370)
	DrawText("Time = "+time+" seconds (99 max)",70,400)
	If time < 99 
		DrawText("Press <SPACE> to start",70,460)
	Else
		DrawText("Press <ESCAPE> to exit or <SPACE> to reset.",70,460)
	EndIf
	SetColor(255,255,255)
	DrawText "MemUsage="+MemUsage(),0,0
	drawatoms()
	drawgraph()
	Flip
	FlushMem
EndFunction



'-------------------------------------------------------
' drawbg - draws the background & non-changing text etc.
'-------------------------------------------------------

Function drawbg()
	Local intensity:Int = 0

	For Local h:Int = 0 To height Step hdivision
		intensity:+1
		SetColor(0,0,intensity*5)
		DrawRect(0,h,width,hdivision)
	Next
	SetColor(255,255,255)
	DrawRect(graphx-10,graphy-10,325,360)
	SetColor(0,0,0)
	DrawRect(graphx-5,graphy-5,315,350)
	SetColor(255,255,255)
	DrawRect(graphx,graphy+310,305,30)
	SetColor(0,0,0)
	DrawText("Atoms Remaining",graphx+20,graphy+315)
	SetColor(0,0,255)
	DrawText("Activity",graphx+220,graphy+315)
	SetBlend(ALPHABLEND)
	SetAlpha(0.2)
	SetColor(255,255,255)
	DrawRect(atomx+5,atomy+8,250,250)
	SetScale(6,6)
	DrawText("ATOMS",atomx+10,atomy+100)
	SetAlpha(1)
	SetBlend(MASKBLEND)
	SetScale(1,1)
EndFunction


'----------------------------------------
' newstart - reset to original conditions
'----------------------------------------

Function newstart()
	time = 0
	populateatoms()
	countatoms()
	drawscreen()

EndFunction


Anyway, thanks for bearing with me, any comments (about my code, rather than my lack of forum skill) would still be appreciated :)