题目如下:
import java.util.Locale;
import java.util.Scanner;
public class 推箱子 {
private static String getFormatLogString(String content, int colour, int type){
boolean hasType = type != 1 && type != 3 && type != 4;
if (hasType) {
return String.format("\033[%dm%s\033[0m", colour, content);
} else {
return String.format("\033[%d;%dm%s\033[0m", colour, type, content);
}
}
public static void main(String[] args) {{
}
char[][] arr = new char[8][10];
Scanner sc = new Scanner(System.in);
int x = 1, y = 1;
int i, j;
int num = 0;
boolean flag = false;
for (i = 0; i < arr.length; i++) {
for (j = 0; j < 10; j++) {
if (i == 0 || i == 7) {
arr[i][j] = 'H';
} else if (j == 0 || j == 9) {
arr[i][0] = arr[i][9] = 'H';
} else arr[i][j] = ' ';
}
}
arr[1][3] = arr[2][3] = arr[3][3] = arr[5][4] = arr[6][4] = arr[2][5] = 'H';
arr[3][5] = arr[5][5] = arr[3][6] = arr[5][6] = arr[3][8] = arr[4][8] = 'H';
arr[x][y] = 'o'; //人的位置
arr[2][2] = '$'; //箱子的位置
arr[6][5] = '*'; //终点的位置
while (true) {
System.out.println("----------------"); //初始地图
for (i = 0; i < arr.length; i++) {
for (j = 0; j < 10; j++) {
if (arr[i][j] == 'H') { //颜色设置
System.out.print(getFormatLogString(" H", 31, 0));
} else if (arr[i][j] == 'o') {
System.out.print(getFormatLogString(" o",32, 0));
} else if (arr[i][j] == '$') {
System.out.print(getFormatLogString(" $", 33, 0));
} else if (arr[i][j] == '*') {
System.out.print(getFormatLogString(" *", 34, 0));
} else {
System.out.print(" ");
}
}
System.out.println();
}
System.out.println("----------------");
if (flag) {
break;
}
System.out.println();
// System.out.println("A上移,D左移,W右移,S下移");
String code = sc.nextLine();
switch (code.toLowerCase(Locale.ROOT)) {
case "a":
if (arr[x][y - 1] == ' ') {
arr[x][y] = ' '; //人左边为空地
arr[x][y - 1] = 'o';
y--;
num++;
} else if (arr[x][y - 1] == '$') { //人左边为箱子
if (arr[x][y - 2] != 'H') { //箱子左边为空地
if (arr[x][y - 2] == '*') { //箱子左边为目的地
flag = true;
num++;
}
arr[x][y] = ' ';
arr[x][y - 1] = 'o';
arr[x][y - 2] = '$';
y--;
num++;
}
}
break;
case "s":
if (arr[x + 1][y] == ' ') {
arr[x][y] = ' '; //人下边为空地
arr[x + 1][y] = 'o';
x++;
num++;
} else if (arr[x + 1][y] == '$') { //人下边为箱子
if (arr[x + 2][y] != 'H') { //箱子下边为空地
if (arr[x + 2][y] == '*') { //箱子下边为目的地
flag = true;
num++;
}
arr[x][y] = ' ';
arr[x + 1][y] = 'o';
arr[x + 2][y] = '$';
x++;
num++;
}
}
break;
case "d":
if (arr[x][y + 1] == ' ') {
arr[x][y] = ' '; //人右边为空地
arr[x][y + 1] = 'o';
y++;
num++;
} else if (arr[x][y + 1] == '$') { //人右边为箱子
if (arr[x][y + 2] != 'H') { //箱子右边为空地
if (arr[x][y + 2] == '*') { //箱子右边为目的地
flag = true;
num++;
}
arr[x][y] = ' ';
arr[x][y + 1] = 'o';
arr[x][y + 2] = '$';
y++;
num++;
}
}
break;
case "w":
if (arr[x - 1][y] == ' ') {
arr[x][y] = ' '; //人上边为空地
arr[x - 1][y] = 'o';
x--;
num++;
} else if (arr[x - 1][y] == '$') { //人上边为箱子
if (arr[x - 2][y] != 'H') { //箱子上边为空地
if (arr[x - 2][y] == '*') { //箱子上边为目的地
flag = true;
num++;
}
arr[x][y] = ' ';
arr[x - 1][y] = 'o';
arr[x - 2][y] = '$';
x--;
num++;
}
}
break;
default:
System.out.println("请输入有效指令!");
}
} System.out.println("游戏结束!您一共走了" + (num-1) + "步。");
sc.close();
}
}
结果如下:
初学Java,欢迎大佬们指教!