port basic Game.java from LWJGL with a bit of immutability