推箱子小游戏java代码大全
时间: 2023-07-29 14:04:41 浏览: 239
推箱子(Sokoban)是一种经典的益智游戏,玩家需要将箱子推到指定的目标位置。下面是一个完整的推箱子小游戏的Java代码。
```java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
class Main {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
// 定义地图大小
int mapWidth = 10;
int mapHeight = 10;
// 初始化地图
char[][] map = new char[mapWidth][mapHeight];
for (int i = 0; i < mapHeight; i++) {
for (int j = 0; j < mapWidth; j++) {
map[i][j] = '#'; // 墙壁
}
}
// 设置目标位置
List<int[]> targets = new ArrayList<>();
targets.add(new int[] { 2, 2 });
targets.add(new int[] { 3, 7 });
targets.add(new int[] { 5, 4 });
// 设置初始位置
int playerX = 4;
int playerY = 5;
// 设置箱子位置
List<int[]> boxes = new ArrayList<>();
boxes.add(new int[] { 3, 3 });
boxes.add(new int[] { 4, 4 });
boxes.add(new int[] { 5, 6 });
// 更新地图状态
for (int[] target : targets) {
map[target[0]][target[1]] = '.';
}
map[playerX][playerY] = '@';
for (int[] box : boxes) {
map[box[0]][box[1]] = '$';
}
// 游戏主循环
while (true) {
// 显示地图状态
for (int i = 0; i < mapHeight; i++) {
for (int j = 0; j < mapWidth; j++) {
System.out.print(map[i][j]);
}
System.out.println();
}
// 获取玩家输入
String input = reader.readLine();
if (input.equals("exit")) {
break;
}
// 移动玩家
int dx = 0;
int dy = 0;
if (input.equals("w")) {
dx = -1;
} else if (input.equals("s")) {
dx = 1;
} else if (input.equals("a")) {
dy = -1;
} else if (input.equals("d")) {
dy = 1;
}
int newPlayerX = playerX + dx;
int newPlayerY = playerY + dy;
if (map[newPlayerX][newPlayerY] == '#') {
continue; // 无法移动到墙壁上
}
// 移动箱子
boolean hasMovedBox = false;
for (int[] box : boxes) {
if (box[0] == newPlayerX && box[1] == newPlayerY) {
int newBoxX = box[0] + dx;
int newBoxY = box[1] + dy;
if (map[newBoxX][newBoxY] == '#' || map[newBoxX][newBoxY] == '$') {
continue; // 无法移动箱子
}
box[0] = newBoxX;
box[1] = newBoxY;
hasMovedBox = true;
break;
}
}
// 更新地图
map[playerX][playerY] = '.';
playerX = newPlayerX;
playerY = newPlayerY;
map[playerX][playerY] = '@';
if (hasMovedBox) {
for (int[] target : targets) {
map[target[0]][target[1]] = '.';
}
for (int[] box : boxes) {
map[box[0]][box[1]] = '$';
}
}
// 判断游戏是否结束
boolean isGameDone = true;
for (int[] target : targets) {
if (map[target[0]][target[1]] != '$') {
isGameDone = false;
break;
}
}
if (isGameDone) {
System.out.println("游戏结束!");
break;
}
}
reader.close();
}
}
```
这个代码实现了一个简单的推箱子游戏。玩家可以使用"w"、"s"、"a"、"d"键来移动角色,将箱子推到目标位置上。游戏在控制台中显示地图,并根据玩家的输入进行实时更新。当所有箱子都移动到目标位置时,游戏结束。
阅读全文