数独游戏完整代码java
时间: 2023-10-14 09:25:17 浏览: 97
Java数独游戏代码
以下是一个简单的数独游戏的完整Java代码:
```java
import java.util.Scanner;
public class SudokuGame {
private static int[][] board = new int[9][9];
private static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
initializeBoard();
printBoard();
playGame();
}
private static void initializeBoard() {
// 初始化数独棋盘
String input = "003020600900305001001806400008102900700000008006708200002609500800203009005010300";
int index = 0;
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
board[i][j] = Character.getNumericValue(input.charAt(index));
index++;
}
}
}
private static void printBoard() {
// 输出数独棋盘
System.out.println("-------------------------");
for (int i = 0; i < 9; i++) {
System.out.print("| ");
for (int j = 0; j < 9; j++) {
System.out.print(board[i][j] + " ");
if (j == 2 || j == 5) {
System.out.print("| ");
}
}
System.out.print("|\n");
if (i == 2 || i == 5) {
System.out.println("-------------------------");
}
}
System.out.println("-------------------------\n");
}
private static void playGame() {
// 开始游戏
while (!isGameOver()) {
System.out.print("请输入要填写数字的行数(1-9): ");
int row = scanner.nextInt() - 1;
System.out.print("请输入要填写数字的列数(1-9): ");
int col = scanner.nextInt() - 1;
if (row < 0 || row > 8 || col < 0 || col > 8) {
System.out.println("输入无效,请重新输入!");
continue;
}
if (board[row][col] != 0) {
System.out.println("该位置已有数字,请重新输入!");
continue;
}
System.out.print("请输入要填写的数字(1-9): ");
int num = scanner.nextInt();
if (!isValidMove(row, col, num)) {
System.out.println("该数字不符合数独规则,请重新输入!");
continue;
}
board[row][col] = num;
printBoard();
}
System.out.println("恭喜你,游戏结束!");
}
private static boolean isGameOver() {
// 判断游戏是否结束
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if (board[i][j] == 0) {
return false;
}
}
}
return true;
}
private static boolean isValidMove(int row, int col, int num) {
// 判断填写的数字是否符合数独规则
for (int i = 0; i < 9; i++) {
if (board[row][i] == num || board[i][col] == num) {
return false;
}
}
int rowStart = (row / 3) * 3;
int colStart = (col / 3) * 3;
for (int i = rowStart; i < rowStart + 3; i++) {
for (int j = colStart; j < colStart + 3; j++) {
if (board[i][j] == num) {
return false;
}
}
}
return true;
}
}
```
这个代码中,我们使用一个9x9的二维数组来表示数独棋盘,其中0代表空格。我们先通过 `initializeBoard()` 方法来初始化数独棋盘,然后通过 `printBoard()` 方法来输出棋盘。
在 `playGame()` 方法中,我们使用一个循环来不断让玩家输入要填写数字的位置和数字,然后判断填写的数字是否符合数独规则。如果玩家输入的数字不符合规则,我们会提示玩家重新输入。
我们使用 `isValidMove()` 方法来判断填写的数字是否符合数独规则。对于每个空格,我们需要判断它所在的行、列和3x3小方格中是否已经有相同的数字。
最后,我们使用 `isGameOver()` 方法来判断游戏是否结束。如果棋盘中没有空格了,那么游戏就结束了。
阅读全文