import java.applet.*; import java.awt.*; public class Shift extends Applet implements Runnable{ int bd[]={2,2,-1,-1,-1,0,1,1,1,2,2}; int md[]={0,0,0,0,0,0,0,0,0,0,0}; Image pic,mpic; int mx,my; int cx,cd; int cy = 35; int mdn,mun; Button rep = new Button(" replay "); Thread th = null; Image os; Graphics og; public void init(){ setBackground(Color.white); os = createImage(460,95); og = os.getGraphics(); for(int k = 0;k < 11;k++)md[k]=bd[k]; setLayout(new FlowLayout()); add(rep); } public void paint(Graphics g){ og.setColor(Color.white); og.fillRect(0,0,460,95); og.setColor(Color.black); og.drawLine(20,cy ,20+60*7,cy ); og.drawLine(20,cy+45,20+60*7,cy+45); for(int i = 0;i < 8;i++)og.drawLine(20+60*i,cy,20+60*i,cy+45); for(int j = 2;j < 9;j++){ if(md[j] == -1){ pic = getImage(getDocumentBase(),"Picture/Right.gif"); }else if(md[j] == 1){ pic = getImage(getDocumentBase(),"Picture/Left.gif"); }else{ pic = getImage(getDocumentBase(),""); } og.drawImage(pic,20+60*(j-2),cy,this); og.drawImage(mpic,mx,my,this); } g.drawImage(os,0,0,this); } public boolean mouseDown(Event e,int x,int y){ mdn = (x - 20) / 60 + 2; if(md[mdn] == -1){ mpic = getImage(getDocumentBase(),"Picture/Right.gif"); cx = md[mdn]; cd = -1; md[mdn] = 0; }else if(md[mdn] == 1){ mpic = getImage(getDocumentBase(),"Picture/Left.gif"); cx = md[mdn]; cd = 1; md[mdn] = 0; }else{ mpic = getImage(getDocumentBase(),""); cx = 0; } mx = x - 30; my = y - 23; repaint(); return true; } public boolean mouseDrag(Event e,int x,int y){ mx = x-30; my = y-23; repaint(); return true; } public boolean mouseUp(Event e,int x,int y){ mun = (x - 20) / 60 + 2; if(cd == -1){ if((mdn+1 == mun)&&(md[mun] == 0)){ md[mun] = -1; mx = (mun - 2) * 60 + 20; my = cy; }else if((mdn+2 == mun)&&(md[mdn+1] == 1)&&(md[mun] == 0)){ md[mun] = -1; mx = (mun - 2) * 60 + 20; my = cy; }else{ md[mdn] = cx; } }else if(cd == 1){ if((mdn-1 == mun)&&(md[mun] == 0)){ md[mun] = 1; mx = (mun - 2) * 60 + 20; my = cy; }else if((mdn-2 == mun)&&(md[mdn-1] == -1)&&(md[mun] == 0)){ md[mun] = 1; mx = (mun - 2) * 60 + 20; my = cy; }else{ md[mdn] = cx; } }else{ md[mdn] = cx; } mpic = getImage(getDocumentBase(),""); repaint(); return true; } public boolean action(Event e,Object o){ if(e.target == rep){ for(int k = 0;k < 11;k++)md[k]=bd[k]; repaint(); return true; } return false; } 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 ) ; } }