public void run() {
   long lastTime = System.nanoTime();
   double nsPerTick = 1000000000D / 60D;
   int ticks = 0;
   int frames = 0;
   long lastTimer = System.currentTimeMillis();
   double delta = 0.0;
   while (running) {
     long now = System.nanoTime();
     delta += (now - lastTime) / nsPerTick;
     lastTime = now;
     boolean shouldRender = false;
     while (delta >= 1) {
       ticks++;
       update();
       delta -= 1;
       shouldRender = true;
     }
     if (shouldRender) {
       frames++;
       paint(game.getWindow().getGraphics());
     }
     if (System.currentTimeMillis() - lastTimer >= 1000) {
       lastTimer += 1000;
       if (ticks >= 55 && frames >= 50) {
         RNG.extraTime();
         RNG.extraTime();
       }
       frames = 0;
       ticks = 0;
     }
   }
 }
 public void init() {
   RNG.init();
 }
 public GameThread(Game param) {
   game = param;
   RNG.init();
   gsm = new GameStateManager(game);
   running = true;
 }