本来在控制台用wasd键直接了就可以控制小人移动,但奈何 java 没有这个功能,只能退而求其次,选择输入来控制小人移动。
这次用char数组存储迷宫,"#"字代表迷宫墙壁,大写的"O"代表小人位置,墙壁空缺的地方为出口。
首先载入存储迷宫的数组,自动判断小人和出口的坐标,存储到变量里。
然后根据输入的指令,判断是否可以移动?
- 不可以,不移动;
- 可以,移动;
在判断是否到达出口?
- 是,结束游戏;
- 否,打印迷宫,等待指令;
嘛,很简单的个小游戏。
有机会看看能不能自动生成迷宫,和自动走迷宫。
演示视频
程序流程

程序代码
1import java.util.Scanner;
2
3public class Maze {
4 private static char[][] mazechar= {
5 {'#','#','#','#','#','#','#','#',},
6 {'#','O',' ','#',' ',' ',' ','#',},
7 {'#',' ','#','#',' ','#',' ','#',},
8 {'#',' ',' ',' ',' ','#',' ','#',},
9 {'#',' ','#',' ','#','#','#','#',},
10 {'#','#',' ',' ','#','#','#','#',},
11 {'#','#',' ','#',' ',' ',' ','#',},
12 {'#',' ',' ',' ',' ','#',' ',' ',},
13 {'#','#','#','#','#','#','#','#',}
14 };
15 private static int manX=0;
16 private static int manY=0;
17 private static int exitX=0;
18 private static int exitY=0;
19
20 public static void main(String[] args) {
21 while (true){
22 Scanner scanner=new Scanner(System.in);
23 printfMaze(mazechar);
24 findManAndExit(mazechar);
25
26
27
28 if (isExit()){
29 System.out.println("恭喜,逃脱成功!");
30 break;
31 }else {
32 printManAndExit();
33 printTips();
34 doMove(scanner.nextLine());
35 }
36 }
37 }
38 //寻找初始位置和迷宫出口
39 private static void findManAndExit(char[][] mazechar){
40 for(int i=0;i<mazechar.length;i++){
41 for(int j=0;j<mazechar[i].length;j++) {
42 if ('O'==mazechar[i][j]) {
43 manX = i;
44 manY = j;
45 }
46 if (' '==mazechar[i][j]&&(i==0||j==0||j==mazechar[i].length-1||i==mazechar.length-1)) {
47 exitX=i;
48 exitY=j;
49 }
50 }
51 }
52 }
53
54 //判断是否到出口
55 private static boolean isExit(){
56 if(manX==exitX&&manY==exitY){
57 return true;
58 }else {
59 return false;
60 }
61 }
62
63 //移动小人
64 private static void doMove(String s){
65 if("w".equals(s)||"W".equals(s)){
66 if('#'!=mazechar[manX-1][manY]){
67 mazechar[manX][manY]=' ';
68 mazechar[manX-1][manY]='O';
69 }
70 }
71 if("s".equals(s)||"S".equals(s)){
72 if('#'!=mazechar[manX+1][manY]){
73 mazechar[manX][manY]=' ';
74 mazechar[manX+1][manY]='O';
75 }
76 }
77 if("a".equals(s)||"A".equals(s)){
78 if('#'!=mazechar[manX][manY-1]){
79 mazechar[manX][manY]=' ';
80 mazechar[manX][manY-1]='O';
81 }
82 }
83 if("d".equals(s)||"D".equals(s)){
84 if('#'!=mazechar[manX][manY+1]){
85 mazechar[manX][manY]=' ';
86 mazechar[manX][manY+1]='O';
87 }
88 }
89 }
90
91 private static void printTips(){
92 System.out.println("输入\"w\"向上走;输入\"s\"向下走;输入\"a\"向左走;输入\"d\"向右走;不区分大小写!");
93 }
94 //打印当前位置和出口位置
95 private static void printManAndExit(){
96 System.out.println("man:"+manX+"-"+manY+"\t exit:"+exitX+"-"+exitY);
97 }
98 //打印迷宫
99 private static void printfMaze(char[][] mazechar){
100 for(char[] c1 : mazechar){
101 for(char c2:c1){
102 System.out.print(c2);
103 }
104 System.out.println();
105 }
106 }
107}
运行截图
开始

游戏中

结束
