您的位置:首页 > 编程语言 > Java开发

南哥带你玩转 Java 之 Java 二维数组迷宫游戏

2018-01-06 15:20 288 查看

二维数组迷宫

分析:
1.打印地图 --- 二维数组的遍历
初始角标array[1][1]
结束角标array[1][9]
2.如何让'0'走起来
通过修改横纵角标达到让'0'走起来的目的
如何碰到墙'#'不交换移动
可以先把要走位置的元素取出来判断一下是否为墙'#'
是墙'#'进行交换移动,不是就不进行交换移动
3.循环输入(循环的停止条件就是array[1][9] == ' ' --> array[1][9] == '0'
如果有明确的停止循环条件使用 while 循环比较方便

public static void main(String[] args) {
// 有8个一维数组,每个一维数组中有10个元素
// array[1][9] --- 出口
// array[1][1] d ---> array[1][1] == ' '
//                        array[1][2] == '0'
// array[1][2] s ---> array[1][2] == ' '
//                        array[2][2] == '0'
// array[2][2] w ---> array[2][2] == ' '
//                        array[1][2] == '0'
// array[1][2] a ---> array[1][2] == ' '
//                        array[1][1] == '0'
char[][] array = {
// y  0   1   2   3   4   5   6   7   8   9
{'#','#','#','#','#','#','#','#','#','#'},// 0 ----- x
{'#','0',' ',' ',' ',' ','#','#',' ',' '},// 1
{'#','#',' ','#','#','#','#','#',' ','#'},// 2
{'#',' ',' ',' ',' ','#','#','#',' ','#'},// 3
{'#',' ','#','#',' ','#',' ',' ',' ','#'},// 4
{'#',' ','#','#',' ','#',' ','#','#','#'},// 5
{'#',' ',' ',' ',' ',' ',' ','#','#','#'},// 6
{'#','#','#','#','#','#','#','#','#','#'},// 7
};
// 打印地图
printArray(array);
// 声明要用的变量(起始角标、结束角标)
// 起始
int x = 1;
int y = 1;
// 结束
int ex = 1;
int ey = 9;
Scanner scanner = new Scanner(System.in);
while(array[ex][ey] != '0') {
// 提示输入(上下左右) w a s d
System.out.println("请输入(上下左右) w a s d:");
// 接收输入的值
String string = scanner.nextLine();
// 判断一下,往哪里移动
switch (string) {
case "w":
// 判断移动位置是否为墙
if (array[x - 1][y] != '#') {
// 把原来改为空格
array[x][y] = ' ';
// 向上移动 修改坐标 - 1
x--;
// 新位置变成'0'
array[x][y] = '0';
}
break;
case "a":
// 判断移动位置是否为墙
if (array[x][y - 1] != '#') {
// 把原来改为空格
array[x][y] = ' ';
// 向左移动 修改坐标 - 1
y--;
// 新位置变成'0'
array[x][y] = '0';
}
break;
case "s":
// 判断移动位置是否为墙
if (array[x + 1][y] != '#') {
// 把原来改为空格
array[x][y] = ' ';
// 向下移动 修改坐标 + 1
x++;
// 新位置变成'0'
array[x][y] = '0';
}
break;
case "d":
// 判断移动位置是否为墙
if (array[x][y + 1] != '#') {
// 把原来改为空格
array[x][y] = ' ';
// 向右移动 修改坐标 + 1
y++;
// 新位置变成'0'
array[x][y] = '0';
}
break;
default:
break;
}
// 修改后再打印一遍地图
printArray(array);
}
System.out.println("恭喜你通关了!");
scanner.close();
}

// 打印地图的方法
public static void printArray(char[][] array) {
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j]);
}
System.out.println();
}
}


二维数组迷宫进阶

把迷宫写成函数 在main函数中调用 并添加些功能 例如 过三关 和 计分

