자바 프로젝트 의 미로 게임 실현 방법
하나의 격자 미 로 는 n 행 n 열의 셀 로 구성 되 어 있 습 니 다.각 마당 의 개 는 공 터(0 으로 표시)이거 나 장애물(1 로 표시)입 니 다.당신 의 임 무 는 출발점 에서 종점 까지 의 이동 서열 을 찾 는 것 입 니 다.그 중에서 상하 좌우 로 만 인접 한 셀 로 이동 할 수 있 습 니 다.언제든지 장애물 이 있 는 단원 격 에서 미로 밖으로 나 갈 수 없고 출발점 은 왼쪽 상단 과 종점 오른쪽 하단 이다.
항목 기능:
미궁 경로 찾기 문 제 를 해결 하고 왼쪽 상단 미궁 입구 에서 오른쪽 아래 미궁 출구 까지 효과 적 인 경 로 를 찾 습 니 다.0 대 표 는 갈 수 있 고 1 대 표 는 갈 수 있 습 니 다.최종 미궁 과 경로 정 보 를 출력 하 십시오.출력 에 효과 적 인 경로 가 존재 하지 않 습 니 다.
생각:
1.미로 노드 유형(MazeNode)의 2 차원 배열 을 정의 합 니 다.
2.각 칸 의 value 값 을 초기 화하 고 2 차원 배열 의 각 칸 에 대상 을 저장 합 니 다.대상 의 value 값 은 0(현재 칸 은 갈 수 있 습 니 다)또는 1(현재 칸 은 갈 수 없습니다)
3.각 칸 의 네 방향(동서남북)이 걸 을 수 있 는 상태 인지 초기 화(0 걸 을 수 있 음,1 걸 을 수 없 음)
4.미 로 를 걷 기 시작한다.스 택 작업 을 사용 하여 걷 는 경 로 를 기록 하고 왼쪽 상단 요 소 를 스 택 에 들 어가 현재 스 택 꼭대기 요소 의 어느 방향 으로 갈 수 있 는 지 판단 하 며 그 중 하 나 를 걸 을 수 있 는 방향 으로 스 택 작업 을 하여 오른쪽 아래 요소 가 멈 추 는 지 알 수 있 습 니 다.창고 에 지나 간 경 로 를 저장 합 니 다.주의:막 다른 골목 으로 들 어 가 는 문제 가 발생 하면 스 택 꼭대기 요소 이 고 스 택 꼭대기 요소 의 네 방향 도 걸 을 수 없습니다.이때 스 택 에서 나 와 새로운 방향 을 선택 하여 다시 스 택 에 들 어가 오른쪽 아래 요소 가 멈 출 때 까지 해 야 합 니 다.
코드 와 실행 캡 처:
미궁 의 결점 류:
package cc;
public class MazeNode {
private int value;// 0 1
private int i;//
private int j;//
private boolean[] state;//
/* */
public MazeNode(int value,int i,int j) {
this.value=value;
this.i=i;
this.j=j;
state=new boolean[Constant.SIZE];
}
/*get set*/
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public int getI() {
return i;
}
public int getJ() {
return j;
}
public void setState(int direction,boolean state) {
this.state[direction]=state;
}
public boolean getState(int direction) {
return state[direction];
}
}
상수 클래스:
package cc;
public class Constant {
public static final int SIZE=4;//
public static final int EAST=0;//
public static final int WEAST=1;//
public static final int SORTH=2;//
public static final int NORTH=3;//
public static final int ABLE=0;//
}
미궁 종류:
package cc;
import java.util.Scanner;
import java.util.Stack;
/*
* @author : CC
* @data : 2020-12-14
* */
public class Maze {
private MazeNode[][] mazeNodes;//
private int column;//
private int row;//
private Stack<MazeNode> stack;//
/* */
public Maze(int row,int column) {
this.mazeNodes=new MazeNode[row][column];
this.column=column;
this.row=row;
stack=new Stack<MazeNode>();
}
/* */
private void initValue() {
Scanner sc=new Scanner(System.in);
System.out.println(" :");
for(int i=0;i<row;i++) {
for(int j=0;j<column;j++) {
this.mazeNodes[i][j]=new MazeNode(sc.nextInt(),i,j);
}
}
sc.close();
}
/* */
private void initState() {
for(int i=0;i<row;i++) {
for(int j=0;j<column;j++) {
if(mazeNodes[i][j].getValue()==Constant.ABLE) {
//
if(j+1<column&&mazeNodes[i][j+1].getValue()==Constant.ABLE) {
mazeNodes[i][j].setState(Constant.EAST,true);
}
//
if(i+1<row&&mazeNodes[i+1][j].getValue()==Constant.ABLE) {
mazeNodes[i][j].setState(Constant.SORTH,true);
}
//
if(j-1>=0&&mazeNodes[i][j-1].getValue()==Constant.ABLE) {
mazeNodes[i][j].setState(Constant.WEAST,true);
}
//
if(i-1>=0&&mazeNodes[i-1][j].getValue()==Constant.ABLE) {
mazeNodes[i][j].setState(Constant.NORTH,true);
}
}
}
}
}
/* */
public void goMaze() {
initValue();
initState();
if(mazeNodes[0][0].getValue()!=Constant.ABLE) {
// ,
System.out.println(" !");
return;
}
//
stack.push(mazeNodes[0][0]);
//
while(!stack.isEmpty()) {
MazeNode top=stack.peek();//
int i=top.getI();
int j=top.getJ();
if(i==row-1&&j==column-1) {
//
System.out.println(" !");
show();
return;
}
//
if(top.getState(Constant.EAST)==false&&top.getState(Constant.WEAST)==false&&top.getState(Constant.NORTH)==false&&top.getState(Constant.SORTH)==false) {
// ,
stack.pop();
}
//
// ,
if(top.getState(Constant.EAST)) {
stack.push(mazeNodes[i][j+1]);//
// false
mazeNodes[i][j].setState(Constant.EAST, false);
// false
mazeNodes[i][j+1].setState(Constant.WEAST, false);
}
//
if(top.getState(Constant.SORTH)) {
stack.push(mazeNodes[i+1][j]);//
mazeNodes[i][j].setState(Constant.SORTH, false);
mazeNodes[i+1][j].setState(Constant.NORTH, false);
}
//
if(top.getState(Constant.WEAST)) {
stack.push(mazeNodes[i][j-1]);//
mazeNodes[i][j].setState(Constant.WEAST, false);
mazeNodes[i][j-1].setState(Constant.EAST, false);
}
//
if(top.getState(Constant.NORTH)) {
stack.push(mazeNodes[i-1][j]);//
mazeNodes[i][j].setState(Constant.NORTH, false);
mazeNodes[i-1][j].setState(Constant.SORTH, false);
}
}
System.out.println(" !");
}
/* */
private void show(){
while (!stack.isEmpty()) {
MazeNode top = stack.peek();//
top.setValue(2);
stack.pop();//
}
System.out.println(" 2 :");
for(int i = 0;i<row;i++){
for(int j = 0;j<column;j++){
System.out.print(mazeNodes[i][j].getValue()+" ");
}
System.out.println();
}
}
}
테스트 클래스:
package cc;
public class Test {
public static void main(String[] args) {
Maze t1=new Maze(4,5);
t1.goMaze();
}
}
캡 처 실행:부족 한 점 과 건의 가 있 으 면 지적 과 토론 을 환영 합 니 다.
총결산
자바 프로젝트 의 미로 게임 실현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 미로 프로젝트 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.