import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.Math;
public class transpose extends Applet implements Runnable{
Thread th = null;
Image os;
Graphics og;
Image koma[] = new Image[5];
int pd[][] = new int[3][3];
int pa[][] = new int[3][3];
int pn = 0;
int gd[][][] = {{{1,4,1},{4,0,4},{5,4,5}},
{{2,4,2},{4,0,4},{5,4,5}},
{{1,4,1},{4,0,4},{2,4,2}},
{{1,3,1},{3,0,3},{2,3,2}},
{{2,3,2},{3,0,3},{1,3,1}},
{{3,3,3},{4,0,4},{5,5,5}},
{{4,4,4},{3,0,3},{5,5,5}},
{{4,3,4},{5,0,5},{5,5,5}}};
int ad[][][] = {{{5,4,5},{4,0,4},{1,4,1}},
{{5,4,5},{4,0,4},{2,4,2}},
{{2,4,2},{4,0,4},{1,4,1}},
{{2,3,2},{3,0,3},{1,3,1}},
{{1,3,1},{3,0,3},{2,3,2}},
{{5,5,5},{4,0,4},{3,3,3}},
{{5,5,5},{3,0,3},{4,4,4}},
{{5,5,5},{5,0,5},{4,3,4}}};
int skn = 0;
int kme[][][] = {{{0,1,0},{1,0,1},{0,1,0}},
{{1,0,1},{0,0,0},{1,0,1}},
{{1,1,1},{1,0,1},{0,1,0}},
{{1,1,1},{0,0,0},{1,0,1}},
{{0,1,0},{0,0,0},{0,0,0}}};
int tx,ty,dx,dy;
int sx1 = -1,sy1,sx2,sy2;
int kx = 1,ky = 1;
Choice cho = new Choice();
Button rep,und;
Label spa;
public void init(){
os = createImage(480,360);
og = os.getGraphics();
setBackground(Color.white);
for(int in = 0;in < 5;in ++){
koma[in] = getImage(getDocumentBase(),"Picture/koma"+(in+1)+".gif");
}
for(int iy = 0;iy < 3;iy ++){
for(int ix = 0;ix < 3;ix ++){
pd[iy][ix] = gd[pn][iy][ix];
pa[iy][ix] = ad[pn][iy][ix];
}
}
setLayout(new BorderLayout());
Panel pan = new Panel();
pan.setLayout(new FlowLayout());
pan.add(und = new Button(" undo "));
pan.add(spa = new Label(" "));
pan.add(rep = new Button(" replay "));
pan.add(spa = new Label(" "));
pan.add(cho);
cho.addItem(" no.1 ");
cho.addItem(" no.2 ");
cho.addItem(" no.3 ");
cho.addItem(" no.4 ");
cho.addItem(" no.5 ");
cho.addItem(" no.6 ");
cho.addItem(" no.7 ");
cho.addItem(" no.8 ");
cho.addItemListener(new MyListener());
add("South",pan);
rep.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
R_set();
repaint();
}
});
und.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(sx1 != -1){
pd[sy2][sx2] = pd[sy1][sx1];pd[sy1][sx1] = 0;
kx = sx1 ; ky = sy1 ; sx1 = -1;
repaint();
}
}
});
addMouseListener(
new MouseAdapter(){
public void mousePressed(MouseEvent e){
dx = (e.getX() - 40) / 80;
dy = (e.getY() - 40) / 80;
if(skn != 0){
if(kme[skn-1][1+ky-dy][1+kx-dx] == 1){
sx1 = kx ; sy1 = ky ; sx2 = dx ; sy2 = dy;
pd[ky][kx] = pd[dy][dx];pd[dy][dx] = 0;
kx = dx;ky = dy;
repaint();
}
}
}
}
);
addMouseMotionListener(
new MouseMotionAdapter(){
public void mouseMoved(MouseEvent e){
tx = (e.getX() - 40) / 80;
ty = (e.getY() - 40) / 80;
if((tx >= 0)&&(tx < 3)&&(ty >= 0)&&(ty < 3)){
skn = pd[ty][tx];
}
repaint();
}
}
);
}
class MyListener implements ItemListener{
public void itemStateChanged(ItemEvent e){
Choice cho = (Choice)e.getSource();
switch(cho.getSelectedIndex()){
case 0 : pn = 0 ; R_set() ; repaint() ; break;
case 1 : pn = 1 ; R_set() ; repaint() ; break;
case 2 : pn = 2 ; R_set() ; repaint() ; break;
case 3 : pn = 3 ; R_set() ; repaint() ; break;
case 4 : pn = 4 ; R_set() ; repaint() ; break;
case 5 : pn = 5 ; R_set() ; repaint() ; break;
case 6 : pn = 6 ; R_set() ; repaint() ; break;
case 7 : pn = 7 ; R_set() ; repaint() ; break;
}
}
}
public void paint(Graphics g){
og.setColor(Color.white);
og.fillRect(0,0,480,360);
og.setColor(new Color(255,255,230));
og.fillRect(40,40,240,240);
og.fillRect(320,30,120,120);
og.fillRect(320,170,120,120);
og.setColor(new Color(51,51,51));
for(int lx = 0;lx < 4;lx ++){
og.drawLine(lx*80+40,40,lx*80+40,280);
og.drawLine(40,lx*80+40,280,lx*80+40);
og.drawLine(lx*40+320,30,lx*40+320,150);
og.drawLine(320,lx*40+30,440,lx*40+30);
og.drawLine(lx*40+320,170,lx*40+320,290);
og.drawLine(320,lx*40+170,440,lx*40+170);
}
for(int gy = 0;gy < 3;gy ++){
for(int gx = 0;gx < 3;gx ++){
if(pd[gy][gx] != 0){
og.drawImage(koma[pd[gy][gx]-1],80*gx+40,80*gy+40,this);
}
if(pa[gy][gx] != 0){
og.drawImage(koma[pa[gy][gx]-1],40*gx+320,40*gy+30,40,40,this);
}
if(skn != 0){
if(kme[skn-1][gy][gx] != 0){
og.setColor(new Color(100,250,255));
og.fillRect(40*gx+322,40*gy+172,37,37);
}
}
}
}
if(skn != 0){
og.drawImage(koma[skn-1],360,210,40,40,this);
}
g.drawImage(os,0,0,this);
}
public void R_set(){
for(int iy = 0;iy < 3;iy ++){
for(int ix = 0;ix < 3;ix ++){
pd[iy][ix] = gd[pn][iy][ix];
pa[iy][ix] = ad[pn][iy][ix];
}
}
kx = 1;ky = 1;skn = 0;
return;
}
public void start(){
if(th == null){
th = new Thread(this);
th.start();
}
th.suspend();
}
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) ;
}
}
