用Java写2048代码
时间: 2023-05-14 08:04:45 浏览: 43
可以的,以下是一个简单的Java实现2048的代码:
```java
import java.util.Random;
import java.util.Scanner;
public class Game2048 {
private static int[][] board = new int[4][4];
private static Random random = new Random();
private static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
initBoard();
while (true) {
printBoard();
if (isGameOver()) {
System.out.println("Game Over!");
break;
}
System.out.print("Please input direction (w/a/s/d): ");
String direction = scanner.next();
if (move(direction)) {
addRandomNumber();
} else {
System.out.println("Invalid direction!");
}
}
}
private static void initBoard() {
addRandomNumber();
addRandomNumber();
}
private static void addRandomNumber() {
int x, y;
do {
x = random.nextInt(4);
y = random.nextInt(4);
} while (board[x][y] != 0);
board[x][y] = random.nextInt(10) == 0 ? 4 : 2;
}
private static void printBoard() {
System.out.println("Score: " + getScore());
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
System.out.printf("%-6d", board[i][j]);
}
System.out.println();
}
}
private static boolean move(String direction) {
boolean moved = false;
switch (direction) {
case "w":
for (int j = 0; j < 4; j++) {
for (int i = 1; i < 4; i++) {
if (board[i][j] != 0) {
int k = i;
while (k > 0 && board[k - 1][j] == 0) {
board[k - 1][j] = board[k][j];
board[k][j] = 0;
k--;
moved = true;
}
if (k > 0 && board[k - 1][j] == board[k][j]) {
board[k - 1][j] *= 2;
board[k][j] = 0;
moved = true;
}
}
}
}
break;
case "a":
for (int i = 0; i < 4; i++) {
for (int j = 1; j < 4; j++) {
if (board[i][j] != 0) {
int k = j;
while (k > 0 && board[i][k - 1] == 0) {
board[i][k - 1] = board[i][k];
board[i][k] = 0;
k--;
moved = true;
}
if (k > 0 && board[i][k - 1] == board[i][k]) {
board[i][k - 1] *= 2;
board[i][k] = 0;
moved = true;
}
}
}
}
break;
case "s":
for (int j = 0; j < 4; j++) {
for (int i = 2; i >= 0; i--) {
if (board[i][j] != 0) {
int k = i;
while (k < 3 && board[k + 1][j] == 0) {
board[k + 1][j] = board[k][j];
board[k][j] = 0;
k++;
moved = true;
}
if (k < 3 && board[k + 1][j] == board[k][j]) {
board[k + 1][j] *= 2;
board[k][j] = 0;
moved = true;
}
}
}
}
break;
case "d":
for (int i = 0; i < 4; i++) {
for (int j = 2; j >= 0; j--) {
if (board[i][j] != 0) {
int k = j;
while (k < 3 && board[i][k + 1] == 0) {
board[i][k + 1] = board[i][k];
board[i][k] = 0;
k++;
moved = true;
}
if (k < 3 && board[i][k + 1] == board[i][k]) {
board[i][k + 1] *= 2;
board[i][k] = 0;
moved = true;
}
}
}
}
break;
default:
break;
}
return moved;
}
private static boolean isGameOver() {
if (getEmptyCount() > 0) {
return false;
}
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (i < 3 && board[i][j] == board[i + 1][j]) {
return false;
}
if (j < 3 && board[i][j] == board[i][j + 1]) {
return false;
}
}
}
return true;
}
private static int getEmptyCount() {
int count = 0;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (board[i][j] == 0) {
count++;
}
}
}
return count;
}
private static int getScore() {
int score = 0;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
score += board[i][j];
}
}
return score;
}
}
```
这个代码实现了一个简单的2048游戏,使用了二维数组来表示游戏面板,使用了随机数来生成新的数字,使用了Scanner来获取用户输入,使用了switch语句来处理用户输入的方向,使用了while循环来处理数字的移动和合并,使用了if语句来判断游戏是否结束,使用了方法来封装代码。