用二维数组写的简单的推箱子,一个人,两个箱子,两个圈的情况。。

来源:互联网 发布:php 微信开发 编辑:程序博客网 时间:2024/05/29 11:42
import java.util.Scanner;public class FengKuangDe_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("请输入2箱子的横坐标:从0-" + (map.length - 1));int boxM2 = scanner.nextInt();// 箱子的横坐标if (boxM2 > map.length - 1 || boxM2 < 0) {System.out.println("您输入的2箱子行数有误,小人坐标脱离了地图");return;}System.out.println("请输入2箱子的 纵坐标:从0-" + (map[boxM].length - 1));int boxN2 = scanner.nextInt();// 箱子的纵坐标if (boxN2 > map[m].length - 1 || boxN2 < 0) {System.out.println("您输入的2箱子列数有误,小人脱离了地图");return;}map[boxM2][boxN2] = 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;/*--------------输入第二个圈的坐标并赋值--------------*/System.out.println("请输入圈的横坐标:从0-" + (map.length - 1));int quanM2 = scanner.nextInt();if (quanM2 > map.length - 1 || quanM2 < 0) {System.out.println("您输入的圈的行数有误,小人坐标脱离了地图");return;}System.out.println("请输入圈的 纵坐标:从0-" + (map[quanM2].length - 1));int quanN2 = scanner.nextInt();if (quanN2 > map[m].length - 1 || quanN2 < 0) {System.out.println("您输入圈的列数有误,小人脱离了地图");return;}map[quanM2][quanN2] = 3;/* --------------判断圈和箱子-----圈和人---圈和圈----箱子和箱子---- */if (boxM == m && boxN == n||(boxM2 == m && boxN2 == n)) {System.out.println("箱子不能和人重复");return;} else if( boxM==boxM2&&boxN==boxN2){//箱子和箱子System.out.println("箱子和箱子不能重复");return;}/*---------------------------给第一个箱子和圈的位置赋值---------------------------------------*/if (quanM == quanM2 && quanN == quanN2) {System.out.println("两个圈不能重复");return;}  elseif (boxM == quanM && boxN == quanN ) {      map[quanM][quanN] = 2 + 3;} elseif( boxM == quanM2 && boxN==quanN2 ) {      map[quanM2][quanN2] = 2 + 3;}/*---------------------------给第二个箱子和圈的位置赋值---------------------------------------*/if (quanM == quanM2 && quanN == quanN2) {System.out.println("两个圈不能重复");return;}  elseif (boxM2 == quanM && boxN2 == quanN)  {map[quanM][quanN] = 2 + 3;}else if(boxM2 == quanM2 && boxN2==quanN2 ){map[quanM2][quanN2] = 2 + 3;}/*---------------------------给人和圈的位置赋值---------------------------------------*/ if (m == quanM && n == quanN) {map[quanM][quanN] = 1 + 3;} else if(m == quanM2 && quanN2 == n){map[quanM2][quanN2]=1+3;} /*------------------------判断是否一开始就成功---------------*/ if (map[quanM][quanN]==5&&map[quanM2][quanN2]==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();}/*------------------检查动作结束---------------------*/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][n]==4&&map[m-1][n]==5){//人在圈上,人的上一格是箱子和圈if(m-1==0){System.out.println("箱子已经在边上");} else if(map[m-2][n]==5||map[m-2][n]==2){//箱子的上一格是箱子或者是圈子和圈System.out.println("箱子的上一格是箱子不能移动");}else if(map[m-2][n]==3){//箱子的上一格是圈map[m-2][n]=5;map[m][n]=3;m=m-1;map[m][n]=4;}else {//箱子的上一格什么也不是,,,,有问题map[m-2][n]=2;map[m][n]=3;m=m-1;map[m][n]=4;}}else if( map[m][n]==4&&map[m-1][n]==3){//人在圈上,人的上一格也是圈map[m][n]=3;m=m-1;map[m][n]=4;}else if(map[m][n]==4&&map[m-1][n]==2){//人在圈上,人的上一格是箱子if(m-1==0){System.out.println("箱子已经在边上");} else if(map[m-2][n]==5||map[m-2][n]==2){System.out.println("箱子的上一格是箱子不能移动");}else if(map[m-2][n]==3){//箱子的上一格是圈map[m-2][n]=5;map[m][n]=3;m=m-1;map[m][n]=1;}else {//箱子的上一格什么也不是map[m-2][n]=2;map[m][n]=3;m=m-1;map[m][n]=1;}}else if(map[m][n]==4){//人在圈上,人的上一格什么也不是map[m][n]=3;m=m-1;map[m][n]=1;}else if(map[m-1][n]==5){//人的上一格是箱子和圈,人不在圈上//测试到这里了if(m-1==0){System.out.println("箱子已经在边上");} else if(map[m-2][n]==5||map[m-2][n]==2){System.out.println("箱子的上一格是箱子不能移动");}else if(map[m-2][n]==3){//箱子的上一格是圈map[m-2][n]=5;map[m][n]=0;m=m-1;map[m][n]=4;}else {//箱子的上一格什么也不是map[m-2][n]=2;map[m][n]=0;m=m-1;map[m][n]=4;}}else if(map[m-1][n]==3){//人的上一格是圈,人不在圈上map[m][n]=0;m=m-1;map[m][n]=4;}elseif(map[m-1][n]==2){//人的上一格是箱子,人不在圈上if(m-1==0){System.out.println("箱子已经在边上");} else if(map[m-2][n]==5||map[m-2][n]==2){System.out.println("箱子的上一格是箱子不能移动");}else if(map[m-2][n]==3){//箱子的上一格是圈map[m-2][n]=5;map[m][n]=0;m=m-1;map[m][n]=1;}else {//箱子的上一格什么也不是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.out.println("人在墙边");}else{ if(map[m][n]==4&&map[m][n-1]==5){//人在圈上,人的左一格是箱子和圈if( n-1==0){System.out.println("箱子已经在边上");} else if(map[m][n-2]==5||map[m][n-2]==2){//箱子的 左一格是箱子或者是圈子和箱子System.out.println("箱子的左一格是箱子不能移动");}else if(map[m][n-2]==3){//箱子的左一格是圈map[m][n-2]=5;map[m][n]=3;n=n-1;map[m][n]=4;}else {//箱子的左一格什么也不是,,,,有问题map[m][n-2]=2;map[m][n]=3;n=n-1;map[m][n]=4;}}else if( map[m][n]==4&&map[m][n-1]==3){//人在圈上,人的左一格也是圈     map[m][n]=3; n=n-1;map[m][n]=4;}else if(map[m][n]==4&&map[m][n-1]==2){//人在圈上,人的左一格是箱子if(n-1==0){System.out.println("箱子已经在边上");} else if(map[m][n-2]==5||map[m][n-2]==2){System.out.println("箱子的左一格是箱子不能移动");}else if(map[m][n-2]==3){//箱子的左一格是圈map[m][n-2]=5;map[m][n]=3; n=n-1;map[m][n]=1;}else {//箱子的左一格什么也不是map[m][n-2]=2;map[m][n]=3;n=n-1;map[m][n]=1;}}else if(map[m][n]==4){//人在圈上,人的 左一格什么也不是map[m][n]=3; n=n-1;map[m][n]=1;}else if(map[m][n-1]==5){//人的 左一格是箱子和圈,人不在圈上if(n-1==0){System.out.println("箱子已经在边上");} else if(map[m][n-2]==5||map[m][n-2]==2){System.out.println("箱子的左一格是箱子不能移动");}else if(map[m][n-2]==3){//箱子的左一格是圈map[m][n-2]=5;map[m][n]=0;n=n-1;map[m][n]=4;}else {//箱子的左一格什么也不是map[m][n-2]=2;map[m][n]=0;n=n-1;map[m][n]=4;}}else if(map[m][n-1]==3){//人的左一格是圈,人不在圈上map[m][n]=0;n=n-1;map[m][n]=4;}elseif(map[m][n-1]==2){//人的左一格是箱子,人不在圈上if(n-1==0){System.out.println("箱子已经在边上");} else if(map[m][n-2]==5||map[m][n-2]==2){System.out.println("箱子的左一格是箱子不能移动");}else if(map[m][n-2]==3){//箱子的左一格是圈map[m][n-2]=5;map[m][n]=0;n=n-1;map[m][n]=1;}else {//箱子的左一格什么也不是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][n]==4&&map[m+1][n]==5){//人在圈上,人的下一格是箱子和圈if(m+1==map.length){System.out.println("箱子已经在边上");} else if(map[m+2][n]==5||map[m+2][n]==2){//箱子的下一格是箱子或者是圈子和圈System.out.println("箱子的下一格是箱子不能移动");}else if(map[m+2][n]==3){//箱子的下一格是圈map[m+2][n]=5;map[m][n]=3;m=m+1;map[m][n]=4;}else {//箱子的下一格什么也不是,,,,有问题map[m+2][n]=2;map[m][n]=3;m=m+1;map[m][n]=4;}}else if( map[m][n]==4&&map[m+1][n]==3){//人在圈上,人的下一格也是圈map[m][n]=3;m=m+1;map[m][n]=4;}else if(map[m][n]==4&&map[m+1][n]==2){//人在圈上,人的下一格是箱子if(m+1==map.length){System.out.println("箱子已经在边上");} else if(map[m+2][n]==5||map[m+2][n]==2){System.out.println("箱子的下一格是箱子不能移动");}else if(map[m+2][n]==3){//箱子的下一格是圈map[m+2][n]=5;map[m][n]=3;m=m+1;map[m][n]=1;}else {//箱子的下一格什么也不是map[m+2][n]=2;map[m][n]=3;m=m+1;map[m][n]=1;}}else if(map[m][n]==4){//人在圈上,人的下一格什么也不是map[m][n]=3;m=m+1;map[m][n]=1;}else if(map[m+1][n]==5){//人的下一格是箱子和圈,人不在圈上if(m+1==map.length){System.out.println("箱子已经在边上");} else if(map[m+2][n]==5||map[m+2][n]==2){System.out.println("箱子的下一格是箱子不能移动");}else if(map[m+2][n]==3){//箱子的下一格是圈map[m+2][n]=5;map[m][n]=0;m=m+1;map[m][n]=4;}else {//箱子的下一格什么也不是map[m+2][n]=2;map[m][n]=0;m=m+1;map[m][n]=4;}}else if(map[m+1][n]==3){//人的下一格是圈,人不在圈上map[m][n]=0;m=m+1;map[m][n]=4;}elseif(map[m+1][n]==2){//人的下一格是箱子,人不在圈上if(m+1==map.length){System.out.println("箱子已经在边上");} else if(map[m+2][n]==5||map[m+2][n]==2){System.out.println("箱子的下一格是箱子不能移动");}else if(map[m+2][n]==3){//箱子的下一格是圈map[m+2][n]=5;map[m][n]=0;m=m+1;map[m][n]=1;}else {//箱子的下一格什么也不是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.out.println("人在墙边");}else{ if(map[m][n]==4&&map[m][n+1]==5){//人在圈上,人的右一格是箱子和圈if( n+1==map[m].length){System.out.println("箱子已经在边上");} else if(map[m][n+2]==5||map[m][n+2]==2){//箱子的 右一格是箱子或者是圈子和箱子System.out.println("箱子的右一格是箱子不能移动");}else if(map[m][n+2]==3){//箱子的右一格是圈map[m][n+2]=5;map[m][n]=3;n=n+1;map[m][n]=4;}else {//箱子的右一格什么也不是,,,,有问题map[m][n+2]=2;map[m][n]=3;n=n+1;map[m][n]=4;}}else if( map[m][n]==4&&map[m][n+1]==3){//人在圈上,人的右一格也是圈     map[m][n]=3; n=n+1;map[m][n]=4;}else if(map[m][n]==4&&map[m][n+1]==2){//人在圈上,人的右一格是箱子if(n+1==map[m].length){System.out.println("箱子已经在边上");} else if(map[m][n+2]==5||map[m][n+2]==2){System.out.println("箱子的右一格是箱子不能移动");}else if(map[m][n+2]==3){//箱子的左一格是圈map[m][n+2]=5;map[m][n]=3; n=n+1;map[m][n]=1;}else {//箱子的右一格什么也不是map[m][n+2]=2;map[m][n]=3;n=n+1;map[m][n]=1;}}else if(map[m][n]==4){//人在圈上,人的 右一格什么也不是map[m][n]=3; n=n+1;map[m][n]=1;}else if(map[m][n+1]==5){//人的 右一格是箱子和圈,人不在圈上if(n+1==map[m].length){System.out.println("箱子已经在边上");} else if(map[m][n+2]==5||map[m][n+2]==2){System.out.println("箱子的右一格是箱子不能移动");}else if(map[m][n+2]==3){//箱子的右一格是圈map[m][n+2]=5;map[m][n]=0;n=n+1;map[m][n]=4;}else {//箱子的右一格什么也不是map[m][n+2]=2;map[m][n]=0;n=n+1;map[m][n]=4;}}else if(map[m][n+1]==3){//人的右一格是圈,人不在圈上map[m][n]=0;n=n+1;map[m][n]=4;}elseif(map[m][n+1]==2){//人的右一格是箱子,人不在圈上if(n+1==map[m].length){System.out.println("箱子已经在边上");} else if(map[m][n+2]==5||map[m][n+2]==2){System.out.println("箱子的右一格是箱子不能移动");}else if(map[m][n+2]==3){//箱子的右一格是圈map[m][n+2]=5;map[m][n]=0;n=n+1;map[m][n]=1;}else {//箱子的右一格什么也不是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[quanM][quanN]==5&&map[quanM2][quanN2]==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();}}}}


原创粉丝点击