public class TuiXiangZi {
public static void main(String[] args) {
/*
* 首先我们要创建小人移动的地图,这个地图是个二维数组
*
*/
/*------------创建地图------------------*/
int[][] map = new int[5][5];
/*
* 接下来,我希望从输入确定小人的初始位
*/
Scanner scanner = new Scanner(System.in);
System.out.println("请输入小人的行坐标:从0-" + (map.length - 1));
int m = scanner.nextInt();// 小人行坐标
if (m > map.length - 1 || m < 0) {
System.out.println("您输入行数有误,小人坐标脱离地图");
return;
}
System.out.println("请输入小人的列坐标:从0-" + (map[m].length - 1));
int n = scanner.nextInt();// 小人列坐标
if (n > map[m].length - 1 || n < 0) {
System.out.println("您输入列数有误,小人坐标脱离地图");
return;
}
// 箱子的位置
System.out.println("请输入箱子的横坐标:从0-" + (map.length - 1));
int boxM = scanner.nextInt();
if (boxM > map.length || boxM < 0) {
System.out.println("箱子脱离地图");
return;
}
System.out.println("请输入箱子的列坐标:从0-" + (map[boxM].length - 1));
int boxN = scanner.nextInt();
if (boxN > map[boxM].length - 1 || boxN < 0) {
System.out.println("您输入列数有误,箱子脱离地图");
return;
}
if (m == boxM && n == boxN) {
System.out.println("小人和箱子的坐标不能一样");
return;
}
// 到达位置的定位
System.out.println("请输入需要到达位置的横坐标:从0-" + (map.length - 1));
int placeM = scanner.nextInt();
if (placeM > map.length || placeM < 0) {
System.out.println("需要到达的地点脱离地图");
return;
}
System.out.println("请输入需要到达位置的列坐标:从0-" + (map[boxN].length - 1));
int placeN = scanner.nextInt();
if (placeN > map[placeM].length - 1 || placeN < 0) {
System.out.println("您输入列数有误,箱子脱离地图");
return;
}
if (m == placeM && n == placeN) {
System.out.println("人和需要到达位置的坐标不能一样");
return;
}
if (boxM == placeM && boxN == placeN) {
System.out.println("箱子和需要到达位置的坐标不能一样");
return;
}
map[m][n] = 1;// 我没有做合法性判断
map[boxM][boxN] = 2;
map[placeM][placeN] = 3;
/*
* 我们检查一下目前的小人和地图
*/
System.out.println("小地图目前状态如下");
System.out.println("******************");
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();
}
/*-----------检查动作结束----------*/
/*---------小人行走的逻辑--------*/
while (true) {
System.out.println("请输入小人移动的方向:w向上,s向下,a向左,d向右");
String command = scanner.next();
command.toUpperCase();
switch (command) {
case "w":
// 这里让小人向上移动
if (m == 0) {
System.out.println("小人在最顶了,不能向上走了");
return;
} else if (m - 1 == boxM && n == boxN) {
if (boxM == 0) {
System.out.println("箱子在最顶了,不能向上走了");
} else {
if (boxM - 1 == placeM && boxN == placeN) {
map[boxM][boxN] = 0;
boxM--;
map[boxM][boxN] = 5;
map[m][n] = 0;
m--;
map[m][n] = 1;
System.out.println("you win");
} else {
map[boxM][boxN] = 0;
boxM--;
map[boxM][boxN] = 2;
map[m][n] = 0;
m--;
map[m][n] = 1;
}
}
} else if (m - 1 == placeM && n == placeN) {
map[m][n] = 0;
m--;
map[m][n] = 4;
} else if (m == placeM && n == placeN) {
map[m][n] = 3;
m--;
map[m][n] = 1;
} else {
map[m][n] = 0;
m--;
map[m][n] = 1;
}
break;
case "a":
if (n == 0) {
System.out.println("小人在最左边了,不能向左走了");
return;
} else if (m == boxM && n - 1 == boxN) {
if (boxN == 0) {
System.out.println("箱子在最左了,不能向左走了");
} else {
if (boxM == placeM && boxN - 1 == placeN) {
map[boxM][boxN] = 0;
boxN--;
map[boxM][boxN] = 5;
map[m][n] = 0;
n--;
map[m][n] = 1;
System.out.println("you win");
} else {
map[boxM][boxN] = 0;
boxN--;
map[boxM][boxN] = 2;
map[m][n] = 0;
n--;
map[m][n] = 1;
}
}
} else if (m == placeM && n - 1 == placeN) {
map[m][n] = 0;
n--;
map[m][n] = 4;
} else if (m == placeM && n == placeN) {
map[m][n] = 3;
n--;
map[m][n] = 1;
} else {
map[m][n] = 0;
n--;
map[m][n] = 1;
}
break;
case "d":
if (n == map.length - 1) {
System.out.println("小人在右边了,不能向右走了");
return;
} else if (m == boxM && n + 1 == boxN) {
if (boxN == 0) {
System.out.println("箱子在最右了,不能向右走了");
} else {
if (boxM == placeM && boxN + 1 == placeN) {
map[boxM][boxN] = 0;
boxN++;
map[boxM][boxN] = 5;
map[m][n] = 0;
n++;
map[m][n] = 1;
System.out.println("you win");
} else {
map[boxM][boxN] = 0;
boxN++;
map[boxM][boxN] = 2;
map[m][n] = 0;
n++;
map[m][n] = 1;
}
}
} else if (m == placeM && n - 1 == placeN) {
map[m][n] = 0;
n++;
map[m][n] = 4;
} else if (m == placeM && n == placeN) {
map[m][n] = 3;
n++;
map[m][n] = 1;
} else {
map[m][n] = 0;
n++;
map[m][n] = 1;
}
break;
case "s":
// 这里让小人向下移动
if (m == 0) {
System.out.println("小人在最下面了,不能向下走了");
return;
} else if (m + 1 == boxM && n == boxN) {
if (boxM == 0) {
System.out.println("箱子在最下面了,不能向下走了");
} else {
if (boxM + 1 == placeM && boxN == placeN) {
map[boxM][boxN] = 0;
boxM++;
map[boxM][boxN] = 5;
map[m][n] = 0;
m++;
map[m][n] = 1;
System.out.println("you win");
} else {
map[boxM][boxN] = 0;
boxM++;
map[boxM][boxN] = 2;
map[m][n] = 0;
m++;
map[m][n] = 1;
}
}
} else if (m + 1 == placeM && n == placeN) {
map[m][n] = 0;
m++;
map[m][n] = 4;
} else if (m == placeM && n == placeN) {
map[m][n] = 3;
m++;
map[m][n] = 1;
} else {
map[m][n] = 0;
m++;
map[m][n] = 1;
}
break;
default:
System.out.println("您主动关闭程序了");
return;
}
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();
}
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map[i].length; j++) {
if (map[i][j] == 5) {
return;
}
}
}
}
}
}