java 用二维数组写的简单的推箱子,一个人,一个箱子,一个点的情况

来源:互联网 发布:学c语言需要什么基础 编辑:程序博客网 时间:2024/06/11 19:00
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();
            }
        
        
        }
        
        
 
    }
 
}

原创粉丝点击