import java.applet.*;
import java.awt.*;
public class K_tour2 extends Applet implements Runnable{ // 99/03/18 Imaishi
Thread m_MainThread = null ; // 99/03/18 Imaishi
Image m_OffScreen ; // 99/03/18 Imaishi
Graphics m_OffGraphics ; // 99/03/18 Imaishi
Image pic,pic1,pic2,pic4,pic5,pic7,pic8,pic10,pic11;
int kx,ky;
int px,py;
int dx,dy;
int mx,my;
int rx,ry;
int cx,cy;
int md[][]={{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1}};
int mdc[][]={{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1}};
int md1[][]={{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,-1,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,0,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1}};
int md1x = 2 , md1y = 2;
int md2[][]={{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,0,0,0,1,1,1,1},
{1,1,1,1,-1,0,0,0,1,1,1,1},
{1,1,1,1,0,0,0,0,1,1,1,1},
{1,1,1,1,1,0,0,0,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1}};
int md2x = 5 , md2y = 4;
int md3[][]={{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,-1,0,0,0,0,0,1,1,1},
{1,1,1,0,1,0,0,1,0,1,1,1},
{1,1,1,0,0,0,0,0,0,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1}};
int md3x = 5 , md3y = 3;
int md4[][]={{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,0,0,1,1,1,1,1},
{1,1,1,1,1,0,0,1,1,1,1,1},
{1,1,1,-1,0,0,0,0,0,1,1,1},
{1,1,1,0,0,0,0,0,0,1,1,1},
{1,1,1,1,1,0,0,1,1,1,1,1},
{1,1,1,1,1,0,0,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1}};
int md4x = 5 , md4y = 3;
int md5[][]={{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,0,0,0,0,0,0,0,0,1,1},
{1,1,1,1,0,1,1,0,1,1,1,1},
{1,1,-1,0,0,0,0,0,0,0,1,1},
{1,1,1,1,0,1,1,0,1,1,1,1},
{1,1,0,0,0,0,0,0,0,0,1,1},
{1,1,1,1,0,1,1,0,1,1,1,1},
{1,1,0,0,0,0,0,0,0,0,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1}};
int md5x = 4 , md5y = 2;
Choice sel = new Choice();
Button rep = new Button(" replay ");
public void init(){
m_OffScreen = createImage( 360, 360 ) ; // 99/03/18 Imaishi
m_OffGraphics = m_OffScreen.getGraphics() ; // 99/03/18 Imaishi
setBackground(Color.white);
pic1 = getImage(getDocumentBase(),"Picture/k-1.gif");
pic2 = getImage(getDocumentBase(),"Picture/k-2.gif");
pic4 = getImage(getDocumentBase(),"Picture/k-4.gif");
pic5 = getImage(getDocumentBase(),"Picture/k-5.gif");
pic7 = getImage(getDocumentBase(),"Picture/k-7.gif");
pic8 = getImage(getDocumentBase(),"Picture/k-8.gif");
pic10 = getImage(getDocumentBase(),"Picture/k-10.gif");
pic11 = getImage(getDocumentBase(),"Picture/k-11.gif");
pic = pic1;
kx = md1x;
ky = md1y;
cx = kx;
cy = ky;
for(int i1= 2;i1 < 10;i1 ++){
for(int i2 = 2;i2 < 10;i2 ++){
mdc[i1][i2] = md1[i1][i2];
md[i1][i2] = mdc[i1][i2];
}
}
setLayout(new BorderLayout());
Panel pan = new Panel();
pan.setLayout(new FlowLayout());
sel.addItem("Convex");
sel.addItem("Eight");
sel.addItem("Plus");
sel.addItem("Net");
sel.addItem("Chess Board");
pan.add(sel);
pan.add(rep);
add("South",pan);
}
public void paint(Graphics g){
g.drawImage( m_OffScreen, 0, 0, this ) ; // 99/03/18 Imaishi
m_OffGraphics.setColor(Color.white); // 99/03/18 Imaishi
m_OffGraphics.fillRect(0,0,360,360); // 99/03/18 Imaishi
m_OffGraphics.setColor(Color.black); // 99/03/18 Imaishi
for(int k = 0;k < 9;k ++){
m_OffGraphics.drawLine(20,20+40*k,20+40*8,20+40*k); // 99/03/18 Imaishi
m_OffGraphics.drawLine(20+40*k,20,20+40*k,20+40*8); // 99/03/18 Imaishi
}
for(int i1 = 2;i1 < 10;i1 ++){
for(int i2 = 2;i2 < 10;i2 ++){
rx = (i1 - 2) * 40;
ry = (i2 - 2) * 40;
if(md[i1][i2] == -1){
m_OffGraphics.setColor(Color.pink); // 99/03/18 Imaishi
m_OffGraphics.fillRect(rx + 21,ry + 21,39,39); // 99/03/18 Imaishi
}else if(md[i1][i2] == 1){
m_OffGraphics.setColor(Color.lightGray); // 99/03/18 Imaishi
m_OffGraphics.fillRect(rx + 21,ry + 21,39,39); // 99/03/18 Imaishi
}
}
}
px = (kx - 2) * 40 - 5;
py = (ky - 2) * 40 - 8;
m_OffGraphics.drawImage(pic,px,py,this); // 99/03/18 Imaishi
g.drawImage( m_OffScreen, 0, 0, this ) ; // 99/03/18 Imaishi
}
public boolean mouseMove(Event e,int x,int y){
mx = px + 45;
my = py + 36;
if((x - mx > 0)&&(y - my < 0)&&(x - mx < my - y))pic = pic1;
else if((x - mx > 0)&&(y - my < 0)&&(x - mx > my - y))pic = pic2;
else if((x - mx > 0)&&(y - my > 0)&&(x - mx > y - my))pic = pic4;
else if((x - mx > 0)&&(y - my > 0)&&(x - mx < y - my))pic = pic5;
else if((x - mx < 0)&&(y - my > 0)&&(mx - x < y - my))pic = pic7;
else if((x - mx < 0)&&(y - my > 0)&&(mx - x > y - my))pic = pic8;
else if((x - mx < 0)&&(y - my < 0)&&(mx - x > my - y))pic = pic10;
else if((x - mx < 0)&&(y - my < 0)&&(mx - x < my - y))pic = pic11;
repaint();
return true;
}
public boolean mouseDown(Event e,int x,int y){
dx = (x - 20) / 40 + 2;
dy = (y - 20) / 40 + 2;
if(((dx == kx + 1) && (dy == ky - 2) && (md[dx][dy] == 0)) ||
((dx == kx + 2) && (dy == ky - 1) && (md[dx][dy] == 0)) ||
((dx == kx + 2) && (dy == ky + 1) && (md[dx][dy] == 0)) ||
((dx == kx + 1) && (dy == ky + 2) && (md[dx][dy] == 0)) ||
((dx == kx - 1) && (dy == ky + 2) && (md[dx][dy] == 0)) ||
((dx == kx - 2) && (dy == ky + 1) && (md[dx][dy] == 0)) ||
((dx == kx - 2) && (dy == ky - 1) && (md[dx][dy] == 0)) ||
((dx == kx - 1) && (dy == ky - 2) && (md[dx][dy] == 0))){
kx = dx;
ky = dy;
md[dx][dy] = -1;
}
repaint();
return true;
}
public boolean action(Event e,Object o){
if(e.target == sel){
if(o == "Chess Board"){
for(int i = 2;i < 10;i ++){
for(int j = 2;j < 10;j ++){
md[i][j] = md1[i][j];
mdc[i][j] = md[i][j];
kx = md1x;
ky = md1y;
cx = kx;
cy = ky;
}
}
}else if(o == "Convex"){
for(int i = 2;i < 10;i ++){
for(int j = 2;j < 10;j ++){
md[i][j] = md2[i][j];
mdc[i][j] = md[i][j];
kx = md2x;
ky = md2y;
cx = kx;
cy = ky;
}
}
}else if(o == "Eight"){
for(int i = 2;i < 10;i ++){
for(int j = 2;j < 10;j ++){
md[i][j] = md3[i][j];
mdc[i][j] = md[i][j];
kx = md3x;
ky = md3y;
cx = kx;
cy = ky;
}
}
}else if(o == "Plus"){
for(int i = 2;i < 10;i ++){
for(int j = 2;j < 10;j ++){
md[i][j] = md4[i][j];
mdc[i][j] = md[i][j];
kx = md4x;
ky = md4y;
cx = kx;
cy = ky;
}
}
}else if(o == "Net"){
for(int i = 2;i < 10;i ++){
for(int j = 2;j < 10;j ++){
md[i][j] = md5[i][j];
mdc[i][j] = md[i][j];
kx = md5x;
ky = md5y;
cx = kx;
cy = ky;
}
}
}
repaint();
return true;
}
if(e.target == rep){
for(int i = 2;i < 10;i ++){
for(int j = 2;j < 10;j ++){
md[i][j] = mdc[i][j];
}
}
kx = cx;
ky = cy;
repaint();
return true;
}
return false;
}
////////////////////////////////////////////////////////////////////////////////
// 99/03/18 Imaishi ////////////////////////////////////////////////////////////
public void start()
{
if( m_MainThread == null) {
m_MainThread = new Thread(this);
m_MainThread.start();
}
}
public void stop()
{
m_MainThread = null;
}
public void run()
{
while (m_MainThread != null) {
try {
Thread.sleep( 200 );
} catch (InterruptedException e) { }
repaint();
}
}
public void update( Graphics g )
{
paint( g ) ;
}
}
