DrawingFrame.java
上传用户:qiye11114
上传日期:2010-01-20
资源大小:126k
文件大小:5k
源码类别:

其他智力游戏

开发平台:

Java

  1. package hanoi;
  2. import java.awt.BorderLayout;
  3. import javax.swing.JFrame;
  4. import javax.swing.*;
  5. import java.awt.*;
  6. import java.awt.event.ActionEvent;
  7. import java.awt.event.ActionListener;
  8. import java.util.*;
  9. /**
  10.  * <p>Title: Hanoi Pan</p>
  11.  *
  12.  * <p>Description: </p>
  13.  *
  14.  * <p>Copyright: Copyright (c) 2005</p>
  15.  *
  16.  * <p>Company: </p>
  17.  *
  18.  * @author not attributable
  19.  * @version 1.0
  20.  */
  21. class DrawPanel extends JPanel {
  22.     private Hanoi_pan refHanoi_pan[];
  23.     public DrawPanel(Hanoi_pan myHanoi_pan[]) {
  24.         refHanoi_pan=myHanoi_pan;
  25.     }
  26.     public void paintComponent(Graphics g) {
  27.         super.paintComponent(g);
  28.         g.setColor(Color.black);
  29.         g.drawLine(35,150,125,150);
  30.         g.drawLine(155,150,245,150);
  31.         g.drawLine(275,150,365,150);
  32.         g.drawLine(80,50,80,150);
  33.         g.drawLine(200,50,200,150);
  34.         g.drawLine(320,50,320,150);
  35.         g.setColor(Color.blue);
  36.         for (int i=1;i<=refHanoi_pan.length;i++) {
  37.             g.drawRect(refHanoi_pan[i-1].x,refHanoi_pan[i-1].y,refHanoi_pan[i-1].width,refHanoi_pan[i-1].height);
  38.         }
  39.     }
  40. }
  41. public class DrawingFrame extends JFrame implements Runnable {
  42.     private int level;
  43.     private DrawPanel myDrawPanel;
  44.     JButton jButton1 = new JButton();
  45.     private Hanoi_pan myHanoi_pan[];
  46.     int bench[] = new int[3];
  47.     Thread PaintThread;
  48.     private DefaultFrame myDefaultFrame;
  49.     public void run() {
  50.         Hanoi(level,1,2,3);
  51.         JOptionPane.showMessageDialog(null,"哈哈,满意了吧!");
  52.         myDefaultFrame.setVisible(true);
  53.         this.dispose();
  54.     }
  55.     public DrawingFrame(DefaultFrame refDefaultFrame,int n) {
  56.         try {
  57.             bench[0]=level=n;
  58.             myHanoi_pan = new Hanoi_pan[level];
  59.             myDrawPanel=new DrawPanel(myHanoi_pan);
  60.             myDefaultFrame=refDefaultFrame;
  61.             jbInit();
  62.         } catch (Exception exception) {
  63.             exception.printStackTrace();
  64.         }
  65.     }
  66.     private void Hanoi(int n,int x,int y,int z) {
  67.         if (n == 1) {
  68.             Move(x, 1, z);
  69.         } else {
  70.             Hanoi(n - 1, x, z, y);
  71.             Move(x, n, z);
  72.             Hanoi(n - 1, y, x, z);
  73.         }
  74.     }
  75.     private void Move(int x,int n,int z) {
  76.         SetLocation(x,n,z);
  77.         try {
  78.             repaint();
  79.             Thread.sleep(500);
  80.         } catch (InterruptedException e) {
  81.             if (Thread.currentThread().isAlive()) {
  82.                 JOptionPane.showMessageDialog(null,"唉,太慢了,关掉吧!");
  83.                 myDefaultFrame.setVisible(true);
  84.                 this.dispose();
  85.             }
  86.         }
  87.         //System.out.println("move pan "+ n + " from " + x + " to " + z);
  88.     }
  89.     private void SetLocation(int x,int n,int z) {
  90.         switch (x) {
  91.         case 1:
  92.             bench[0]--;
  93.             break;
  94.         case 2:
  95.             bench[1]--;
  96.             break;
  97.         case 3:
  98.             bench[2]--;
  99.             break;
  100.         }
  101.         switch (z) {
  102.         case 1:
  103.             myHanoi_pan[n-1].x=80-myHanoi_pan[n-1].width/2;
  104.             myHanoi_pan[n-1].y=140-bench[0]*10;
  105.             bench[0]++;
  106.             break;
  107.         case 2:
  108.             myHanoi_pan[n-1].x=200-myHanoi_pan[n-1].width/2;
  109.             myHanoi_pan[n-1].y=140-bench[1]*10;
  110.             bench[1]++;
  111.             break;
  112.         case 3:
  113.             myHanoi_pan[n-1].x=320-myHanoi_pan[n-1].width/2;
  114.             myHanoi_pan[n-1].y=140-bench[2]*10;
  115.             bench[2]++;
  116.             break;
  117.         }
  118.     }
  119.     private void Init() {
  120.         for (int i=1;i<=level;i++) {
  121.             myHanoi_pan[i-1]= new Hanoi_pan(80-5*i,150-10*(level-i+1),10*i,10);
  122.         }
  123.     }
  124.     private void jbInit() throws Exception {
  125.         Init();
  126.         setSize(new Dimension(400, 300));
  127.         this.setTitle("Hanoi");
  128.         getContentPane().setLayout(null);
  129.         jButton1.setBounds(new Rectangle(169, 220, 60, 27));
  130.         jButton1.setFont(new java.awt.Font("Dialog", Font.PLAIN, 12));
  131.         jButton1.setText("开始");
  132.         jButton1.addActionListener(new DrawingFrame_jButton1_actionAdapter(this));
  133.         this.getContentPane().add(myDrawPanel, null);
  134.         this.getContentPane().add(jButton1);
  135.         this.setResizable(false);
  136.         myDrawPanel.setBounds(new Rectangle(0, 0, 400, 200));
  137.         myDrawPanel.setLayout(null);
  138.         Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
  139.         Dimension frameSize = this.getSize();
  140.         if (frameSize.height > screenSize.height) {
  141.             frameSize.height = screenSize.height;
  142.         }
  143.         if (frameSize.width > screenSize.width) {
  144.             frameSize.width = screenSize.width;
  145.         }
  146.         this.setLocation((screenSize.width - frameSize.width) / 2,
  147.                           (screenSize.height - frameSize.height) / 2);
  148.         this.setVisible(true);
  149.     }
  150.     public void jButton1_actionPerformed(ActionEvent e) {
  151.         if (PaintThread==null) {
  152.             PaintThread=new Thread(this);
  153.             PaintThread.start();
  154.             this.jButton1.setText("停止");
  155.         }
  156.         else if (!PaintThread.isInterrupted()) {
  157.             PaintThread.interrupt();
  158.         }
  159.     }
  160. }
  161. class DrawingFrame_jButton1_actionAdapter implements ActionListener {
  162.     private DrawingFrame adaptee;
  163.     DrawingFrame_jButton1_actionAdapter(DrawingFrame adaptee) {
  164.         this.adaptee = adaptee;
  165.     }
  166.     public void actionPerformed(ActionEvent e) {
  167.         adaptee.jButton1_actionPerformed(e);
  168.     }
  169. }