用java写2048代码
时间: 2023-05-14 12:04:40 浏览: 36
可以的,以下是一个简单的Java代码实现2048游戏:
```java
import java.util.*;
public class Game2048 {
private int[][] board;
private int score;
private boolean gameOver;
public Game2048() {
board = new int[4][4];
score = 0;
gameOver = false;
addRandomTile();
addRandomTile();
}
public void move(Direction dir) {
boolean moved = false;
switch (dir) {
case UP:
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;
score += board[k - 1][j];
board[k][j] = 0;
moved = true;
}
}
}
}
break;
case DOWN:
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;
score += board[k + 1][j];
board[k][j] = 0;
moved = true;
}
}
}
}
break;
case LEFT:
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;
score += board[i][k - 1];
board[i][k] = 0;
moved = true;
}
}
}
}
break;
case RIGHT:
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;
score += board[i][k + 1];
board[i][k] = 0;
moved = true;
}
}
}
}
break;
}
if (moved) {
addRandomTile();
checkGameOver();
}
}
private void addRandomTile() {
List<int[]> emptyTiles = new ArrayList<>();
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (board[i][j] == 0) {
emptyTiles.add(new int[]{i, j});
}
}
}
if (emptyTiles.size() > 0) {
int[] tile = emptyTiles.get((int) (Math.random() * emptyTiles.size()));
board[tile[0]][tile[1]] = Math.random() < 0.9 ? 2 : 4;
}
}
private void checkGameOver() {
gameOver = true;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (board[i][j] == 0) {
gameOver = false;
return;
}
if (i > 0 && board[i][j] == board[i - 1][j]) {
gameOver = false;
return;
}
if (j > 0 && board[i][j] == board[i][j - 1]) {
gameOver = false;
return;
}
}
}
}
public boolean isGameOver() {
return gameOver;
}
public int getScore() {
return score;
}
public int[][] getBoard() {
return board;
}
public enum Direction {
UP, DOWN, LEFT, RIGHT
}
}
```
这个代码实现了一个简单的2048游戏,包括移动、合并方块、随机生成新方块、判断游戏结束等功能。你可以在这个基础上进行扩展,比如添加计时器、保存最高分等功能。