public AIBoard16x16 (int width, int height, String diff, User u){
		pencilMode_ON_OFF = false;
		user = u;
		difficulty = diff;
		this.setBackground(Color.WHITE);
		this.setLayout(new BorderLayout());
		JTextPane titleMessage = new JTextPane();
		JPanel title = new JPanel();
		title.setBackground(Color.WHITE);
		title.setLayout(new FlowLayout());
		this.add(title, BorderLayout.NORTH);
		title.add(titleMessage);
		titleMessage.setEditable(false);
		StyledDocument doc2 = (StyledDocument) titleMessage.getDocument();
		SimpleAttributeSet tileFont = new SimpleAttributeSet();
    	StyleConstants.setFontFamily(tileFont, "Serif");
    	StyleConstants.setFontSize(tileFont, 12);
    	StyleConstants.setForeground(tileFont, Color.GRAY);
		SimpleAttributeSet messageFont = new SimpleAttributeSet();
    	StyleConstants.setFontFamily(messageFont, "Serif");
    	StyleConstants.setFontSize(messageFont, 32);
    	StyleConstants.setForeground(messageFont, Color.darkGray);
    	StyleConstants.setAlignment(messageFont, StyleConstants.ALIGN_CENTER);
    	try {
			doc2.insertString(doc2.getLength(), "Solve this " + difficulty + " Puzzle, " + user.getUsername(), messageFont );
		} catch (BadLocationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		this.add(Box.createHorizontalStrut(100), BorderLayout.WEST);
		this.add(Box.createVerticalStrut(100), BorderLayout.SOUTH);
		mainBoard = new JPanel();
		this.add(mainBoard, BorderLayout.CENTER);
		mainBoard.setLayout(new GridLayout(4,4));
		mainBoard.setBorder(BorderFactory.createLineBorder(Color.BLACK));
		pencilPanel = new JPanel();
		pencilPanel.setLayout(new GridLayout(4,4));
		pencilPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
		JPanel sideBar = new JPanel();
		sideBar.setLayout(new GridLayout(3,1));
		JButton pencilMode = new JButton("Pencil Mode");
		pencilMode.addActionListener(new ActionListener() {
            
            /**
			 * Action Event after pencilMode button is pressed
			 * It switches the mode to PencilMode
			 * @param ae begins Action Event
			 */
		    public void actionPerformed(ActionEvent ae)
		    {
		    	switchPencilMode();
		    }
		});
		pencilModeNotification = new JTextField("  Pencil Mode: OFF");
		pencilModeNotification.setForeground(Color.RED);
		pencilModeNotification.setBackground(Color.WHITE);
		pencilModeNotification.setEditable(false);
		sideBar.add(pencilModeNotification);
		sideBar.add(pencilMode);
		JButton quit = new JButton("Quit");
		quit.addActionListener(new ActionListener() {
            
            /**
			 * Action Event after quit button is pressed
			 * It sends the user back to the menu
			 * @param ae begins Action Event
			 */
		    public void actionPerformed(ActionEvent ae){
		    	backToMenu();
		    }
		});
		sideBar.add(quit);
		this.add(sideBar,BorderLayout.EAST);
		JPanel fontColorPanel = new JPanel();
		String[] colors = {"Black","Cyan","Green","Magenta", "Orange", "Pink","Red", "Yellow" };
		final JComboBox colorList = new JComboBox(colors);
        colorList.addActionListener(new ActionListener() {
            
            /**
			 * Action Event after color is changed
			 * It changes the color of the text
			 * @param ae begins Action Event
			 */
			public void actionPerformed(ActionEvent e) {
				changeFontColor((String)colorList.getSelectedItem());
			}
			
		});
		JTextField colorSelectPrompt = new JTextField("Choose a color");
		colorSelectPrompt.setEditable(false);
		fontColorPanel.setLayout(new BoxLayout(fontColorPanel, BoxLayout.Y_AXIS));
		fontColorPanel.add(colorSelectPrompt);
		fontColorPanel.add(colorList);
		fontColorPanel.add(Box.createRigidArea(new Dimension(0,700)));
		fontColorPanel.setBackground(Color.WHITE);
		this.add(fontColorPanel, BorderLayout.WEST);
		JPanel timerPanel = new JPanel();
		timerPanel.setLayout(new BoxLayout(timerPanel, BoxLayout.X_AXIS));
		timerPanel.setBackground(Color.WHITE);
		timeDisplay = new JTextField();
		timeDisplay.setEditable(false);
		timerPanel.add(Box.createRigidArea(new Dimension(340,50)));
		timerPanel.add(timeDisplay);
		timerPanel.add(Box.createRigidArea(new Dimension(340,50)));
        
        /**
		 * Action Listener Class that implements the timer
		 * for the Sudoku puzzle.
		 *
		 * @version 0
		 * @author Garrett Gutierrez
		 */
		class CountdownTimerListener implements ActionListener {
            
             /**
			  * Implements a timer and updates it as the User
			  * continues to solve the puzzle.
			  * @param e begins Action Event
			  */
		      public void actionPerformed(ActionEvent e) {
		    	currentTime++;  
		        minutes = currentTime/60;
		        seconds = currentTime%60;
		        timeDisplay.setText("Current Time on Puzzle: " + String.valueOf(minutes) + " minutes and " + String.valueOf(seconds) + " seconds");
	
		      }
		}
		timer = new Timer(1000,new CountdownTimerListener());
		timer.start();	
		this.add(timerPanel, BorderLayout.SOUTH);
		
		
		entries = new JTextField[16][16];
		pencilEntries = new JTextField[16][16];
		JTextFieldLimit [][] doc = new JTextFieldLimit[16][16];
		JPanel [] regions = new JPanel[16];
		pencilRegions = new JPanel[16];
		int i = 0, j = 0, k = 0, l = 0, counter = 0;
		/* Initialize 4x4 regions on mainboard */
		for (i = 0; i < 16; i++) {
			regions[i] = new JPanel();
			regions[i].setLayout(new GridLayout(4,4));
			regions[i].setBorder(BorderFactory.createLineBorder(Color.GRAY));
			mainBoard.add(regions[counter]);
			
			pencilRegions[i] = new JPanel();
			pencilRegions[i].setLayout(new GridLayout(4,4));
			pencilRegions[i].setBorder(BorderFactory.createLineBorder(Color.GRAY));
			pencilPanel.add(pencilRegions[counter]);
			counter++;
		}
		counter = 1;
		for (i = 0; i < 16; i=i+4) {
			for (j = 0; j < 16; j=j+4) {
				for (k = i; k < i + 4; k++) {
					for (l = j; l < j + 4; l++) {
						pencilEntries[k][l] = new JTextField();
						pencilEntries[k][l].setHorizontalAlignment(JTextField.CENTER);
						pencilRegions[counter-1].add(pencilEntries[k][l]);
						
						entries[k][l] = new JTextField(String.valueOf(counter%16));
						entries[k][l].setHorizontalAlignment(JTextField.CENTER);
						entries[k][l].addKeyListener(new MoveListener());
						doc[k][l] = new JTextFieldLimit(1);
						try {
							doc[k][l].insertString(doc[k][l].getLength(), String.valueOf(counter%9), tileFont);
						} catch (BadLocationException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						entries[k][l].setDocument(doc[k][l]);
						regions[counter-1].add(entries[k][l]);
					}
				}
				counter++;
			}
		}
		loadPuzzle(difficulty);
		AI = new AIPlayer(difficulty,"16x16", entries);
	}