import java.util.Scanner;
public class Txz {
public static void main(String[] args) {
/*
* 加一个箱子进来,推箱子 1.代表人 2 代表箱子 3 代表放箱子的点(圈) 5代表接受箱子和3
* 判断移动有没有箱子,如果有箱子,先移动箱子,在移动人 4代表 人和3的点,,如果再要移动,如果是1:改为0,,
* 如果是5,在移动改为3(圈)
*/
/*
* 首先,我们要创建出来小人可以移动的地图 这个地图是一个二维的数组
*/
/*------------------创建地图,并实例化小人----------------*/
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;
}
map[m][n] = 1;
/*-------------输入箱子的坐标并赋值-------------------*/
System.out.println("请输入箱子的横坐标:从0-" + (map.length - 1));
int boxM = scanner.nextInt();// 箱子的横坐标
if (boxM > map.length - 1 || boxM < 0) {
System.out.println("您输入的箱子行数有误,小人坐标脱离了地图");
return;
}
System.out.println("请输入箱子的 纵坐标:从0-" + (map[boxM].length - 1));
int boxN = scanner.nextInt();// 箱子的纵坐标
if (boxN > map[m].length - 1 || boxN < 0) {
System.out.println("您输入的列数有误,小人脱离了地图");
return;
}
map[boxM][boxN]=2;
/*--------------输入圈的坐标并赋值--------------*/
System.out.println("请输入圈的横坐标:从0-"+(map.length-1));
int quanM=scanner.nextInt();
if (quanM > map.length - 1 || quanM < 0) {
System.out.println("您输入的箱子行数有误,小人坐标脱离了地图");
return;
}
System.out.println("请输入圈的 纵坐标:从0-" + (map[quanM].length - 1));
int quanN=scanner.nextInt();
if (quanN > map[m].length - 1 || quanN < 0) {
System.out.println("您输入的列数有误,小人脱离了地图");
return;
}
map[quanM][quanN]=3;
if(boxM==m&&boxN==n){
System.out.println("箱子不能和人重复");
return;
}
else if(boxM==quanM&&boxN==quanN){
map[boxM][boxN]=2+3;
}else if(m==quanM&&n==quanN){
map[m][n]=1+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] + "\t");
}
System.out.println();
}
/*------------------检查动作结束---------------------*/
while (true) {
System.out.println("请输入小人移动的方向: w向上 a向左 s向下 d向右");
String command = scanner.next();
command.toUpperCase();
switch(command){
case "w":
//如果人在顶部
if(m==0){
System.out.println("人在顶部");
}else{
//如果箱子在圈上
if(map[m-1][n]==5){
System.out.println("成功");
return;
}//如果人的上一格是箱子并且人在圈上
else if(map[m-1][n]==2&&map[m][n]==4){
map[m-2][n]=map[m-2][n]+2;
map[m][n]=3;
m=m-1;
map[m][n]=1;
}else if( map[m-1][n]==2){//如果人的上一格是箱子
map[m-2][n]=map[m-2][n]+2;
map[m][n]=0;
m=m-1;
map[m][n]=1;
}else{//人的上一格什么也没有
map[m][n]=0;
m=m-1;
map[m][n]=1;
}
}
break;
case "a":
if(n==0){
System. err.println("已经在最左边了,不能在向左了");
}else{
if(map[m][n-1]==5){
System.out.println("成功");
return;
}else if(map[m][n-1]==2&&map[m][n]==4){//如果人在圈上并且箱子在左边
map[m][n-2]=map[m][n-2]+2;
map[m][n]=3;
n=n-1;
map[m][n]=1;
}else if(map[m][n-1]==2){//如果人的左边只有箱子
map[m][n-2]=map[m][n-2]+2;
map[m][n]=0;
n=n-1;
map[m][n]=1;
}else{//人的左边什么也没有
map[m][n]=0;
n=n-1;
map[m][n]=1;
}
}
break;
case "s":
//如果人在顶部
if(m==map.length){
System.out.println("人在底部部");
}else{
//如果箱子在圈上
if(map[m+1][n]==5){
System.out.println("成功");
return;
}//如果人的下一格是箱子并且人在圈上
else if(map[m+1][n]==2&&map[m][n]==4){
map[m+2][n]=map[m+2][n]+2;
map[m][n]=3;
m=m+1;
map[m][n]=1;
}else if( map[m+1][n]==2){//如果人的下一格是箱子
map[m+2][n]=map[m+2][n]+2;
map[m][n]=0;
m=m+1;
map[m][n]=1;
}else{//人的下一格什么也没有
map[m][n]=0;
m=m+1;
map[m][n]=1;
}
}
break;
case "d":
if(n==map[m].length){
System. err.println("已经在最左边了,不能在向左了");
}else{
if(map[m][n+1]==5){
System.out.println("成功");
return;
}else if(map[m][n+1]==2&&map[m][n]==4){//如果人在圈上并且箱子在左边
map[m][n+2]=map[m][n+2]+2;
map[m][n]=3;
n=n+1;
map[m][n]=1;
}else if(map[m][n+1]==2){//如果人的左边只有箱子
map[m][n+2]=map[m][n+2]+2;
map[m][n]=0;
n=n+1;
map[m][n]=1;
}else{//人的右边什么也没有
map[m][n]=0;
n=n+1;
map[m][n]=1;
}
}
break;
}
/*
* 我们检查一下目前的地图和小人
*/
if(map[m-1][n] == 5||map[m+1][n]==5||map[m][n-1]==5||map[m][n+1]==5){
System.out.println("成功");
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] + "\t");
}
System.out.println();
}
return;
}
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] + "\t");
}
System.out.println();
}
}
}
}
public class Txz {
public static void main(String[] args) {
/*
* 加一个箱子进来,推箱子 1.代表人 2 代表箱子 3 代表放箱子的点(圈) 5代表接受箱子和3
* 判断移动有没有箱子,如果有箱子,先移动箱子,在移动人 4代表 人和3的点,,如果再要移动,如果是1:改为0,,
* 如果是5,在移动改为3(圈)
*/
/*
* 首先,我们要创建出来小人可以移动的地图 这个地图是一个二维的数组
*/
/*------------------创建地图,并实例化小人----------------*/
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;
}
map[m][n] = 1;
/*-------------输入箱子的坐标并赋值-------------------*/
System.out.println("请输入箱子的横坐标:从0-" + (map.length - 1));
int boxM = scanner.nextInt();// 箱子的横坐标
if (boxM > map.length - 1 || boxM < 0) {
System.out.println("您输入的箱子行数有误,小人坐标脱离了地图");
return;
}
System.out.println("请输入箱子的 纵坐标:从0-" + (map[boxM].length - 1));
int boxN = scanner.nextInt();// 箱子的纵坐标
if (boxN > map[m].length - 1 || boxN < 0) {
System.out.println("您输入的列数有误,小人脱离了地图");
return;
}
map[boxM][boxN]=2;
/*--------------输入圈的坐标并赋值--------------*/
System.out.println("请输入圈的横坐标:从0-"+(map.length-1));
int quanM=scanner.nextInt();
if (quanM > map.length - 1 || quanM < 0) {
System.out.println("您输入的箱子行数有误,小人坐标脱离了地图");
return;
}
System.out.println("请输入圈的 纵坐标:从0-" + (map[quanM].length - 1));
int quanN=scanner.nextInt();
if (quanN > map[m].length - 1 || quanN < 0) {
System.out.println("您输入的列数有误,小人脱离了地图");
return;
}
map[quanM][quanN]=3;
if(boxM==m&&boxN==n){
System.out.println("箱子不能和人重复");
return;
}
else if(boxM==quanM&&boxN==quanN){
map[boxM][boxN]=2+3;
}else if(m==quanM&&n==quanN){
map[m][n]=1+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] + "\t");
}
System.out.println();
}
/*------------------检查动作结束---------------------*/
while (true) {
System.out.println("请输入小人移动的方向: w向上 a向左 s向下 d向右");
String command = scanner.next();
command.toUpperCase();
switch(command){
case "w":
//如果人在顶部
if(m==0){
System.out.println("人在顶部");
}else{
//如果箱子在圈上
if(map[m-1][n]==5){
System.out.println("成功");
return;
}//如果人的上一格是箱子并且人在圈上
else if(map[m-1][n]==2&&map[m][n]==4){
map[m-2][n]=map[m-2][n]+2;
map[m][n]=3;
m=m-1;
map[m][n]=1;
}else if( map[m-1][n]==2){//如果人的上一格是箱子
map[m-2][n]=map[m-2][n]+2;
map[m][n]=0;
m=m-1;
map[m][n]=1;
}else{//人的上一格什么也没有
map[m][n]=0;
m=m-1;
map[m][n]=1;
}
}
break;
case "a":
if(n==0){
System. err.println("已经在最左边了,不能在向左了");
}else{
if(map[m][n-1]==5){
System.out.println("成功");
return;
}else if(map[m][n-1]==2&&map[m][n]==4){//如果人在圈上并且箱子在左边
map[m][n-2]=map[m][n-2]+2;
map[m][n]=3;
n=n-1;
map[m][n]=1;
}else if(map[m][n-1]==2){//如果人的左边只有箱子
map[m][n-2]=map[m][n-2]+2;
map[m][n]=0;
n=n-1;
map[m][n]=1;
}else{//人的左边什么也没有
map[m][n]=0;
n=n-1;
map[m][n]=1;
}
}
break;
case "s":
//如果人在顶部
if(m==map.length){
System.out.println("人在底部部");
}else{
//如果箱子在圈上
if(map[m+1][n]==5){
System.out.println("成功");
return;
}//如果人的下一格是箱子并且人在圈上
else if(map[m+1][n]==2&&map[m][n]==4){
map[m+2][n]=map[m+2][n]+2;
map[m][n]=3;
m=m+1;
map[m][n]=1;
}else if( map[m+1][n]==2){//如果人的下一格是箱子
map[m+2][n]=map[m+2][n]+2;
map[m][n]=0;
m=m+1;
map[m][n]=1;
}else{//人的下一格什么也没有
map[m][n]=0;
m=m+1;
map[m][n]=1;
}
}
break;
case "d":
if(n==map[m].length){
System. err.println("已经在最左边了,不能在向左了");
}else{
if(map[m][n+1]==5){
System.out.println("成功");
return;
}else if(map[m][n+1]==2&&map[m][n]==4){//如果人在圈上并且箱子在左边
map[m][n+2]=map[m][n+2]+2;
map[m][n]=3;
n=n+1;
map[m][n]=1;
}else if(map[m][n+1]==2){//如果人的左边只有箱子
map[m][n+2]=map[m][n+2]+2;
map[m][n]=0;
n=n+1;
map[m][n]=1;
}else{//人的右边什么也没有
map[m][n]=0;
n=n+1;
map[m][n]=1;
}
}
break;
}
/*
* 我们检查一下目前的地图和小人
*/
if(map[m-1][n] == 5||map[m+1][n]==5||map[m][n-1]==5||map[m][n+1]==5){
System.out.println("成功");
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] + "\t");
}
System.out.println();
}
return;
}
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] + "\t");
}
System.out.println();
}
}
}
}