Question: Java Sudoku game This is a problem brought up in my coding class and have been struggling with it for a while now. Any help

Java Sudoku game

This is a problem brought up in my coding class and have been struggling with it for a while now. Any help on this would

be very much appreciated.

Java Sudoku game This is a problem brought up in my coding

Topics:

Big: Recursive backtracking

Small: Multidimentional arrays

Goal:

Read file - This will read in a file that is formatted like the following and place the content of the file in the board:

*9x9 sudoku board with 0-9*

Check puzzle - given some content entered into the board already, your program should apply the rules of the game and indicate if it is a legal board or not.

Solve puzzle - Solve the puzzle using a brute force recursive backtracking solution.

Apply the general recursive backtracking algorithm to this problem to solve the puzzles presented to you.

sudokuSolver.java

import javax.swing.*; import java.util.Arrays;

public class sudokuSolver {/** * After getting a file name, will read that file into a multi dimensional integer array. * * Prompt the user for input with either a jOpitonpane or with the console. * Read this file into the integer array and return it. * * @return an integer array filled with the correct puzzle data from the file. */ public int[][] readFile() { JOptionPane.showMessageDialog(null, "Reading your file."); int[][] stuff = new int[sudokuBoard.SIZE][sudokuBoard.SIZE]; return stuff; }/**

* Solves a sudoku puzzle. * Given the boards state, this method will use recursive backtracking to find a solution. * It will fill the board as it goes so when it has a solution it should return that solution * in the form of an int[][]. * * @param boardContent the current board content. * @return the solved board once the recursive backtracking solution has completed. */ public int[][] solvePuzzle(int[][] boardContent) { JOptionPane.showMessageDialog(null, "Doing a solve!"); return new int[sudokuBoard.SIZE][sudokuBoard.SIZE]; } /**

* Check the board for legality. * * This method will take in the current board state and check it over for any problems with the rules in the * game of sudoku. Report if the board is correct or not in a message dialog. * * @param boardContent */ public void checkPuzzle(int[][] boardContent) { String s = Arrays.deepToString(boardContent); JOptionPane.showMessageDialog(null, "Checking the puzzle. " + s); }}

sudokuBoard.java

import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.security.DigestInputStream; import java.util.Arrays;

/* Main runner and form logic for the sudoku puzzle. Logic will be written in sudokuSolver.java to build the actions for the buttons. */

