小游戏之迷宫逃脱
warning:
这篇文章距离上次修改已过1582天,其中的内容可能已经有所变动。
本来在控制台用wasd
键直接了就可以控制小人移动,但奈何 java 没有这个功能,只能退而求其次,选择输入来控制小人移动。
这次用char数组
存储迷宫,"#"
字代表迷宫墙壁,大写的"O"
代表小人位置,墙壁空缺的地方为出口。
首先载入存储迷宫的数组,自动判断小人和出口的坐标,存储到变量里。
然后根据输入的指令,判断是否可以移动?
- 不可以,不移动;
- 可以,移动;
在判断是否到达出口?
- 是,结束游戏;
- 否,打印迷宫,等待指令;
嘛,很简单的个小游戏。
有机会看看能不能自动生成迷宫,和自动走迷宫。
演示视频
程序流程
程序代码
import java.util.Scanner;
public class Maze {
private static char[][] mazechar= {
{'#','#','#','#','#','#','#','#',},
{'#','O',' ','#',' ',' ',' ','#',},
{'#',' ','#','#',' ','#',' ','#',},
{'#',' ',' ',' ',' ','#',' ','#',},
{'#',' ','#',' ','#','#','#','#',},
{'#','#',' ',' ','#','#','#','#',},
{'#','#',' ','#',' ',' ',' ','#',},
{'#',' ',' ',' ',' ','#',' ',' ',},
{'#','#','#','#','#','#','#','#',}
};
private static int manX=0;
private static int manY=0;
private static int exitX=0;
private static int exitY=0;
public static void main(String[] args) {
while (true){
Scanner scanner=new Scanner(System.in);
printfMaze(mazechar);
findManAndExit(mazechar);
if (isExit()){
System.out.println("恭喜,逃脱成功!");
break;
}else {
printManAndExit();
printTips();
doMove(scanner.nextLine());
}
}
}
//寻找初始位置和迷宫出口
private static void findManAndExit(char[][] mazechar){
for(int i=0;i<mazechar.length;i++){
for(int j=0;j<mazechar[i].length;j++) {
if ('O'==mazechar[i][j]) {
manX = i;
manY = j;
}
if (' '==mazechar[i][j]&&(i==0||j==0||j==mazechar[i].length-1||i==mazechar.length-1)) {
exitX=i;
exitY=j;
}
}
}
}
//判断是否到出口
private static boolean isExit(){
if(manX==exitX&&manY==exitY){
return true;
}else {
return false;
}
}
//移动小人
private static void doMove(String s){
if("w".equals(s)||"W".equals(s)){
if('#'!=mazechar[manX-1][manY]){
mazechar[manX][manY]=' ';
mazechar[manX-1][manY]='O';
}
}
if("s".equals(s)||"S".equals(s)){
if('#'!=mazechar[manX+1][manY]){
mazechar[manX][manY]=' ';
mazechar[manX+1][manY]='O';
}
}
if("a".equals(s)||"A".equals(s)){
if('#'!=mazechar[manX][manY-1]){
mazechar[manX][manY]=' ';
mazechar[manX][manY-1]='O';
}
}
if("d".equals(s)||"D".equals(s)){
if('#'!=mazechar[manX][manY+1]){
mazechar[manX][manY]=' ';
mazechar[manX][manY+1]='O';
}
}
}
private static void printTips(){
System.out.println("输入\"w\"向上走;输入\"s\"向下走;输入\"a\"向左走;输入\"d\"向右走;不区分大小写!");
}
//打印当前位置和出口位置
private static void printManAndExit(){
System.out.println("man:"+manX+"-"+manY+"\t exit:"+exitX+"-"+exitY);
}
//打印迷宫
private static void printfMaze(char[][] mazechar){
for(char[] c1 : mazechar){
for(char c2:c1){
System.out.print(c2);
}
System.out.println();
}
}
}