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;
} else if (boxM == quanM && boxN == quanN ) {
map[quanM][quanN] = 2 + 3;
}
else if( boxM == quanM2 && boxN==quanN2 ) {
map[quanM2][quanN2] = 2 + 3;
}
/*---------------------------给第二个箱子和圈的位置赋值---------------------------------------*/
if (quanM == quanM2 && quanN == quanN2) {
System.out.println("两个圈不能重复");
return;
} else if (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;
}
else if(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;
}
else if(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;
}
else if(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;
}
else if(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();
}
}
}
}
用二维数组写的简单的推箱子,一个人,两个箱子,两个圈的情况。。
最新推荐文章于 2022-08-15 16:32:40 发布