Yesterday was a refactoring day: I shuffled the code a bit, made it suck a bit less (for instance, I changed most of my doubles into floats, added some methods to separate responsibilities better, etc.)
But the big thing today was solving the problem of the runaway turtle. It is still possible to move it past the screen border, but now, when the turtle is technically invisible, there is a small turtle icon (i.e., the usual turtle image scaled down by a factor of two) at the border in the right place. Here, the “right place” means the nearest-point projection of the actual turtle position onto the screen. (I kind of like the fact that this very notion, also called a “metric projection”, played some role in the first academic paper with my name on it.)
Also, it occurred to me that the idea of getting rid of the buttons and steering the turtle by tapping in front of it or at its side has one problem: what if the turtle is near the screen border? This could be solved by always keeping the turtle in the middle of the screen and moving the drawing “beneath it”. I like the idea – it’s like, say, Logo meets an FPS – but it might be confusing for beginners. OTOH, this could be pretty cool way to implement a turtle on a non-orientable manifold.
All these considerations seem to be symptoms of creeping featurism. That’s not good. It would be cool to add this, and that, and that, etc. – but too many possibilities lead to confusion, confusion leads to frustration, and frustration leads to suffering. I’ll have to remember the famous Antoine de Saint Exupéry’s quote on perfection. And the biggest challenge is to add programmability – interactive drawing is nice, but it’s not the ultimate goal of my project!