Java创建益智类游戏代码
时间: 2023-10-08 09:14:47 浏览: 55
下面是一个简单的 Java 益智类游戏代码,可以作为参考:
```java
import java.util.Scanner;
public class PuzzleGame {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[][] board = createBoard();
while (!isSolved(board)) {
printBoard(board);
System.out.print("Enter move (left, right, up, down): ");
String move = scanner.nextLine();
if (isValidMove(move, board)) {
makeMove(move, board);
} else {
System.out.println("Invalid move, please try again.");
}
}
System.out.println("Congratulations, you solved the puzzle!");
}
private static int[][] createBoard() {
int[][] board = new int[3][3];
int n = 1;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
board[i][j] = n;
n++;
}
}
board[2][2] = 0; // 0 represents the empty tile
shuffleBoard(board);
return board;
}
private static void shuffleBoard(int[][] board) {
int moves = (int) (Math.random() * 20) + 10;
for (int i = 0; i < moves; i++) {
int row = (int) (Math.random() * 3);
int col = (int) (Math.random() * 3);
String move = getRandomMove(row, col);
if (isValidMove(move, board)) {
makeMove(move, board);
}
}
}
private static String getRandomMove(int row, int col) {
int direction = (int) (Math.random() * 4);
switch (direction) {
case 0: // left
if (col == 0) {
return getRandomMove(row, col);
}
return "left";
case 1: // right
if (col == 2) {
return getRandomMove(row, col);
}
return "right";
case 2: // up
if (row == 0) {
return getRandomMove(row, col);
}
return "up";
case 3: // down
if (row == 2) {
return getRandomMove(row, col);
}
return "down";
default:
return "";
}
}
private static void printBoard(int[][] board) {
System.out.println();
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (board[i][j] == 0) {
System.out.print(" ");
} else {
System.out.printf("%2d ", board[i][j]);
}
}
System.out.println();
}
}
private static boolean isValidMove(String move, int[][] board) {
int[] emptyTile = findEmptyTile(board);
switch (move) {
case "left":
return emptyTile[1] != 0;
case "right":
return emptyTile[1] != 2;
case "up":
return emptyTile[0] != 0;
case "down":
return emptyTile[0] != 2;
default:
return false;
}
}
private static int[] findEmptyTile(int[][] board) {
int[] emptyTile = new int[2];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (board[i][j] == 0) {
emptyTile[0] = i;
emptyTile[1] = j;
}
}
}
return emptyTile;
}
private static void makeMove(String move, int[][] board) {
int[] emptyTile = findEmptyTile(board);
switch (move) {
case "left":
swapTiles(board, emptyTile[0], emptyTile[1] - 1, emptyTile[0], emptyTile[1]);
break;
case "right":
swapTiles(board, emptyTile[0], emptyTile[1] + 1, emptyTile[0], emptyTile[1]);
break;
case "up":
swapTiles(board, emptyTile[0] - 1, emptyTile[1], emptyTile[0], emptyTile[1]);
break;
case "down":
swapTiles(board, emptyTile[0] + 1, emptyTile[1], emptyTile[0], emptyTile[1]);
break;
}
}
private static void swapTiles(int[][] board, int row1, int col1, int row2, int col2) {
int temp = board[row1][col1];
board[row1][col1] = board[row2][col2];
board[row2][col2] = temp;
}
private static boolean isSolved(int[][] board) {
int n = 1;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (board[i][j] != n && !(i == 2 && j == 2 && board[i][j] == 0)) {
return false;
}
n++;
}
}
return true;
}
}
```
这个代码创建了一个 3x3 的拼图游戏,玩家必须通过移动拼图块来还原原始的图案。玩家可以使用 `left`,`right`,`up` 或 `down` 来移动空白块,如果移动是有效的,则会移动块,否则会显示错误消息并要求玩家重新尝试。游戏在打乱拼图块后开始,玩家必须在还原拼图前完成游戏。