Writing your own engine for 2D games in C++: basic considerations
positech.co.uk