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

其他智力游戏

开发平台:

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