用java写一个推箱子游戏
时间: 2023-07-01 11:26:46 浏览: 90
好的,推箱子游戏是一个比较有趣的小游戏,下面是一个用Java实现的简单版本:
```java
import java.util.Scanner;
public class SokobanGame {
public static void main(String[] args) {
char[][] map = {
{'#', '#', '#', '#', '#', '#', '#', '#', '#', '#'},
{'#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#'},
{'#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#'},
{'#', ' ', ' ', 'O', ' ', ' ', ' ', ' ', ' ', '#'},
{'#', ' ', ' ', ' ', 'X', ' ', ' ', ' ', ' ', '#'},
{'#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#'},
{'#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#'},
{'#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#'},
{'#', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#'},
{'#', '#', '#', '#', '#', '#', '#', '#', '#', '#'}
};
int playerX = 3;
int playerY = 3;
Scanner input = new Scanner(System.in);
while (true) {
// 打印地图
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map[i].length; j++) {
System.out.print(map[i][j] + " ");
}
System.out.println();
}
// 判断是否胜利
boolean isWin = true;
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map[i].length; j++) {
if (map[i][j] == 'O') {
isWin = false;
break;
}
}
}
if (isWin) {
System.out.println("恭喜你胜利了!");
break;
}
// 获取用户输入
System.out.print("请输入移动方向(w:上,s:下,a:左,d:右):");
String direction = input.nextLine();
// 移动玩家
int newPlayerX = playerX;
int newPlayerY = playerY;
switch (direction) {
case "w":
newPlayerX--;
break;
case "s":
newPlayerX++;
break;
case "a":
newPlayerY--;
break;
case "d":
newPlayerY++;
break;
}
if (map[newPlayerX][newPlayerY] != '#') {
if (map[newPlayerX][newPlayerY] == 'X') {
// 推箱子
int newBoxX = newPlayerX;
int newBoxY = newPlayerY;
switch (direction) {
case "w":
newBoxX--;
break;
case "s":
newBoxX++;
break;
case "a":
newBoxY--;
break;
case "d":
newBoxY++;
break;
}
if (map[newBoxX][newBoxY] != '#') {
map[playerX][playerY] = ' ';
map[newPlayerX][newPlayerY] = 'P';
map[newBoxX][newBoxY] = 'X';
playerX = newPlayerX;
playerY = newPlayerY;
}
} else {
// 移动玩家
map[playerX][playerY] = ' ';
map[newPlayerX][newPlayerY] = 'P';
playerX = newPlayerX;
playerY = newPlayerY;
}
}
}
}
}
```
代码中用二维字符数组 `map` 存储地图,其中 `#` 表示墙壁,`O` 表示目标点,`X` 表示箱子,`P` 表示玩家。`playerX` 和 `playerY` 分别表示玩家的坐标,通过用户输入的方向移动玩家,当玩家移动到箱子旁边时,按照相应的方向推动箱子。当所有的箱子都被推到目标点上时,游戏胜利。
阅读全文