import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class T_hanoi extends Applet implements Runnable{ Image mp; Image pd[] = new Image[5]; int no,cn,fg,ct; int mx,my; int dx,dy; int ux,uy; int cx,cy; int td0[][] = {{0,1,2,3,4,5}, {0,0,0,0,0,5}, {0,0,0,0,0,5}}; int td[][] = {{0,1,2,3,4,5}, {0,0,0,0,0,5}, {0,0,0,0,0,5}}; int ht0[] = {4,0,0}; int ht[] = {4,0,0}; Button rep; Thread th = null; Image os; Graphics og; public void init(){ for(int i = 0;i < 5;i ++){ pd[i] = getImage(getDocumentBase(),"Picture/tw"+i+".gif"); } setBackground(Color.white); os = createImage(550,250); og = os.getGraphics(); addMouseListener( new MouseAdapter(){ public void mousePressed(MouseEvent e){ dx = (e.getX() - 50) / 150; dy = (e.getY() - 30) / 30; if(5 - dy == ht[dx]){ cn = td[dx][dy]; td[dx][dy] = 0; mp = pd[cn]; mx = e.getX() - 75; my = e.getY() - 30; ht[dx] --; cx = dx; cy = dy; fg = 1; }else{ fg = 0; } repaint(); } public void mouseReleased(MouseEvent e){ ux = (e.getX() - 50) / 150; if(ux < 0)ux = 0; if(ux > 2)ux = 2; if(fg == 1){ if(td[ux][5 - ht[ux]] > cn){ td[ux][4-ht[ux]] = cn; mp = getImage(getDocumentBase(),""); mx = e.getX() - 75; my = e.getY() - 30; ht[ux] ++; ct ++; fg = 0; }else{ td[cx][cy] = cn; mp = getImage(getDocumentBase(),""); mx = e.getX() - 75; my = e.getY() - 30; ht[cx] ++; fg = 0; } }else{ } repaint(); } } ); addMouseMotionListener( new MouseMotionAdapter(){ public void mouseDragged(MouseEvent e){ mx = e.getX() - 75; my = e.getY() - 30; repaint(); } } ); setLayout(new BorderLayout()); Panel pan = new Panel(); pan.setLayout(new FlowLayout()); pan.add(rep = new Button(" replay ")); add("South",pan); rep.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ for(int i = 0;i < 3;i ++){ for(int j = 0;j < 5;j ++){ td[i][j] = td0[i][j]; } } for(int i = 0;i < 3;i ++){ ht[i] = ht0[i]; } ct = 0; repaint(); } }); } public void paint(Graphics g){ og.setColor(Color.white); og.fillRect(0,0,550,250); og.setColor(Color.black); og.setFont(new Font("Century",Font.PLAIN,20)); og.drawString("count= "+ct,230,210); for(int t = 0;t < 3;t ++){ for(int s = 4;s >= 0;s --){ no = td[t][s]; og.drawImage(pd[no],150 * t + 50,30 * s,this); } } og.drawImage(mp,mx,my,this); g.drawImage(os,0,0,this); } public void start(){ if(th == null){ th = new Thread(this); th.start(); } } public void stop(){ th = null; } public void run(){ while(th != null){ try{ Thread.sleep(100); } catch (InterruptedException e){ } } } public void update( Graphics g ){ paint( g ) ; } }