public Game() {
		if (game != null) { game.fallTimer.stop(); }
		
		game = this;
		this.setLayout(null);
		this.setOpaque(false);
		
		difficulty = Options.difficulty;
		multipleLives = Options.multipleLives;
		lives = multipleLives ? 3 : 1;
		
		fallTimer = new Timer(FALL_RATE, this);
		holdUsed = false;
		
		resumeButton = new JButton("Click to Resume");
		resumeButton.setFont(Program.displayFont);
		resumeButton.setBounds(215, 290, 175 ,30); //gameGrid.setBounds(150, 10, 305, 600);
		resumeButton.addActionListener(this);
		
		JLabel
		livesLabel = new JLabel("Lives:");
		livesLabel.setForeground(Program.foreground);
		livesLabel.setHorizontalAlignment(SwingConstants.CENTER);
		livesLabel.setFont(Program.displayFont(Font.BOLD, 5));
		livesLabel.setBounds(25, 225, 100, 20);
		
		livesCountLabel = new JLabel("");
		livesCountLabel.setForeground(Color.YELLOW);
		livesCountLabel.setHorizontalAlignment(SwingConstants.CENTER);
		livesCountLabel.setFont(Program.displayFont(Font.BOLD, 10));
		livesCountLabel.setBounds(25, 250, 100, 30);
		
		if (multipleLives) {
			this.add(livesLabel);
			this.add(livesCountLabel);
		}
		
		JLabel
		levelLabel = new JLabel("Level:");
		levelLabel.setForeground(Program.foreground);
		levelLabel.setHorizontalAlignment(SwingConstants.CENTER);
		levelLabel.setFont(Program.displayFont(Font.BOLD, 5));
		levelLabel.setBounds(25, 300, 100, 20);
		this.add(levelLabel);
		
		levelCountLabel = new JLabel("");
		levelCountLabel.setForeground(Color.decode("#6ED3FF"));
		levelCountLabel.setHorizontalAlignment(SwingConstants.CENTER);
		levelCountLabel.setFont(Program.displayFont(Font.BOLD, 10));
		levelCountLabel.setBounds(25, 325, 100, 30);
		this.add(levelCountLabel);
		
		JLabel
		linesLabel = new JLabel("Goal:");
		linesLabel.setForeground(Program.foreground);
		linesLabel.setHorizontalAlignment(SwingConstants.CENTER);
		linesLabel.setFont(Program.displayFont(Font.BOLD, 5));
		linesLabel.setBounds(25, 375, 100, 20);
		this.add(linesLabel);
		
		linesCountLabel = new JLabel("");
		linesCountLabel.setForeground(Color.RED);
		linesCountLabel.setHorizontalAlignment(SwingConstants.CENTER);
		linesCountLabel.setFont(Program.displayFont(Font.BOLD, 10));
		linesCountLabel.setBounds(25, 400, 100, 30);
		this.add(linesCountLabel);
		
		JLabel
		scoreLabel = new JLabel("Score:");
		scoreLabel.setForeground(Program.foreground);
		scoreLabel.setHorizontalAlignment(SwingConstants.CENTER);
		scoreLabel.setFont(Program.displayFont(Font.BOLD, 5));
		scoreLabel.setBounds(25, 450, 100, 20);
		this.add(scoreLabel);
		
		scoreCountLabel = new JLabel("");
		scoreCountLabel.setForeground(Color.decode("#6ED3FF"));
		scoreCountLabel.setHorizontalAlignment(SwingConstants.CENTER);
		scoreCountLabel.setFont(Program.displayFont(Font.BOLD, 10));
		scoreCountLabel.setBounds(25, 475, 100, 30);
		this.add(scoreCountLabel);
		
		JLabel
		highScoreLabel = new JLabel("Score:");
		highScoreLabel.setForeground(Program.foreground);
		highScoreLabel.setHorizontalAlignment(SwingConstants.CENTER);
		highScoreLabel.setFont(Program.displayFont(Font.BOLD, 5));
		highScoreLabel.setBounds(25, 525, 100, 20);
		this.add(highScoreLabel);
		
		highScoreCountLabel = new JLabel("");
		highScoreCountLabel.setForeground(Color.RED);
		highScoreCountLabel.setHorizontalAlignment(SwingConstants.CENTER);
		highScoreCountLabel.setFont(Program.displayFont(Font.BOLD, 10));
		highScoreCountLabel.setBounds(25, 550, 100, 30);
		this.add(highScoreCountLabel);
		
		consecutive = 0;
		score = 0;
		level = 0;
		linesToLevel = 0;
		updateGameLevel();
		
		JLabel
		holdLabel = new JLabel("Hold");
		holdLabel.setForeground(Program.foreground);
		holdLabel.setHorizontalAlignment(SwingConstants.CENTER);
		holdLabel.setFont(Program.displayFont(Font.BOLD, 15));
		holdLabel.setBounds(25, 20, 100, 40);
		this.add(holdLabel);
		
		holdGrid = new Grid(true);
		holdGrid.setBounds(25, 70, 100, 100);
		this.add(holdGrid);
		
		holdBlock = null;
		
		gameGrid = new Grid(false);
		gameGrid.setBounds(150, 10, 305, 600);
		this.add(gameGrid);
		
		gameBlock = new Block(gameGrid);
		
		inQueueGrid = new Grid[QUEUE_SIZE];
		inQueueBlock = new Block[QUEUE_SIZE];
		
		JLabel
		nextLabel = new JLabel("Next");
		nextLabel.setForeground(Program.foreground);
		nextLabel.setHorizontalAlignment(SwingConstants.CENTER);
		nextLabel.setFont(Program.displayFont(Font.BOLD, 15));
		nextLabel.setBounds(480, 20, 100, 40);
		this.add(nextLabel);
		
		for (int i = 0; i < QUEUE_SIZE; ++i) {
			inQueueGrid[i] = new Grid(true);
			inQueueGrid[i].setBounds(480, 70 + 110 * i, 100, 100);
			this.add(inQueueGrid[i]);
			
			inQueueBlock[i] = new Block((inQueueGrid[i]));
		}
		
		MainFrame.setGamePanel(this);
		fallTimer.start();
	}