DrawingFrame.java~106~
上传用户: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.     JButton jButton2 = new JButton();
  49.     public void run() {
  50.         Hanoi(level,1,2,3);
  51.     }
  52.     public DrawingFrame(int n) {
  53.         try {
  54.             bench[0]=level=n;
  55.             myHanoi_pan = new Hanoi_pan[level];
  56.             myDrawPanel=new DrawPanel(myHanoi_pan);
  57.             jbInit();
  58.         } catch (Exception exception) {
  59.             exception.printStackTrace();
  60.         }
  61.     }
  62.     private void Hanoi(int n,int x,int y,int z) {
  63.         if (n == 1) {
  64.             Move(x, 1, z);
  65.         } else {
  66.             Hanoi(n - 1, x, z, y);
  67.             Move(x, n, z);
  68.             Hanoi(n - 1, y, x, z);
  69.         }
  70.     }
  71.     private void Move(int x,int n,int z) {
  72.         SetLocation(x,n,z);
  73.         try {
  74.             repaint();
  75.             Thread.sleep(500);
  76.         } catch (InterruptedException e) {
  77.             System.exit(0);
  78.         }
  79.         //System.out.println("move pan "+ n + " from " + x + " to " + z);
  80.     }
  81.     private void SetLocation(int x,int n,int z) {
  82.         switch (x) {
  83.         case 1:
  84.             bench[0]--;
  85.             break;
  86.         case 2:
  87.             bench[1]--;
  88.             break;
  89.         case 3:
  90.             bench[2]--;
  91.             break;
  92.         }
  93.         switch (z) {
  94.         case 1:
  95.             myHanoi_pan[n-1].x=80-myHanoi_pan[n-1].width/2;
  96.             myHanoi_pan[n-1].y=140-bench[0]*10;
  97.             bench[0]++;
  98.             break;
  99.         case 2:
  100.             myHanoi_pan[n-1].x=200-myHanoi_pan[n-1].width/2;
  101.             myHanoi_pan[n-1].y=140-bench[1]*10;
  102.             bench[1]++;
  103.             break;
  104.         case 3:
  105.             myHanoi_pan[n-1].x=320-myHanoi_pan[n-1].width/2;
  106.             myHanoi_pan[n-1].y=140-bench[2]*10;
  107.             bench[2]++;
  108.             break;
  109.         }
  110.     }
  111.     private void Init() {
  112.         for (int i=1;i<=level;i++) {
  113.             myHanoi_pan[i-1]= new Hanoi_pan(80-5*i,150-10*(level-i+1),10*i,10);
  114.         }
  115.     }
  116.     private void jbInit() throws Exception {
  117.         Init();
  118.         setSize(new Dimension(400, 300));
  119.         this.setTitle("Hanoi");
  120.         getContentPane().setLayout(null);
  121.         jButton1.setBounds(new Rectangle(118, 219, 60, 27));
  122.         jButton1.setFont(new java.awt.Font("Dialog", Font.PLAIN, 12));
  123.         jButton1.setText("开始");
  124.         jButton1.addActionListener(new DrawingFrame_jButton1_actionAdapter(this));
  125.         jButton2.setBounds(new Rectangle(191, 219, 60, 27));
  126.         jButton2.setFont(new java.awt.Font("Dialog", Font.PLAIN, 12));
  127.         jButton2.setText("退出");
  128.         jButton2.addActionListener(new DrawingFrame_jButton2_actionAdapter(this));
  129.         this.getContentPane().add(myDrawPanel, null);
  130.         this.getContentPane().add(jButton1);
  131.         this.getContentPane().add(jButton2);
  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.interrupted()) {
  154.             PaintThread.interrupt();
  155.             this.jButton1.setText("开始");
  156.         }
  157.         else if (PaintThread.interrupted()) {
  158.             PaintThread.start();
  159.             this.jButton1.setText("开始");
  160.         }
  161.     }
  162.     public void jButton2_actionPerformed(ActionEvent e) {
  163.         System.exit(0);
  164.     }
  165. }
  166. class DrawingFrame_jButton2_actionAdapter implements ActionListener {
  167.     private DrawingFrame adaptee;
  168.     DrawingFrame_jButton2_actionAdapter(DrawingFrame adaptee) {
  169.         this.adaptee = adaptee;
  170.     }
  171.     public void actionPerformed(ActionEvent e) {
  172.         adaptee.jButton2_actionPerformed(e);
  173.     }
  174. }
  175. class DrawingFrame_jButton1_actionAdapter implements ActionListener {
  176.     private DrawingFrame adaptee;
  177.     DrawingFrame_jButton1_actionAdapter(DrawingFrame adaptee) {
  178.         this.adaptee = adaptee;
  179.     }
  180.     public void actionPerformed(ActionEvent e) {
  181.         adaptee.jButton1_actionPerformed(e);
  182.     }
  183. }