用面向过程写简单推箱子逻辑

xiaoxiao2021-02-28  86

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;                     }                 }             }         }     } }
转载请注明原文地址: https://www.6miu.com/read-20372.html

最新回复(0)