자바 프로젝트 의 미로 게임 실현 방법

항목 요구:
하나의 격자 미 로 는 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();
	}
}

캡 처 실행:

부족 한 점 과 건의 가 있 으 면 지적 과 토론 을 환영 합 니 다.
총결산
자바 프로젝트 의 미로 게임 실현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 미로 프로젝트 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기