Game Programming Algorithms And Techniques A Platform Agnostic Approach