Design Patterns for Game Programming