Three Paradigms For Mixing Coding And Games: Coding In A Game, Coding As A Game, And Coding For A Game