Introduction to game programming principles