fix game tick implementation and pull out GameListener interface