-
Notifications
You must be signed in to change notification settings - Fork 0
/
SudokuGame
121 lines (102 loc) · 3.61 KB
/
SudokuGame
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
SudokuGame
import java.util.Scanner;
public class SudokuGame {
public static void main(String[] args) {
int[][] puzzle = generateSudokuPuzzle();
int[][] solution = copyPuzzle(puzzle);
// Generate a puzzle by removing some numbers
generatePuzzle(puzzle);
Scanner scanner = new Scanner(System.in);
System.out.println("Welcome to Sudoku Game!");
printSudoku(puzzle);
while (!isSudokuSolved(puzzle, solution)) {
System.out.print("Enter row (1-9) and column (1-9) to fill (e.g., 3 5 7): ");
int row = scanner.nextInt() - 1;
int col = scanner.nextInt() - 1;
int value = scanner.nextInt();
if (isValidMove(puzzle, row, col, value)) {
puzzle[row][col] = value;
printSudoku(puzzle);
} else {
System.out.println("Invalid move. Try again.");
}
}
System.out.println("Congratulations! You solved the Sudoku puzzle!");
scanner.close();
}
private static int[][] generateSudokuPuzzle() {
// A completed Sudoku solution
int[][] solution = {
{5, 3, 4, 6, 7, 8, 9, 1, 2},
{6, 7, 2, 1, 9, 5, 3, 4, 8},
{1, 9, 8, 3, 4, 2, 5, 6, 7},
{8, 5, 9, 7, 6, 1, 4, 2, 3},
{4, 2, 6, 8, 5, 3, 7, 9, 1},
{7, 1, 3, 9, 2, 4, 8, 5, 6},
{9, 6, 1, 5, 3, 7, 2, 8, 4},
{2, 8, 7, 4, 1, 9, 6, 3, 5},
{3, 4, 5, 2, 8, 6, 1, 7, 9}
};
return copyPuzzle(solution);
}
private static void generatePuzzle(int[][] puzzle) {
// Remove some numbers to create a puzzle
int numbersToRemove = 40;
while (numbersToRemove > 0) {
int row = (int) (Math.random() * 9);
int col = (int) (Math.random() * 9);
if (puzzle[row][col] != 0) {
puzzle[row][col] = 0;
numbersToRemove--;
}
}
}
private static int[][] copyPuzzle(int[][] puzzle) {
int[][] copy = new int[9][9];
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
copy[i][j] = puzzle[i][j];
}
}
return copy;
}
private static void printSudoku(int[][] puzzle) {
System.out.println("Sudoku Puzzle:");
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
System.out.print(puzzle[i][j] == 0 ? "_ " : puzzle[i][j] + " ");
}
System.out.println();
}
System.out.println();
}
private static boolean isValidMove(int[][] puzzle, int row, int col, int value) {
// Check if the value is not present in the same row or column
for (int i = 0; i < 9; i++) {
if (puzzle[row][i] == value || puzzle[i][col] == value) {
return false;
}
}
// Check if the value is not present in the same 3x3 box
int boxStartRow = row - row % 3;
int boxStartCol = col - col % 3;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (puzzle[boxStartRow + i][boxStartCol + j] == value) {
return false;
}
}
}
return true;
}
private static boolean isSudokuSolved(int[][] puzzle, int[][] solution) {
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if (puzzle[i][j] != solution[i][j]) {
return false;
}
}
}
return true;
}
}