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