Java 实现 2048 游戏248


简介

2048 是一个单人益智游戏,目标是在 4x4 网格中合并数字以达到 2048(或更高)。本文将指导您使用 Java 编程语言实现 2048 游戏。

设置游戏网格

首先,创建一个 4x4 的二维数组 grid 来表示游戏网格:```java
int[][] grid = new int[4][4];
```

随机生成数字

在游戏中,数字会随机出现在网格中的空位上。为此,创建一个 generateNumber() 方法:```java
private void generateNumber() {
// 获取所有空位
ArrayList emptyCells = getEmptyCells();
// 如果还有空位
if (!()) {
// 随机选择一个空位
Random random = new Random();
Integer[] randomCell = ((()));
// 随机生成 2 或 4
int number = (10) < 9 ? 2 : 4;
// 将数字放入空位
grid[randomCell[0]][randomCell[1]] = number;
}
}
```

移动网格

用户可以通过箭头键移动网格中的数字。为此,创建 move() 方法:```java
private void move(int direction) {
// 根据方向移动
switch (direction) {
case UP:
for (int c = 0; c < 4; c++) {
moveColumnUp(c);
}
break;
case DOWN:
for (int c = 0; c < 4; c++) {
moveColumnDown(c);
}
break;
case LEFT:
for (int r = 0; r < 4; r++) {
moveRowLeft(r);
}
break;
case RIGHT:
for (int r = 0; r < 4; r++) {
moveRowRight(r);
}
break;
}
}
```

合并数字

当两个相同数字相邻时,它们会合并成一个数字。为此,创建 merge() 方法:```java
private void merge() {
// 遍历网格
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
// 如果下一个数字与当前数字相同
if (i < 3 && grid[i][j] == grid[i + 1][j]) {
grid[i][j] *= 2;
grid[i + 1][j] = 0;
}
if (j < 3 && grid[i][j] == grid[i][j + 1]) {
grid[i][j] *= 2;
grid[i][j + 1] = 0;
}
}
}
}
```

游戏循环

主游戏循环将不断检查用户输入、移动网格、合并数字并生成新数字:```java
while (true) {
// 获取用户输入
int direction = getInput();
// 移动网格
move(direction);
// 合并数字
merge();
// 生成新数字
generateNumber();
// 检查游戏是否结束
if (isGameOver()) {
break;
}
}
```

检查游戏是否结束

在游戏中,当没有空位或没有更多移动可以合并数字时,游戏结束。为此,创建 isGameOver() 方法:```java
private boolean isGameOver() {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
// 如果有空位
if (grid[i][j] == 0) {
return false;
}
// 如果可以上下或左右合并
if (i < 3 && grid[i][j] == grid[i + 1][j]) {
return false;
}
if (j < 3 && grid[i][j] == grid[i][j + 1]) {
return false;
}
}
}
return true;
}
```

完整代码

以下是完整代码:```java
import ;
import ;
import ;
public class Main {
private static final int UP = 0;
private static final int DOWN = 1;
private static final int LEFT = 2;
private static final int RIGHT = 3;
private static int[][] grid;
public static void main(String[] args) {
// 初始化网格
grid = new int[4][4];
// 开始游戏
while (true) {
// 获取用户输入
int direction = getInput();
// 移动网格
move(direction);
// 合并数字
merge();
// 生成新数字
generateNumber();
// 检查游戏是否结束
if (isGameOver()) {
break;
}
}
}
private static int getInput() {
Scanner scanner = new Scanner();
("方向(上/下/左/右):");
String input = ();
switch (input) {
case "上":
return UP;
case "下":
return DOWN;
case "左":
return LEFT;
case "右":
return RIGHT;
default:
return -1;
}
}
private static void move(int direction) {
switch (direction) {
case UP:
for (int c = 0; c < 4; c++) {
moveColumnUp(c);
}
break;
case DOWN:
for (int c = 0; c < 4; c++) {
moveColumnDown(c);
}
break;
case LEFT:
for (int r = 0; r < 4; r++) {
moveRowLeft(r);
}
break;
case RIGHT:
for (int r = 0; r < 4; r++) {
moveRowRight(r);
}
break;
}
}
private static void moveColumnUp(int c) {
for (int r = 0; r < 3; r++) {
if (grid[r][c] == 0) {
for (int i = r + 1; i < 4; i++) {
if (grid[i][c] != 0) {
grid[r][c] = grid[i][c];
grid[i][c] = 0;
break;
}
}
}
}
}
private static void moveColumnDown(int c) {
for (int r = 3; r > 0; r--) {
if (grid[r][c] == 0) {
for (int i = r - 1; i >= 0; i--) {
if (grid[i][c] != 0) {
grid[r][c] = grid[i][c];
grid[i][c] = 0;
break;
}
}
}
}
}
private static void moveRowLeft(int r) {
for (int c = 0; c < 3; c++) {
if (grid[r][c] == 0) {
for (int i = c + 1; i < 4; i++) {
if (grid[r][i] != 0) {
grid[r][c] = grid[r][i];
grid[r][i] = 0;
break;
}
}
}
}
}
private static void moveRowRight(int r) {
for (int c = 3; c > 0; c--) {
if (grid[r][c] == 0) {
for (int i = c - 1; i >= 0; i--) {
if (grid[r][i] != 0) {
grid[r][c] = grid[r][i

2024-12-08


上一篇:Java 中将 JSON 字符串转换为对象数组

下一篇:自定你的訊息:仿射密碼 Java