⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maze.java

📁 载入txt文件迷宫
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.Random;

class Maze extends JFrame 
{
	public static void main(String args[])
	{
		Maze f= new Maze();
		f.setBounds(150,50,500,500);
		f.setVisible(true);	
	}



	int maze[][];						//save the maze
	Point mouse=new Point();			//the position of the mouse
	
	jpMainPanel mp=new jpMainPanel();         //the firstMaze panel 
	jpRandomPanel rp=new jpRandomPanel();     //the randomMaze panel
		
	

	JButton jbDFS=new JButton("DFS");                 //the Buttons
	JButton jbBFS=new JButton("BFS");
	JButton jbASTAR=new JButton("A*");
	JButton jbNewState=new JButton("New State");
	JButton jbIDS=new JButton("IDS");
	
	JLabel jlPart1=new JLabel("Part I");              //the Labels
	JLabel jlPart2=new JLabel("Part II");
	
	Random rand;
	
	public Maze()                                 //the constructor of maze class
	{
		super("AI assignment");
		                                             
	
		JPanel jpCtrlBar=new JPanel();             //GUI setting
		jpCtrlBar.setLayout(new FlowLayout());
        
        jpCtrlBar.add(jlPart1);
		jpCtrlBar.add(jbDFS);
		jpCtrlBar.add(jbBFS);
		jpCtrlBar.add(jbASTAR);
		jpCtrlBar.add(jlPart2);
	    jpCtrlBar.add(jbNewState);
		jpCtrlBar.add(jbIDS);
		getContentPane().setLayout(new BorderLayout());
		getContentPane().add(mp, BorderLayout.CENTER);


        getContentPane().add(jpCtrlBar, BorderLayout.SOUTH);
		mp.setBackground(Color.WHITE);


		
		
		                                           //set the listener
		this.addWindowListener(
			new WindowAdapter(){
				public void windowClosing(WindowEvent evt) {
					mp=null;
                	System.exit(0);
            	}
			}
		);

  	  
  	  
  	  jbBFS.addActionListener(
  	  	  new ActionListener()
             { public void actionPerformed(ActionEvent event)
           	 {       jbBFSActionPerformed(event);
           	 }
           	 }
           	 );
  	  	  
  	  
	  jbDFS.addActionListener(
           	 new ActionListener()
           	 { public void actionPerformed(ActionEvent event)
           	 {       jbDFSActionPerformed(event);
           	 }
           	 }
           	 );
           	 
	  jbASTAR.addActionListener(
	  	 new ActionListener()
           	 { public void actionPerformed(ActionEvent event)
           	 {       jbASTARActionPerformed(event);
           	 }
           	 }
           	 );
           	 
      jbIDS.addActionListener(
	  	 new ActionListener()
           	 { public void actionPerformed(ActionEvent event)
           	 {       jbIDSActionPerformed(event);
           	 }
           	 }
           	 );   	 
      jbNewState.addActionListener(
	  	 new ActionListener()
           	 { public void actionPerformed(ActionEvent event)
           	 {       jbNewStateActionPerformed(event);
           	 }
           	 }
           	 );   	 
	
		initGame();                             
	}
	
	
	public void initGame()                      //load firstMaze
	{
		
		getMaze();
	    getContentPane().add(mp, BorderLayout.CENTER);
		mp.setMaze(maze);
		mp.setMouse(mouse);
		jbDFS.setEnabled(true);
		jbBFS.setEnabled(true);
		jbASTAR.setEnabled(true);
		jbIDS.setEnabled(true);
		jbNewState.setEnabled(true);
		mp.setVisible(true);
		rp.setVisible(false);
        mp.repaint();
	}
	
    public void initRandomGame()               //load second random Maze
    {    getRandomMaze();
         getContentPane().add(rp, BorderLayout.CENTER);
         rp.setBackground(Color.WHITE);
         rp.setMaze(maze);
         rp.setMouse(mouse);
         jbDFS.setEnabled(true);
		 jbBFS.setEnabled(true);
		 jbASTAR.setEnabled(true);
		 jbIDS.setEnabled(true);
		 jbNewState.setEnabled(true);
         rp.repaint();
    }
	
	
	
