As for me, I tend to favor the method that makes it easiest for the programmer. I really like types, so I make liberal use of them. Sometimes I use arrays of types, so that they can be indexed directly, but I don't often need to with the stuff I do; it's just as well to do an O(n/2) search through the list of types.
I suggest trying both (or all three, if you want to take CS_TBL's advice). Most likely, you'll probably end up with a nice mix. And you certainly will learn the differences, pros/cons, etc, which is a goal of yours, unless I'm mistaken.
As for the zoom thing, there is a graceful way. Basically, just resize the canvas. Check out this small example:
I suggest trying both (or all three, if you want to take CS_TBL's advice). Most likely, you'll probably end up with a nice mix. And you certainly will learn the differences, pros/cons, etc, which is a goal of yours, unless I'm mistaken.
As for the zoom thing, there is a graceful way. Basically, just resize the canvas. Check out this small example:
Global w=CreateWindow("Canvas Resize / Zoom", 200, 200, 400, 400, 0, 3) Global c=CreateCanvas(0,0,ClientWidth(w),ClientHeight(w),w) CreateTimer(60) SetBuffer(CanvasBuffer(c)) Notify "Press mouse buttons to zoom in/out" Repeat Select WaitEvent() Case $803 : End Case $201 If EventData() = 1 Then zoom = zoom + 50 Else zoom = zoom - 50 If zoom < -150 Then zoom = -150 ; don't get too small EndIf SetGadgetShape(c,0-zoom,0-zoom,400+zoom*2,400+zoom*2) Case $4001 Render() End Select Forever Function Render() ;Cls ;if you want Color Rand(256), Rand(256), Rand(256) Rect(Rand(ClientWidth(c)), Rand(ClientHeight(c)), Rand(10), Rand(10), True) FlipCanvas(c) End Function