DrawingFrame.java~113~
上传用户: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.     }
  52.     public DrawingFrame(DefaultFrame refDefaultFrame,int n) {
  53.         try {
  54.             bench[0]=level=n;
  55.             myHanoi_pan = new Hanoi_pan[level];
  56.             myDrawPanel=new DrawPanel(myHanoi_pan);
  57.             myDefaultFrame=refDefaultFrame;
  58.             jbInit();
  59.         } catch (Exception exception) {
  60.             exception.printStackTrace();
  61.         }
  62.     }
  63.     private void Hanoi(int n,int x,int y,int z) {
  64.         if (n == 1) {
  65.             Move(x, 1, z);
  66.         } else {
  67.             Hanoi(n - 1, x, z, y);
  68.             Move(x, n, z);
  69.             Hanoi(n - 1, y, x, z);
  70.         }
  71.     }
  72.     private void Move(int x,int n,int z) {
  73.         SetLocation(x,n,z);
  74.         try {
  75.             repaint();
  76.             Thread.sleep(500);
  77.         } catch (InterruptedException e) {
  78.             if (Thread.currentThread().isAlive()) {
  79.                 JOptionPane.showMessageDialog(null,"唉,太慢了,关掉吧!");
  80.                 myDefaultFrame.setVisible(true);
  81.                 this.dispose();
  82.             }
  83.         }
  84.         //System.out.println("move pan "+ n + " from " + x + " to " + z);
  85.     }
  86.     private void SetLocation(int x,int n,int z) {
  87.         switch (x) {
  88.         case 1:
  89.             bench[0]--;
  90.             break;
  91.         case 2:
  92.             bench[1]--;
  93.             break;
  94.         case 3:
  95.             bench[2]--;
  96.             break;
  97.         }
  98.         switch (z) {
  99.         case 1:
  100.             myHanoi_pan[n-1].x=80-myHanoi_pan[n-1].width/2;
  101.             myHanoi_pan[n-1].y=140-bench[0]*10;
  102.             bench[0]++;
  103.             break;
  104.         case 2:
  105.             myHanoi_pan[n-1].x=200-myHanoi_pan[n-1].width/2;
  106.             myHanoi_pan[n-1].y=140-bench[1]*10;
  107.             bench[1]++;
  108.             break;
  109.         case 3:
  110.             myHanoi_pan[n-1].x=320-myHanoi_pan[n-1].width/2;
  111.             myHanoi_pan[n-1].y=140-bench[2]*10;
  112.             bench[2]++;
  113.             break;
  114.         }
  115.     }
  116.     private void Init() {
  117.         for (int i=1;i<=level;i++) {
  118.             myHanoi_pan[i-1]= new Hanoi_pan(80-5*i,150-10*(level-i+1),10*i,10);
  119.         }
  120.     }
  121.     private void jbInit() throws Exception {
  122.         Init();
  123.         setSize(new Dimension(400, 300));
  124.         this.setTitle("Hanoi");
  125.         getContentPane().setLayout(null);
  126.         jButton1.setBounds(new Rectangle(169, 220, 60, 27));
  127.         jButton1.setFont(new java.awt.Font("Dialog", Font.PLAIN, 12));
  128.         jButton1.setText("开始");
  129.         jButton1.addActionListener(new DrawingFrame_jButton1_actionAdapter(this));
  130.         this.getContentPane().add(myDrawPanel, null);
  131.         this.getContentPane().add(jButton1);
  132.         this.setResizable(false);
  133.         myDrawPanel.setBounds(new Rectangle(0, 0, 400, 200));
  134.         myDrawPanel.setLayout(null);
  135.         Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
  136.         Dimension frameSize = this.getSize();
  137.         if (frameSize.height > screenSize.height) {
  138.             frameSize.height = screenSize.height;
  139.         }
  140.         if (frameSize.width > screenSize.width) {
  141.             frameSize.width = screenSize.width;
  142.         }
  143.         this.setLocation((screenSize.width - frameSize.width) / 2,
  144.                           (screenSize.height - frameSize.height) / 2);
  145.         this.setVisible(true);
  146.     }
  147.     public void jButton1_actionPerformed(ActionEvent e) {
  148.         if (PaintThread==null) {
  149.             PaintThread=new Thread(this);
  150.             PaintThread.start();
  151.             this.jButton1.setText("停止");
  152.         }
  153.         else if (!PaintThread.isInterrupted()) {
  154.             PaintThread.interrupt();
  155.         }
  156.     }
  157. }
  158. class DrawingFrame_jButton1_actionAdapter implements ActionListener {
  159.     private DrawingFrame adaptee;
  160.     DrawingFrame_jButton1_actionAdapter(DrawingFrame adaptee) {
  161.         this.adaptee = adaptee;
  162.     }
  163.     public void actionPerformed(ActionEvent e) {
  164.         adaptee.jButton1_actionPerformed(e);
  165.     }
  166. }