design patterns for game programming course