Any sugestions for this setup? (MaxGui)

BlitzMax Forums/BlitzMax Beginners Area/Any sugestions for this setup? (MaxGui)

Abomination(Posted 2006) [#1]
I want to make some kind of "life-emulation", where generations of "Pixel-beings" can procreate the next.
So I want the program to be able to run in the "background", while the user can do something else.
I have cut and pasted something of a start, but is this a good way to do something like this?
Any suggestions of improvements or alternatives will be greatly apreciated. :)

The code so far:
SuperStrict

Global TankWidth:Int=255,TankHeight:Int=255
Global CanvasWidth:Int=400, CanvasHeight:Int=300
Global ButtonHeight:Int=32, BorderSize:Int=16 

Global EWindow:TGadget=CreateWindow("Evolution", 100,100,CanvasWidth+2*BorderSize,CanvasHeight+ButtonHeight+2*BorderSize)
Global ECanvas:TGadget=CreateCanvas(BorderSize,BorderSize,CanvasWidth,CanvasHeight,EWindow)

Global x:Int=0
Global y:Int=0
Global t:Int,u:Int
ActivateGadget ECanvas

Repeat
  WaitEvent()
  Select EventID()
  Case EVENT_WINDOWCLOSE
     End
  Case EVENT_MOUSEENTER
     HideMouse
 Case EVENT_MOUSELEAVE
     ShowMouse
  Case EVENT_MOUSEMOVE
     x=EventX()
     y=EventY()
  Case EVENT_GADGETPAINT
   End Select

    SetGraphics CanvasGraphics (ECanvas)
    Cls
    For t=0 To Tankwidth-1
		For u=0 To TankHeight-1
			SetColor (Rnd(0,255),Rnd(0,255),Rnd(0,255))
			Plot t,u
		Next
	Next		
	DrawRect  x,y,40,40
    Flip
     RedrawGadget(ECanvas)

Forever

(Of course it also need some buttons and other kind of control.)


CS_TBL(Posted 2006) [#2]
Get rid of the globals, and especially globals like x, y, t etc. Those are typically used for local loops and such.
Make a TLifeemulation type, hide them there, don't put all these things as globals in your app or it'll seriously limit your app after a few hours/days. (depending on your code-speed)

Furthermore, not really a bug orso, but be aware that your Redrawgadget(ECanvas) could 've been without the ( ).

blah=Bla(a,b,c)

Bla a,b,c

see the difference?

The first one requires ( ) because Bla is a function returning a value. The second one doesn't return anything, so doesn't need ( ). Your code will function with them however.. it's more a matter of style..


Abomination(Posted 2006) [#3]
@CS_TBL:
Thanks; One picks up some habits in ones Programminglife :)
I use those globals that "lazy" way when I'm testing stuff and don't want to declare them every time I write a temporary function. pfft :)

In the mean time the little program as seen above has progressed some and instead of being random, the pixelbeings are moving around on their own. (there is a lot of them)
Now I encounter some strange "hickups". The movement stops and then start again, and I cant figure out why.
I have tried to place the drawing stuff under the case EVENT_GADGETPAINT, but thas didn't help.
Can it be the way I use RedrawGadget ECanvas?
Is it WindowsXP?
Is it my PC?
Or is it Me?


CS_TBL(Posted 2006) [#4]
Can't say without seeing it.


Brucey(Posted 2006) [#5]
How are you handling your Canvas redraw?

You might prefer to use a Timer, rather than call redraw after the flip, otherwise the frame update will more likely be subject to skipping etc.

Have a look at the CreateCanvas example in the docs.
It uses a timer which generates an EVENT_TIMERTICK event per "tick" :
CreateTimer 60


you could then have this in your select...
    Case EVENT_TIMERTICK
        RedrawGadget ECanvas


Might make it run a bit smoother?