	public void getMaze()                     //get the maze from the text file
	{
		String s[]=new String[20];
		int line_num=0;
		
		
		try{
			BufferedReader br=new BufferedReader(new FileReader("maze.txt"));
			for (int i=0;i<s.length;i++){
				s[i]=br.readLine();
				if (s[i] !=null) 
				  line_num++;
				else break;
			}
		}catch (Exception e){}
		
	
		maze=new int[line_num+2][s[0].length()+2];
		
	
		for (int i=0; i<maze.length; i++)
			for (int j=0; j<maze[0].length; j++)
			{
				if (i==0 || i==line_num+1) 
				  maze[i][j]=1;			//up and down
				else if (j==0 || j==s[0].length()+1) 
				  maze[i][j]=1;	//right and left
				else if (s[i-1].charAt(j-1)=='*') 
				  maze[i][j]=1;	//wall
				else if (s[i-1].charAt(j-1)=='S'){					//starter
					mouse.setLocation(j,i);
					maze[i][j]=10;
				}
				else if (s[i-1].charAt(j-1)=='E') 
				    maze[i][j]=11;	//end
				    
				else maze[i][j]=0;									//road
			}
	}
	  
	  
	  public void getRandomMaze()             //get maze from another text file 
	  {   	String s[]=new String[20];
		int line_num=0;
		Random rand = new Random();
	    int n =0, m=0;
	    
		try{
			BufferedReader br=new BufferedReader(new FileReader("randomMaze.txt"));
			for (int i=0;i<s.length;i++){
				s[i]=br.readLine();
				if (s[i] !=null) 
				  line_num++;
				else break;
			}
		}catch (Exception e){}
		
		
		maze=new int[line_num+2][s[0].length()+2];
		

		for (int i=0; i<maze.length; i++)
			for (int j=0; j<maze[0].length; j++)
			{
				if (i==0 || i==line_num+1) 
				  maze[i][j]=1;			//up and down
				else if (j==0 || j==s[0].length()+1) 
				  maze[i][j]=1;	//right and left
				else if (s[i-1].charAt(j-1)=='*') 
				  maze[i][j]=1;	//wall
				//else if (s[i-1].charAt(j-1)=='S'){		//starter
				//	mouse.setLocation(j,i);
				//	maze[i][j]=10;
				//}
				//else if (s[i-1].charAt(j-1)=='E') 
				  //  maze[i][j]=11;	//end
				else maze[i][j]=0;	//road
				
				  
			}
			   do{
			
			      m = rand.nextInt(10);
				  n = rand.nextInt(10);
				  //System.out.println(m+1);
				  //System.out.println(n+1);
				 } 
				  while (s[m].charAt(n)=='*' || s[n].charAt(m)=='*');
				 
				  mouse.setLocation(n+1,m+1);
				  maze[m+1][n+1]=10;
				   
				  
				  do{
			
			      m = rand.nextInt(10);
				  n = rand.nextInt(10);
				  //System.out.println(m+1);
				  //System.out.println(n+1);
				 } 
				  while (s[m].charAt(n)=='*' || s[n].charAt(m)=='*');
				  
				  maze[m+1][n+1]=11;
				  
				
		          
										 
			
	  }
	  
	  
	  
	  
	  
	  
	  
	  
	
	  public void jbDFSActionPerformed(ActionEvent event) 
	  {       initGame();
	          DepthFirstSearch dfs=new DepthFirstSearch();
              jbDFS.setEnabled(false);
			  jbBFS.setEnabled(false);
			  jbASTAR.setEnabled(false);
			  jbIDS.setEnabled(false);
			  jbNewState.setEnabled(false);
	          dfs.start();
	  }
	           
      public void jbBFSActionPerformed(ActionEvent event)
      {       initGame();
              BreadthFirstSearch bfs=new BreadthFirstSearch();
              jbDFS.setEnabled(false);
			  jbBFS.setEnabled(false);
			  jbASTAR.setEnabled(false);
			  jbIDS.setEnabled(false);
			  jbNewState.setEnabled(false);;
	           bfs.start();
      }
      
      public void jbASTARActionPerformed(ActionEvent event)
      {       initGame();
              ASTAR astar=new ASTAR();
              jbDFS.setEnabled(false);
			  jbBFS.setEnabled(false);
			  jbASTAR.setEnabled(false);
			  jbIDS.setEnabled(false);
			  jbNewState.setEnabled(false);
			  astar.start();
        }
        
      public void jbIDSActionPerformed(ActionEvent event)
      {       IterativeDeepSearch ids=new IterativeDeepSearch();
              jbDFS.setEnabled(false);
			  jbBFS.setEnabled(false);
			  jbASTAR.setEnabled(false);
			  jbIDS.setEnabled(false);
			  jbNewState.setEnabled(false);
			  ids.start();
         }
         
      public void jbNewStateActionPerformed(ActionEvent event)
      {       NewState newstate=new NewState();
              mp.setVisible(false);
              initRandomGame();
              rp.setVisible(true);
              jbDFS.setEnabled(false);
			  jbBFS.setEnabled(false);
			  jbASTAR.setEnabled(false);
			  jbIDS.setEnabled(false);
			  jbNewState.setEnabled(false);
			  newstate.start();
      }
 
 
 
 
 class BreadthFirstSearch extends Thread                  //BFS class
 {      
 public void run()
       {    findExit();
       }
       
   public boolean findExit()
       {  	//till the end
		if (maze[mouse.y][mouse.x]==11){
			JOptionPane.showMessageDialog((Component)null," ^-^  Reach the goal","Game Over",JOptionPane.INFORMATION_MESSAGE);
            initGame();
            return true;
            
		}
		
		maze[mouse.y][mouse.x]=50;		//mark has visited
		
		//delay
		try{
			Thread.sleep(500);
		}
		catch (Exception e){}
		
	
		
	
		
		//right
		if (step(1,0))
			if (findExit()==true)
				return true;
			else mouse.x--;
		
	     
		
	     up
		if (step(0,-1))
		if (findExit()==true)
			return true;
		else mouse.y++;	
	
		
		//down
		if (step(0,1))
			if (findExit()==true)
				return true;
			else mouse.y--;
			
		
		
		//can not find the exit
		maze[mouse.y][mouse.x]=51;			//mark it is not through
		return false;
       }
       	
       	public boolean step(int x,int y)
	{
		int target=maze[mouse.y+y][mouse.x+x];
		if (target ==0 || target ==11 || target ==10){
			mouse.x+=x;
			mouse.y+=y;
			repaint();
			
			return true;
		}
		else

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -