import java.applet.*; import java.awt.*; import java.awt.event.*; public class skeleton extends Applet implements Runnable{ int td[][] = {{-1,-1,-1,-1,-1, 0,-1,-1,-1, 0,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1, 0, 0, 0, 0, 0,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1, 0,-1,-1,-1, 0,-1,-1,-1,-1,-1}, {-1,-1, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0,-1,-1}, {-1,-1, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0,-1,-1}, { 0, 0, 0, 0, 0,-1, 0,-1, 0,-1, 0, 0, 0, 0, 0}, {-1,-1, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0,-1,-1}, {-1,-1, 0, 0, 0, 0, 0,-1, 0, 0, 0, 0, 0,-1,-1}, {-1,-1,-1,-1,-1, 0,-1,-1,-1, 0,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1, 0, 0, 0, 0, 0,-1,-1,-1,-1,-1}, {-1,-1,-1,-1,-1, 0,-1,-1,-1, 0,-1,-1,-1,-1,-1}}; int ws[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; int tpx[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; int tpy[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; int wdd[] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; String mk; int md[][] = {{ 1, 2, 3, 4, 5},{ 1, 7, 8, 9, 3},{10,11, 6, 9, 3},{10,12, 5, 4, 5}, { 9, 6,12, 7,12},{13, 1, 5, 4, 7},{16, 9,15, 2, 1},{11,17,10, 9,18}, {11,17, 4, 7, 1},{11, 3,14, 9,15},{ 7, 1, 4,14, 9},{ 7, 9,19,11,12}, { 5, 1,14, 9,15},{ 5, 9,17,12,17},{12,17, 9,15,12},{ 3, 1, 7, 6, 9}, { 3,11,15, 9,17},{ 3,12,15,12,15},{ 3, 4,14,12,15},{14,11,17, 4, 3}, { 4, 7, 4, 7,12},{ 4,14,11, 7, 9},{ 6, 9, 7, 4,14},{ 6,11,17,18,11}}; int sn = 1,dd = 1,ss = 0,ck; int mx=-100,my=-100,px,py; Thread th = null; Image os; Graphics og; public void init(){ os = createImage(580,280); og = os.getGraphics(); setBackground(Color.white); addMouseListener( new MouseAdapter(){ public void mousePressed(MouseEvent e){ if(e.getClickCount() == 2){ dd = dd*(-1); } if(((mx-340)*(mx-560)<0) && ((my-20)*(my-260)<0)){ sn = (e.getX()-340)/105*12+(e.getY()-20)/20; switch(ws[sn]){ case 0 : ws[sn] = 1 ; ss = 1 ; break; case 1 : ws[sn] = 0 ; ss = 0 ; break; case 2 : ws[sn] = 1 ; ss = 1 ; break; } td_r(); } if(((mx-20)*(mx-320)<0) && ((my-20)*(my-240)<0)){ if(dd == 1){ px = (e.getX()-20)/20-2; py = (e.getY()-20)/20; }else{ px = (e.getX()-20)/20; py = (e.getY()-20)/20-2; } ck = 0; for(int k1 = 0;k1 <5;k1 ++){ if(dd == 1){ if(td[py][px+k1] != 0){ if((td[py][px+k1] != md[sn][k1]) || (td[py][px+k1] == -1))ck = 1; } }else{ if(td[py+k1][px] != 0){ if((td[py+k1][px] != md[sn][k1]) || (td[py+k1][px] == -1))ck = 1; } } } if((ws[sn] == 0) || (ws[sn] == 2))ck = 1; if(ck == 0){ tpx[sn] = px; tpy[sn] = py; wdd[sn] = dd; ws[sn] = 2; td_r(); } } repaint(); } } ); addMouseMotionListener( new MouseMotionAdapter(){ public void mouseMoved(MouseEvent e){ mx = e.getX()+10; my = e.getY()+10; repaint(); } } ); } public void paint(Graphics g){ og.setColor(Color.white); og.fillRect(0,0,580,280); og.setColor(new Color(175,238,238)); og.fillRect(10,10,320,260); og.setFont(new Font("",Font.PLAIN,18)); for(int k1 = 0;k1 < 15;k1 ++){ for(int k2 = 0;k2 < 11;k2 ++){ if(td[k2][k1] >= 0){ og.setColor(new Color(255,255,128)); og.fill3DRect(20*k1+20,20*k2+20,20,20,true); og.setColor(new Color(190,190,190)); og.drawRect(20*k1+20,20*k2+20,20,20); } } } for(int k3 = 0;k3 < 24;k3 ++){ if(ws[k3] != 2){ og.setColor(Color.white); }else{ og.setColor(Color.lightGray); } og.fillRect(120*(k3/12)+340,20*k3+20-240*(k3/12),100,20); for(int k4 = 0;k4 < 5;k4 ++){ og.setColor(new Color(0,0,90)); s_ch(md[k3][k4]); og.drawString(mk,120*(k3/12)+20*k4+342,20*k3+37-240*(k3/12)); } if(ws[k3] == 2){ for(int k4 = 0;k4 < 5;k4 ++){ og.setColor(new Color(0,0,90)); s_ch(md[k3][k4]); if(wdd[k3] == 1){ og.drawString(mk,tpx[k3]*20+k4*20+21,tpy[k3]*20+36); }else{ og.drawString(mk,tpx[k3]*20+21,tpy[k3]*20+k4*20+36); } } } } if(((mx-20)*(mx-320)<0) && ((my-20)*(my-240)<0)){ if(dd == 1){ og.setColor(Color.blue); og.drawRect((mx-50)/20*20,(my-10)/20*20,100,20); og.drawRect((mx-50)/20*20+1,(my-10)/20*20+1,100,20); if(ss == 1){ for(int k5 = 0;k5 < 5;k5 ++){ s_ch(md[sn][k5]); og.setColor(new Color(0,0,128)); og.drawString(mk,(mx-50)/20*20+20*k5+2,(my-10)/20*20+17); } } }else{ og.setColor(Color.blue); og.drawRect((mx-10)/20*20,(my-50)/20*20,20,100); og.drawRect((mx-10)/20*20+1,(my-50)/20*20+1,20,100); if(ss == 1){ for(int k5 = 0;k5 < 5;k5 ++){ s_ch(md[sn][k5]); og.setColor(new Color(0,0,128)); og.drawString(mk,(mx-10)/20*20+2,(my-50)/20*20+20*k5+17); } } } } if(ss == 1){ og.setColor(Color.red); og.drawRect(120*(sn/12)+340,20*sn+20-240*(sn/12),100,20); } og.setColor(Color.white); og.fillOval(245,195,60,60); og.setColor(new Color(0,0,128)); if(dd == 1){ og.fill3DRect(250,220,50,10,true); }else{ og.fill3DRect(270,200,10,50,true); } g.drawImage(os,0,0,this); } public void td_r(){ for(int k1 = 0;k1 < 15;k1 ++){ for(int k2 = 0;k2 < 11;k2 ++){ if(td[k2][k1] != -1)td[k2][k1] = 0; } } for(int k3 = 0;k3 < 24;k3 ++){ if(ws[k3] == 2){ if(wdd[k3] == 1){ for(int k5 = 0;k5 < 5;k5 ++)td[tpy[k3]][tpx[k3]+k5] = md[k3][k5]; }else{ for(int k5 = 0;k5 < 5;k5 ++)td[tpy[k3]+k5][tpx[k3]] = md[k3][k5]; } } } } public void s_ch(int ch){ switch(ch){ case 0 : mk = "" ; break; case 1 : mk = "™" ; break; case 2 : mk = "š" ; break; case 3 : mk = "›" ; break; case 4 : mk = "œ" ; break; case 5 : mk = "" ; break; case 6 : mk = " " ; break; case 7 : mk = "¡" ; break; case 8 : mk = "¢" ; break; case 9 : mk = "£" ; break; case 10 : mk = "ž" ; break; case 11 : mk = "Ÿ" ; break; case 12 : mk = "¤" ; break; case 13 : mk = "¥" ; break; case 14 : mk = "¦" ; break; case 15 : mk = "‡" ; break; case 16 : mk = "ˆ" ; break; case 17 : mk = "–" ; break; case 18 : mk = "{" ; break; case 19 : mk = "¬" ; break; } } 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 ) ; } }