public class sudokuBoard { public static final int SIZE = 9;

private JPanel jp; private JTextField q1r1s1; private JTextField q1r1s2; private JTextField q1r1s3; private JTextField q1r2s1; private JTextField q1r2s2; private JTextField q1r2s3; private JTextField q1r3s1; private JTextField q1r3s2; private JTextField q1r3s3; private JTextField q2r1s1; private JTextField q2r1s2; private JTextField q2r1s3; private JTextField q2r2s1; private JTextField q2r2s2; private JTextField q2r2s3; private JTextField q2r3s1; private JTextField q2r3s2; private JTextField q2r3s3; private JTextField q3r1s1; private JTextField q3r1s2; private JTextField q3r1s3; private JTextField q3r2s1; private JTextField q3r2s2; private JTextField q3r2s3; private JTextField q3r3s1; private JTextField q3r3s2; private JTextField q3r3s3; private JTextField q4r1s1; private JTextField q4r1s2; private JTextField q4r1s3; private JTextField q4r2s1; private JTextField q4r2s2; private JTextField q4r2s3; private JTextField q4r3s1; private JTextField q4r3s2; private JTextField q4r3s3; private JTextField q5r1s1; private JTextField q5r1s2; private JTextField q5r1s3; private JTextField q5r2s1; private JTextField q5r2s2; private JTextField q5r2s3; private JTextField q5r3s1; private JTextField q5r3s2; private JTextField q5r3s3; private JTextField q6r1s1; private JTextField q6r1s2; private JTextField q6r1s3; private JTextField q6r2s1; private JTextField q6r2s2; private JTextField q6r2s3; private JTextField q6r3s1; private JTextField q6r3s2; private JTextField q6r3s3; private JTextField q7r1s1; private JTextField q7r1s2; private JTextField q7r1s3; private JTextField q7r2s1; private JTextField q7r2s2; private JTextField q7r2s3; private JTextField q7r3s1; private JTextField q7r3s2; private JTextField q7r3s3; private JTextField q8r1s1; private JTextField q8r1s2; private JTextField q8r1s3; private JTextField q8r2s1; private JTextField q8r2s2; private JTextField q8r2s3; private JTextField q8r3s1; private JTextField q8r3s2; private JTextField q8r3s3; private JTextField q9r1s1; private JTextField q9r1s2; private JTextField q9r1s3; private JTextField q9r2s1; private JTextField q9r2s2; private JTextField q9r2s3; private JTextField q9r3s1; private JTextField q9r3s2; private JTextField q9r3s3;

private JButton readFile; private JButton checkPuzzle; private JButton solve;

private JTextField[][] puzzleEntry = new JTextField[9][9]; private String digits = "123456789"; private sudokuSolver solver = new sudokuSolver();

private void buildBoard(JTextField[][] puzzleEntry) { puzzleEntry[0][0] = q1r1s1; puzzleEntry[0][1] = q1r1s2; puzzleEntry[0][2] = q1r1s3; puzzleEntry[0][3] = q2r1s1; puzzleEntry[0][4] = q2r1s2; puzzleEntry[0][5] = q2r1s3; puzzleEntry[0][6] = q3r1s1; puzzleEntry[0][7] = q3r1s2; puzzleEntry[0][8] = q3r1s3;

puzzleEntry[1][0] = q1r2s1; puzzleEntry[1][1] = q1r2s2; puzzleEntry[1][2] = q1r2s3; puzzleEntry[1][3] = q2r2s1; puzzleEntry[1][4] = q2r2s2; puzzleEntry[1][5] = q2r2s3; puzzleEntry[1][6] = q3r2s1; puzzleEntry[1][7] = q3r2s2; puzzleEntry[1][8] = q3r2s3;

puzzleEntry[2][0] = q1r3s1; puzzleEntry[2][1] = q1r3s2; puzzleEntry[2][2] = q1r3s3; puzzleEntry[2][3] = q2r3s1; puzzleEntry[2][4] = q2r3s2; puzzleEntry[2][5] = q2r3s3; puzzleEntry[2][6] = q3r3s1; puzzleEntry[2][7] = q3r3s2; puzzleEntry[2][8] = q3r3s3;

puzzleEntry[3][0] = q4r1s1; puzzleEntry[3][1] = q4r1s2; puzzleEntry[3][2] = q4r1s3; puzzleEntry[3][3] = q5r1s1; puzzleEntry[3][4] = q5r1s2; puzzleEntry[3][5] = q5r1s3; puzzleEntry[3][6] = q6r1s1; puzzleEntry[3][7] = q6r1s2; puzzleEntry[3][8] = q6r1s3;

puzzleEntry[4][0] = q4r2s1; puzzleEntry[4][1] = q4r2s2; puzzleEntry[4][2] = q4r2s3; puzzleEntry[4][3] = q5r2s1; puzzleEntry[4][4] = q5r2s2; puzzleEntry[4][5] = q5r2s3; puzzleEntry[4][6] = q6r2s1; puzzleEntry[4][7] = q6r2s2; puzzleEntry[4][8] = q6r2s3;

puzzleEntry[5][0] = q4r3s1; puzzleEntry[5][1] = q4r3s2; puzzleEntry[5][2] = q4r3s3; puzzleEntry[5][3] = q5r3s1; puzzleEntry[5][4] = q5r3s2; puzzleEntry[5][5] = q5r3s3; puzzleEntry[5][6] = q6r3s1; puzzleEntry[5][7] = q6r3s2; puzzleEntry[5][8] = q6r3s3;

puzzleEntry[6][0] = q7r1s1; puzzleEntry[6][1] = q7r1s2; puzzleEntry[6][2] = q7r1s3; puzzleEntry[6][3] = q8r1s1; puzzleEntry[6][4] = q8r1s2; puzzleEntry[6][5] = q8r1s3; puzzleEntry[6][6] = q9r1s1; puzzleEntry[6][7] = q9r1s2; puzzleEntry[6][8] = q9r1s3;

puzzleEntry[7][0] = q7r2s1; puzzleEntry[7][1] = q7r2s2; puzzleEntry[7][2] = q7r2s3; puzzleEntry[7][3] = q8r2s1; puzzleEntry[7][4] = q8r2s2; puzzleEntry[7][5] = q8r2s3; puzzleEntry[7][6] = q9r2s1; puzzleEntry[7][7] = q9r2s2; puzzleEntry[7][8] = q9r2s3;

puzzleEntry[8][0] = q7r3s1; puzzleEntry[8][1] = q7r3s2; puzzleEntry[8][2] = q7r3s3; puzzleEntry[8][3] = q8r3s1; puzzleEntry[8][4] = q8r3s2; puzzleEntry[8][5] = q8r3s3; puzzleEntry[8][6] = q9r3s1; puzzleEntry[8][7] = q9r3s2; puzzleEntry[8][8] = q9r3s3; }

public JTextField getCell(int x, int y){ if(x puzzleEntry.length || y > puzzleEntry[x].length){ throw new IndexOutOfBoundsException("That spot is not in the board."); } return puzzleEntry[x][y]; }

public sudokuBoard() { buildBoard(puzzleEntry);

Arrays.stream(puzzleEntry).forEach( Row -> Arrays.stream(Row).forEach( field -> field.addKeyListener(new boardKeyAdapter(field, digits)) ));

readFile.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { setBoardContent(solver.readFile()); }});

checkPuzzle.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { solver.checkPuzzle(getBoardContent()); }});

solve.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { setBoardContent(solver.solvePuzzle(getBoardContent())); }}); }

private int[][] getBoardContent() { int[][] boardNumbers = new int[SIZE][SIZE]; for(int x = 0; x 0 ? Integer.parseInt(data) : 0; }} return boardNumbers;}

private void setBoardContent(int[][] intConent) { for(int x = 0; x 9? "" : intConent[x][y] + ""); }}}

private void createUIComponenets(){ }

public static void main(String[] args) { JFrame frame = new JFrame("sudokuBoard"); frame.setContentPane(new sudokuBoard().jp); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); }}

isi sudokuBoard Read FileCheckSove isi sudokuBoard Read FileCheckSove

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!