static Scanner scanner = new Scanner(System.in);
static int num = 0;
public static void main(String[] args) {
// 有8个一维数组,每个一维数组中有10个元素
// array[1][9] --- 出口
// array[1][1] d ---> array[1][1] == ' '
//                        array[1][2] == '0'
// array[1][2] s ---> array[1][2] == ' '
//                        array[2][2] == '0'
// array[2][2] w ---> array[2][2] == ' '
//                        array[1][2] == '0'
// array[1][2] a ---> array[1][2] == ' '
//                        array[1][1] == '0'
char[][] array = {
// y  0   1   2   3   4   5   6   7   8   9
{'#','#','#','#','#','#','#','#','#','#'},// 0 ----- x
{'#','0',' ',' ',' ',' ','#','#',' ',' '},// 1
{'#','#',' ','#','#','#','#','#',' ','#'},// 2
{'#',' ',' ',' ',' ','#','#','#',' ','#'},// 3
{'#',' ','#','#',' ','#',' ',' ',' ','#'},// 4
{'#',' ','#','#',' ','#',' ','#','#','#'},// 5
{'#',' ',' ',' ',' ',' ',' ','#','#','#'},// 6
{'#','#','#','#','#','#','#','#','#','#'},// 7
};
char[][] array1 = {
// y  0   1   2   3   4   5   6   7   8   9
{'#','#','#','#','#','#','#','#','#','#'},// 0 ----- x
{'#','0',' ',' ',' ','#',' ',' ',' ',' '},// 1
{'#','#','#','#',' ','#',' ','#',' ','#'},// 2
{'#',' ',' ',' ',' ','#',' ','#',' ','#'},// 3
{'#',' ','#','#','#','#',' ','#',' ','#'},// 4
{'#',' ','#','#',' ','#',' ','#',' ','#'},// 5
{'#',' ',' ',' ',' ',' ',' ',' ','#','#'},// 6
{'#','#','#','#','#','#','#','#','#','#'},// 7
};
char[][] array2 = {
// y  0   1   2   3   4   5   6   7   8   9
{'#','#','#','#','#','#','#','#','#','#'},// 0 ----- x
{'#','0',' ',' ',' ','#',' ',' ',' ',' '},// 1
{'#',' ','#','#',' ','#','#',' ','#','#'},// 2
{'#',' ','#','#',' ','#','#',' ','#','#'},// 3
{'#',' ','#','#',' ','#','#',' ','#','#'},// 4
{'#',' ','#','#',' ','#','#',' ','#','#'},// 5
{'#',' ',' ',' ',' ',' ',' ',' ','#','#'},// 6
{'#','#','#','#','#','#','#','#','#','#'},// 7
};

for (int i = 0; i < 3; i++) {
switch (i) {
case 0:
// 打印地图
printArray(array);
System.out.println("第一关");
game(array);
break;

case 1:
// 打印地图
printArray(array1);
System.out.println("第二关");
game(array1);
break;

case 2:
// 打印地图
printArray(array2);
System.out.println("第三关");
game(array2);
System.out.println("你用了" + num + "步走完三关迷宫");
break;

default:
break;
}
}

}

// 打印地图的方法
public static void printArray(char[][] array) {
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j]);
}
System.out.println();
}
}
// 循环游戏
public static void game(char[][] array) {
// 声明要用的变量(起始角标、结束角标)
// 起始
int x = 1;
int y = 1;
// 结束
int ex = 1;
int ey = 9;
while(array[ex][ey] != '0') {
// 提示输入(上下左右) w a s d
System.out.println("请输入(上下左右) w a s d:");
// 接收输入的值
String string = scanner.nextLine();
num++;
// 判断一下,往哪里移动
switch (string) {
case "w":
// 判断移动位置是否为墙
if (array[x - 1][y] != '#') {
// 把原来改为空格
array[x][y] = ' ';
// 向上移动 修改坐标 - 1
x--;
// 新位置变成'0'
array[x][y] = '0';
}
break;
case "a":
// 判断移动位置是否为墙
if (array[x][y - 1] != '#') {
// 把原来改为空格
array[x][y] = ' ';
// 向左移动 修改坐标 - 1
y--;
// 新位置变成'0'
array[x][y] = '0';
}
break;
case "s":
// 判断移动位置是否为墙
if (array[x + 1][y] != '#') {
// 把原来改为空格
array[x][y] = ' ';
// 向下移动 修改坐标 + 1
x++;
// 新位置变成'0'
array[x][y] = '0';
}
break;
case "d":
// 判断移动位置是否为墙
if (array[x][y + 1] != '#') {
// 把原来改为空格
array[x][y] = ' ';
// 向右移动 修改坐标 + 1
y++;
// 新位置变成'0'
array[x][y] = '0';
}
break;
default:
break;
}
// 修改后再打印一遍地图
printArray(array);
}
System.out.println("恭喜你通关了!");
}


http://blog.csdn.net/huzongnan/article/list
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: