@Override
	public void paint(Graphics g, Component game) {

		if (gameState == GameState.RUNNING) {

			// draw background
			g.drawImage(background, bg1.getBgX(), bg1.getBgY(), game);
			g.drawImage(background, bg2.getBgX(), bg2.getBgY(), game);

			// draw tiles
			paintTiles(g, game);

			// paint projectiles
			ArrayList<Bullet> projectiles = hero.getProjectiles();
			for (int i = 0; i < projectiles.size(); i++) {
				Bullet p = projectiles.get(i);
				g.setColor(Color.YELLOW);
				g.fillRect(p.getX(), p.getY(), 10, 5);
			}

			// draw player
			currentPlayerImage = hero.getSprite().getAnimation().getImage();
			g.drawImage(currentPlayerImage, hero.getCenterX() - 20,
					hero.getCenterY() - 20, game);

			// draw enemies
			for (Enemy enemy : enemies) {
				currentEnemyImage = enemy.getSprite().getAnimation().getImage();
				g.drawImage(currentEnemyImage, enemy.getCenterX() - 48,
						enemy.getCenterY() - 48, game);
			}

			// draw score
			g.setFont(font);
			g.setColor(Color.WHITE);
			g.drawString("Score :" + Integer.toString(score), 700, 30);

			if (DEBUG_ENABLED) {
				showDebug(g);
				// draw boundaries around player
				g.setColor(Color.LIGHT_GRAY);
				for (Rectangle rect : boundaries) {
					g.drawRect((int) rect.getX(), (int) rect.getY(),
							(int) rect.getWidth(), (int) rect.getHeight());
				}

			}
		} else if (gameState == GameState.DEAD) {
			g.setColor(Color.BLACK);
			g.fillRect(0, 0, 800, 480);
			g.setColor(Color.WHITE);
			g.drawString("Game Over!!!", 320, 240);
			g.setColor(Color.BLUE);
			g.drawString("Hit ENTER to try again", 270, 290);
		}
	}