本来在控制台用wasd键直接了就可以控制小人移动,但奈何 java 没有这个功能,只能退而求其次,选择输入来控制小人移动。

这次用char数组存储迷宫,"#"字代表迷宫墙壁,大写的"O"代表小人位置,墙壁空缺的地方为出口。

首先载入存储迷宫的数组,自动判断小人和出口的坐标,存储到变量里。

然后根据输入的指令,判断是否可以移动?

  • 不可以,不移动;
  • 可以,移动;

在判断是否到达出口?

  • 是,结束游戏;
  • 否,打印迷宫,等待指令;

嘛,很简单的个小游戏。

有机会看看能不能自动生成迷宫,和自动走迷宫。


演示视频


程序流程

2019-12-25_210454.png


程序代码

  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}

运行截图

开始

2019-12-25_211649.png

游戏中

2019-12-25_211728.png

结束

2019-12-25_212334.png