java推箱子游戏代码
时间: 2023-07-09 12:38:50 浏览: 87
推箱子游戏是经典的益智游戏,下面是一个简单的 Java 实现。
```java
import java.util.Scanner;
public class PushBoxGame {
// 地图
private static char[][] map = {
{'#', '#', '#', '#', '#', '#', '#', '#', '#', '#'},
{'#', ' ', ' ', ' ', '#', ' ', ' ', ' ', ' ', '#'},
{'#', ' ', ' ', ' ', '#', ' ', ' ', ' ', ' ', '#'},
{'#', ' ', ' ', ' ', ' ', ' ', '#', '#', ' ', '#'},
{'#', ' ', ' ', ' ', ' ', ' ', '#', ' ', ' ', '#'},
{'#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#'},
{'#', ' ', ' ', '#', '#', '#', '#', ' ', ' ', '#'},
{'#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#'},
{'#', ' ', ' ', 'O', ' ', ' ', ' ', ' ', ' ', '#'},
{'#', '#', '#', '#', '#', '#', '#', '#', '#', '#'}
};
// 箱子当前位置
private static int boxX = 8;
private static int boxY = 3;
// 人当前位置
private static int personX = 4;
private static int personY = 5;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
// 输出地图
printMap();
// 判断是否完成
if (isWin()) {
System.out.println("你赢了!");
break;
}
// 输入移动方向
System.out.print("请输入移动方向(上:w,下:s,左:a,右:d):");
String direction = scanner.nextLine();
// 移动
switch (direction) {
case "w":
move(-1, 0);
break;
case "s":
move(1, 0);
break;
case "a":
move(0, -1);
break;
case "d":
move(0, 1);
break;
default:
System.out.println("无效的移动方向!");
break;
}
}
}
// 移动
private static void move(int dx, int dy) {
// 计算人和箱子的新位置
int newPersonX = personX + dx;
int newPersonY = personY + dy;
int newBoxX = boxX;
int newBoxY = boxY;
if (newPersonX == boxX && newPersonY == boxY) {
newBoxX += dx;
newBoxY += dy;
}
// 判断新位置是否合法
if (map[newPersonX][newPersonY] == ' ') {
if (map[newBoxX][newBoxY] == ' ') {
// 移动人和箱子
map[personX][personY] = ' ';
map[boxX][boxY] = ' ';
map[newPersonX][newPersonY] = '@';
map[newBoxX][newBoxY] = 'O';
personX = newPersonX;
personY = newPersonY;
boxX = newBoxX;
boxY = newBoxY;
} else {
System.out.println("箱子无法移动!");
}
} else {
System.out.println("人无法移动!");
}
}
// 判断是否完成
private static boolean isWin() {
return map[boxX][boxY] == '*';
}
// 输出地图
private static void printMap() {
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map[i].length; j++) {
if (i == boxX && j == boxY) {
System.out.print('O');
} else if (i == personX && j == personY) {
System.out.print('@');
} else {
System.out.print(map[i][j]);
}
}
System.out.println();
}
}
}
```
这个实现中,使用二维字符数组来表示地图,使用 `@` 表示人,使用 `O` 表示箱子,使用 `#` 表示墙壁,使用空格表示空地。`boxX` 和 `boxY` 表示箱子在地图中的位置,`personX` 和 `personY` 表示人在地图中的位置。`move` 方法用来移动人和箱子,`isWin` 方法用来判断是否完成,`printMap` 方法用来输出地图。在 `main` 方法中,使用一个循环来接收用户输入移动方向,并根据输入调用 `move` 方法。
阅读全文