【年少的风】迷宫自动演示&&手动操作

 

  
  
  
  
  1. import java.awt.*;  
  2. import java.awt.event.*;  
  3. import java.util.Scanner;  
  4.  
  5. import javax.swing.*;  
  6.  
  7. public class Maze extends JFrame {  
  8.       
  9.     private final int n = 10;  
  10.     JButton[] btMaze = new JButton[n * n];  
  11.     int[] fx = {1,-1,0,0};  
  12.     int[] fy = {0,0,-1,1};  
  13.     int nowx = 0;  
  14.     int nowy = 0;  
  15.     int[][] maze = {   
  16.             { 0000001110 },  
  17.             { 0110111000 },  
  18.             { 0100000011 },  
  19.             { 0111111000 },  
  20.             { 0001000001 },  
  21.             { 1101011101 },  
  22.             { 0000010101 },  
  23.             { 0111110100 },  
  24.             { 0110000110 },  
  25.             { 0000110000 } };  
  26.       
  27.     public static void main(String[] args) {  
  28.         new Maze();  
  29.     }  
  30.  
  31.     public Maze() {  
  32.         System.out.println("请选择演示方式:1.手动操作         2.自动演示");  
  33.         Scanner sc = new Scanner(System.in);  
  34.         int temp = sc.nextInt();  
  35.         if(temp == 1){  
  36.             frame(maze);  
  37.         }  
  38.         else if(temp == 2){  
  39.             frame(maze);  
  40.             search(0,0);  
  41.         }  
  42.         else{  
  43.             System.out.println("输入错误");  
  44.         }  
  45.     }  
  46.  
  47.     private void frame(int[][] maze) {  
  48.  
  49.         JFrame frame = new JFrame("迷宫");  
  50.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  51.         frame.setSize(60 * n, 60 * n);  
  52.         frame.setLocation(200100);  
  53.  
  54.         Container ct = frame.getContentPane();  
  55.  
  56.         JPanel panel = new JPanel();  
  57.         panel.setLayout(new GridLayout(n, n, 00));  
  58.  
  59.           
  60.         for (int i = 0; i < n * n; i++) {  
  61.  
  62.             btMaze[i] = new JButton();  
  63.             btMaze[i].setBackground(Color.gray);  
  64.             panel.add(btMaze[i]);  
  65.         }  
  66.  
  67.         for (int i = 0; i < n; i++) {  
  68.             for (int j = 0; j < n; j++) {  
  69.                 if (maze[i][j] == 1) {  
  70.                     btMaze[i * n + j].setBackground(Color.darkGray);  
  71.                 }  
  72.             }  
  73.         }  
  74.         btMaze[nowx*n + nowy].setBackground(Color.blue);  
  75.         btMaze[n*n-1].setBackground(Color.red);  
  76.           
  77.         frame.add(panel,new BorderLayout().CENTER);  
  78.           
  79.         JPanel panel2 = new JPanel();  
  80.         JButton jrb1 = new JButton("手动操作");  
  81.         //jrb1.addActionListener(new MyListener(frame));  
  82.         jrb1.setSelected(true);  
  83.         JButton jrb2 = new JButton("自动完成");  
  84.         //jrb2.addActionListener(new MyListener(frame));  
  85.  
  86.         panel2.add(jrb1);  
  87.         panel2.add(jrb2);  
  88.         panel2.setBackground(Color.gray);  
  89.         frame.add(panel2,new BorderLayout().SOUTH);  
  90.         frame.addKeyListener(new MyListener(frame));  
  91.         frame.setFocusable(true);// 不加没反应  
  92.         frame.setVisible(true);  
  93.     }  
  94.  
  95.      public void search(int i, int j)  
  96.      {  
  97.          int k;  
  98.          int newi;  
  99.          int newj;  
  100.          btMaze[i*n + j].setBackground(Color.gray);  
  101.          for (k = 0; k < 4; k++)  
  102.          {  
  103.              if (check(i, j, k) == 1)  
  104.              {  
  105.                  newi = i + fx[k];  
  106.                  newj = j + fy[k];  
  107.                  maze[newi][newj] = 3;  
  108.                  btMaze[newi*n + newj].setBackground(Color.blue);  
  109.                  try {  
  110.                     Thread.sleep(1000);  
  111.                 } catch (InterruptedException e) {  
  112.                     e.printStackTrace();  
  113.                 }  
  114.  
  115.                  if (newi == n-1 && newj == n-1)  
  116.                  {  
  117.                      JOptionPane.showMessageDialog(null"恭喜,胜利了");  
  118.                  }  
  119.                  else 
  120.                  {  
  121.                      search(newi, newj);  
  122.                      break;  
  123.                  }  
  124.              }  
  125.          }  
  126.          maze[i][j] = 2;  
  127.      }  
  128.      public int check(int i, int j, int k)  
  129.      {  
  130.          int flag = 1;  
  131.          i = i + fx[k];  
  132.          j = j + fy[k];  
  133.          if (i < 0 || i > n-1 || j < 0 || j > n-1)  
  134.          {  
  135.              flag = 0;  
  136.              return flag;  
  137.          }  
  138.          if (maze[i][j] != 0)  
  139.              flag = 0;  
  140.          return flag;  
  141.      }  
  142.       
  143.     class MyListener extends KeyAdapter implements ActionListener{  
  144.  
  145.           
  146.         JFrame frame;  
  147.         public MyListener(JFrame frame) {  
  148.             this.frame = frame;  
  149.         }  
  150.  
  151.  
  152.         public void keyPressed(KeyEvent e) {  
  153.               
  154.             if (e.getKeyCode() == KeyEvent.VK_UP) {  
  155.                 if(nowx > 0){  
  156.                     if(maze[nowx-1][nowy] == 0){  
  157.                         btMaze[nowx*n + nowy].setBackground(Color.gray);  
  158.                         nowx--;  
  159.                         btMaze[nowx*n + nowy].setBackground(Color.blue);  
  160.                     }  
  161.                 }  
  162.             }  
  163.             if (e.getKeyCode() == KeyEvent.VK_DOWN) {  
  164.                 if(nowx < n-1){  
  165.                     if(maze[nowx+1][nowy] == 0){  
  166.                         btMaze[nowx*n + nowy].setBackground(Color.gray);  
  167.                         nowx++;  
  168.                         btMaze[nowx*n + nowy].setBackground(Color.blue);  
  169.                     }  
  170.                 }  
  171.                 if(nowx == n-1 && nowy == n-1){  
  172.                     JOptionPane.showMessageDialog(null"恭喜,胜利了!");  
  173.                       
  174.                 }  
  175.             }  
  176.             if (e.getKeyCode() == KeyEvent.VK_LEFT) {  
  177.                 if(nowy > 0){  
  178.                     if(maze[nowx][nowy-1] == 0){  
  179.                         btMaze[nowx*n + nowy].setBackground(Color.gray);  
  180.                         nowy--;  
  181.                         btMaze[nowx*n + nowy].setBackground(Color.blue);  
  182.                     }  
  183.                 }  
  184.             }  
  185.             if (e.getKeyCode() == KeyEvent.VK_RIGHT) {  
  186.                 if(nowy < n-1){  
  187.                     if(maze[nowx][nowy+1] == 0){  
  188.                         btMaze[nowx*n + nowy].setBackground(Color.gray);  
  189.                         nowy++;  
  190.                         btMaze[nowx*n + nowy].setBackground(Color.blue);  
  191.                     }  
  192.                 }  
  193.                 if(nowx == n-1 && nowy == n-1){  
  194.                     JOptionPane.showMessageDialog(null"恭喜,胜利了!");  
  195.                 }  
  196.             }  
  197.         }  
  198.  
  199.  
  200.         public void actionPerformed(ActionEvent e) {  
  201.               
  202. System.out.println(e.getActionCommand());  
  203.             if(e.getActionCommand().equals("手动操作")){  
  204.                   
  205.                 frame.addKeyListener(new MyListener(frame));  
  206.             }  
  207.             if(e.getActionCommand().equals("自动完成")){  
  208.                 search(0,0);  
  209.             }  
  210.         }  
  211.     }  
  212. }  

 

你可能感兴趣的:(迷宫,年少的风,手动操作,自动演示)