🈷️用 java 写个 2048
时间: 2023-05-22 10:06:00 浏览: 47
很高兴回答您的问题。以下是 Java 实现 2048 游戏的示例代码:
```java
import java.util.*;
public class Game2048 {
private int[][] grid;
private int score;
public Game2048() {
grid = new int[4][4];
score = 0;
}
public void start() {
addNewTile();
addNewTile();
printGrid();
String moves = "wasd";
Scanner scanner = new Scanner(System.in);
while (true) {
String move = scanner.nextLine().toLowerCase();
if (move.length() == 1 && moves.contains(move)) {
if (move.equals("w")) {
moveUp();
} else if (move.equals("a")) {
moveLeft();
} else if (move.equals("s")) {
moveDown();
} else if (move.equals("d")) {
moveRight();
}
if (!hasMoves()) {
System.out.println("Game over!");
break;
}
addNewTile();
printGrid();
} else {
System.out.println("Invalid input. Please enter a valid move: w (up), a (left), s (down) or d (right).");
}
}
}
private void addNewTile() {
List<int[]> emptyCells = new ArrayList<>();
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (grid[i][j] == 0) {
emptyCells.add(new int[]{i, j});
}
}
}
int[] cell = emptyCells.get((int) (Math.random() * emptyCells.size()));
grid[cell[0]][cell[1]] = (int) (Math.random() * 2 + 1) * 2;
}
private void moveUp() {
for (int j = 0; j < 4; j++) {
int index = 0;
for (int i = 0; i < 4; i++) {
if (grid[i][j] != 0) {
if (i != index) {
grid[index][j] = grid[i][j];
grid[i][j] = 0;
}
index++;
}
}
for (int i = 0; i < 3; i++) {
if (grid[i][j] == grid[i + 1][j]) {
grid[i][j] += grid[i + 1][j];
score += grid[i][j];
grid[i + 1][j] = 0;
i++;
}
}
index = 0;
for (int i = 0; i < 4; i++) {
if (grid[i][j] != 0) {
if (i != index) {
grid[index][j] = grid[i][j];
grid[i][j] = 0;
}
index++;
}
}
}
}
private void moveLeft() {
for (int i = 0; i < 4; i++) {
int index = 0;
for (int j = 0; j < 4; j++) {
if (grid[i][j] != 0) {
if (j != index) {
grid[i][index] = grid[i][j];
grid[i][j] = 0;
}
index++;
}
}
for (int j = 0; j < 3; j++) {
if (grid[i][j] == grid[i][j + 1]) {
grid[i][j] += grid[i][j + 1];
score += grid[i][j];
grid[i][j + 1] = 0;
j++;
}
}
index = 0;
for (int j = 0; j < 4; j++) {
if (grid[i][j] != 0) {
if (j != index) {
grid[i][index] = grid[i][j];
grid[i][j] = 0;
}
index++;
}
}
}
}
private void moveDown() {
for (int j = 0; j < 4; j++) {
int index = 3;
for (int i = 3; i >= 0; i--) {
if (grid[i][j] != 0) {
if (i != index) {
grid[index][j] = grid[i][j];
grid[i][j] = 0;
}
index--;
}
}
for (int i = 3; i > 0; i--) {
if (grid[i][j] == grid[i - 1][j]) {
grid[i][j] += grid[i - 1][j];
score += grid[i][j];
grid[i - 1][j] = 0;
i--;
}
}
index = 3;
for (int i = 3; i >= 0; i--) {
if (grid[i][j] != 0) {
if (i != index) {
grid[index][j] = grid[i][j];
grid[i][j] = 0;
}
index--;
}
}
}
}
private void moveRight() {
for (int i = 0; i < 4; i++) {
int index = 3;
for (int j = 3; j >= 0; j--) {
if (grid[i][j] != 0) {
if (j != index) {
grid[i][index] = grid[i][j];
grid[i][j] = 0;
}
index--;
}
}
for (int j = 3; j > 0; j--) {
if (grid[i][j] == grid[i][j - 1]) {
grid[i][j] += grid[i][j - 1];
score += grid[i][j];
grid[i][j - 1] = 0;
j--;
}
}
index = 3;
for (int j = 3; j >= 0; j--) {
if (grid[i][j] != 0) {
if (j != index) {
grid[i][index] = grid[i][j];
grid[i][j] = 0;
}
index--;
}
}
}
}
private boolean hasMoves() {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (grid[i][j] == 0) {
return true;
}
if (i > 0 && grid[i][j] == grid[i - 1][j]) {
return true;
}
if (j > 0 && grid[i][j] == grid[i][j - 1]) {
return true;
}
if (i < 3 && grid[i][j] == grid[i + 1][j]) {
return true;
}
if (j < 3 && grid[i][j] == grid[i][j + 1]) {
return true;
}
}
}
return false;
}
private void printGrid() {
System.out.println("+------+------+------+------+\n| | | | |\n" +
String.format("|%4d |%4d |%4d |%4d |\n", grid[0][0], grid[0][1], grid[0][2], grid[0][3]) +
"+------+------+------+------+\n| | | | |\n" +
String.format("|%4d |%4d |%4d |%4d |\n", grid[1][0], grid[1][1], grid[1][2], grid[1][3]) +
"+------+------+------+------+\n| | | | |\n" +
String.format("|%4d |%4d |%4d |%4d |\n", grid[2][0], grid[2][1], grid[2][2], grid[2][3]) +
"+------+------+------+------+\n| | | | |\n" +
String.format("|%4d |%4d |%4d |%4d |\n", grid[3][0], grid[3][1], grid[3][2], grid[3][3]) +
"+------+------+------+------+\nScore: " + score + "\n");
}
}
```
您可以运行此代码来玩2048游戏。