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

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();
			}

			}
		}
	}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,对于这个问题,我可以给你一些指导和提示,但是具体的代码实现需要你自己完成。 首先,推箱子游戏是一种经典的逻辑推理游戏,玩家需要控制人物移动推动箱子,将所有箱子推到目标位置才能通关。在实现这个游戏的代码中,需要涉及到一些基本的数据结构和算法,如二维数组、循环、判断等等。 下面是一个简单推箱子游戏的实现思路: 1. 定义一个二维数组来表示地图,每个格子的值代表该位置上的物体,比如0代表空位,1代表人物,2代表箱子,3代表目标点等等。一开始需要初始化地图,将格子的值赋为相应的物体。 2. 定义两个变量来表示人物的坐标,一个是当前所在的位置,一个是上一次所在的位置。在每次移动时,先记录上一次位置,然后更新当前位置。注意需要进行边界判断和障碍物碰撞检测。 3. 定义一个函数来处理箱子的移动,需要传入箱子的坐标以及前进方向。如果箱子前方是空地或目标点,则可以移动箱子,并且更新地图上箱子的位置。否则不能移动。 4. 定义一个循环,不断读取用户输入的方向,并根据方向更新人物和箱子的位置。在每次移动后需要判断是否通关,也就是判断所有箱子是否都在目标点上。 这些就是推箱子游戏的基本实现思路,你可以参考这些思路,自己编代码实现。如果需要更详细的帮助,可以在CSDN社区中寻求帮助,或者查找一些推箱子游戏的代码示例进行参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值