@Override
  public void run() {
    if (state == GameState.Running) {
      while (true) {
        robot.update();
        if (robot.isJumped()) {
          currentSprite = characterJumped;
        } else if (robot.isJumped() == false && robot.isDucked() == false) {
          currentSprite = anim.getImage();
        }

        ArrayList projectiles = robot.getProjectiles();
        for (int i = 0; i < projectiles.size(); i++) {
          Projectile p = (Projectile) projectiles.get(i);
          if (p.isVisible() == true) {
            p.update();
          } else {
            projectiles.remove(i);
          }
        }

        updateTiles();
        hb.update();
        hb2.update();
        bg1.update();
        bg2.update();
        animate();
        repaint();
        try {
          Thread.sleep(17);
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
        if (robot.getCenterY() > 500) {
          state = GameState.Dead;
        }
      }
    }
  }
  @Override
  public void keyPressed(KeyEvent e) {

    switch (e.getKeyCode()) {
      case KeyEvent.VK_UP:
        System.out.println("Move up");
        break;

      case KeyEvent.VK_DOWN:
        currentSprite = characterDown;
        if (robot.isJumped() == false) {
          robot.setDucked(true);
          robot.setSpeedX(0);
        }
        break;

      case KeyEvent.VK_LEFT:
        robot.moveLeft();
        robot.setMovingLeft(true);
        break;

      case KeyEvent.VK_RIGHT:
        robot.moveRight();
        robot.setMovingRight(true);
        break;

      case KeyEvent.VK_SPACE:
        robot.jump();
        break;

      case KeyEvent.VK_CONTROL:
        if (robot.isDucked() == false && robot.isJumped() == false) {
          robot.shoot();
          robot.setReadyToFire(false);
        }
        break;
    }
  }