Game Programming Algorithms and Techniques: A Platform-Agnostic Approach