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 ) ;
}
}
