Thanks for all the help guys. I got it working now. I wasn't as easy as I first thought, but a lot easier than I re-thought. Giving each segment the x,y of the previous one didn't work because the bitmaps are 24x24 (probably soon to be 12x12) and the snake moves 1 pixel at a time, so all the images were just bunching up 1 pixel before the previous one.

I had to write a procedure that just moved each segment 1 pixel and if the current segment wasn't moving in the same direction as the previous one then keep it moving forward until the X or Y was the same (depending on the direction they were both moving) and then change the direction to the same as the previous segment. It wasn't too difficult to do this, it only took about half a dozen lines so I still get around 100fps (assuming I'm calculating the fps right).

The only problem with this is if you turn 90A¬? and then 90A¬? back the other way too quickly then the number 2 segment thinks it's still following the head and disconnects to continue off into the wild blue yonder, taking the rest of the snake with it... I haven't put much thought into fixing this yet.

That game state article and code looks very handy too, thanks Ali. I already had something similar, but yours is a lot more detailed.