java九宫格数字键盘
时间: 2023-12-06 12:38:21 浏览: 87
Java九宫格数字键盘是一个拼图游戏,玩家需要通过移动数字键来重新排列九宫格中的数字,使其按照从小到大的顺序排列。以下是Java九宫格数字键盘的实现步骤:
1. 创建一个3x3的二维数组,用于存储九宫格中的数字。
2. 在数组中随机生成1-9的数字,并将其打乱顺序。
3. 使用循环结构不断读取用户的输入,直到九宫格中的数字按照从小到大的顺序排列。
4. 根据用户的输入,交换数字键和目标位置数字的位置,并重新绘制九宫格。
以下是Java九宫格数字键盘的代码实现:
```java
import java.util.Scanner;
public class NumberKeyboard {
public static void main(String[] args) {
int[][] keyboard = new int[3][3];
initKeyboard(keyboard);
drawKeyboard(keyboard);
while (!isSorted(keyboard)) {
char c = getUserInput();
move(keyboard, c);
drawKeyboard(keyboard);
}
System.out.println("Congratulations! You win!");
}
// 初始化九宫格
public static void initKeyboard(int[][] keyboard) {
int[] nums = {1, 2, 3, 4, 5, 6, 7, 8, 9};
shuffle(nums);
int k = 0;
for (int i = 0; i < keyboard.length; i++) {
for (int j = 0; j < keyboard[i].length; j++) {
keyboard[i][j] = nums[k++];
}
}
}
// 打乱数组顺序
public static void shuffle(int[] nums) {
for (int i = nums.length - 1; i > 0; i--) {
int j = (int) (Math.random() * (i + 1));
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
// 绘制九宫格
public static void drawKeyboard(int[][] keyboard) {
System.out.println("-------------");
for (int i = 0; i < keyboard.length; i++) {
System.out.print("| ");
for (int j = 0; j < keyboard[i].length; j++) {
if (keyboard[i][j] == 0) {
System.out.print(" | ");
} else {
System.out.print(keyboard[i][j] + " | ");
}
}
System.out.println();
System.out.println("-------------");
}
}
// 判断九宫格是否已经排好序
public static boolean isSorted(int[][] keyboard) {
int k = 1;
for (int i = 0; i < keyboard.length; i++) {
for (int j = 0; j < keyboard[i].length; j++) {
if (keyboard[i][j] != k && !(i == 2 && j == 2)) {
return false;
}
k++;
}
}
return true;
}
// 获取用户输入
public static char getUserInput() {
Scanner scanner = new Scanner(System.in);
char c = ' ';
try {
c = (char) scanner.next().charAt(0);
} catch (Exception e) {
System.out.println("Invalid input!");
}
return c;
}
// 移动数字键
public static void move(int[][] keyboard, char c) {
int x = 0, y = 0;
for (int i = 0; i < keyboard.length; i++) {
for (int j = 0; j < keyboard[i].length; j++) {
if (keyboard[i][j] == 0) {
x = i;
y = j;
break;
}
}
}
switch (c) {
case 'w':
if (x > 0) {
keyboard[x][y] = keyboard[x - 1][y];
keyboard[x - 1][y] = 0;
}
break;
case 's':
if (x < 2) {
keyboard[x][y] = keyboard[x + 1][y];
keyboard[x + 1][y] = 0;
}
break;
case 'a':
if (y > 0) {
keyboard[x][y] = keyboard[x][y - 1];
keyboard[x][y - 1] = 0;
}
break;
case 'd':
if (y < 2) {
keyboard[x][y] = keyboard[x][y + 1];
keyboard[x][y + 1] = 0;
}
break;
default:
System.out.println("Invalid input!");
break;
}
}
}
```