import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class connection extends Applet implements Runnable{
Thread th = null;
Image os;
Graphics og;
int pd[][][] = {{{2,2,2,6},{4,2,4,6},{6,2,6,6},{3,2,5,2},{2,7,6,7}},
{{1,1,7,7},{1,2,6,7},{1,4,1,6},{1,3,1,7},{1,5,3,5}},
{{3,4,6,4},{6,3,6,6},{7,1,1,7},{3,5,6,5},{3,3,3,6}},
{{2,2,6,2},{4,3,4,7},{5,3,7,4},{2,6,6,6},{1,4,3,3}},
{{4,3,6,3},{4,4,4,6},{1,4,6,2},{1,5,7,7},{7,1,5,6}},
{{2,1,5,6},{3,5,7,7},{1,6,6,6},{5,3,1,5},{1,1,6,3}},
{{3,3,3,5},{5,5,5,7},{4,2,6,7},{3,2,2,7},{1,2,7,1}},
{{7,1,4,5},{4,3,1,7},{1,1,3,6},{5,2,7,7},{4,2,4,6}},
{{3,2,1,7},{3,3,6,4},{6,3,3,6},{4,4,5,7},{1,2,7,1}},
{{2,2,2,6},{5,2,6,4},{6,2,6,6},{2,4,6,5},{2,3,3,6}},
{{6,2,5,7},{1,5,4,7},{4,1,5,3},{2,2,7,7},{6,1,7,6}},
{{1,2,6,2},{1,1,5,3},{1,6,7,6},{2,3,5,1},{1,3,6,6}},
{{6,1,2,4},{1,6,3,5},{3,3,5,6},{2,6,6,2},{6,5,7,7}},
{{2,2,6,6},{1,4,7,6},{1,1,2,4},{1,6,4,7},{2,6,5,3}},
{{3,5,2,7},{2,1,6,6},{4,2,3,7},{3,2,7,4},{1,1,2,6}}};
int td[][] = new int[9][9];
int px,py,pc;
int pn = 0 ,fg,cf;
public void init(){
os = createImage(270,300);
og = os.getGraphics();
setBackground(Color.white);
d_set();
addMouseListener(
new MouseAdapter(){
public void mousePressed(MouseEvent e){
px = e.getX() / 30 ; py = e.getY() / 30 ;
if(e.getClickCount() == 2){
if((px > 0)&&(px < 8)&&(py > 0)&&(py < 8)){
if((td[py][px] > 0)&&(td[py][px] < 6)){
td[py][px] = 0;
pc = 0;
}
}
}
if((px > -1)&&(px < 8)&&(py > 0)&&(py < 8)){
if((td[py][px] > -1)&&(td[py][px] < 6)){
pc = td[py][px];
}else if((td[py][px] > 5)&&(td[py][px] < 11)){
pc = td[py][px] - 5;
}
}else if((px == 4)&&(py == 8)){
pn --;
if(pn < 0)pn = 0;
d_set();
}else if((px == 6)&&(py == 8)){
pn ++;
if(pn > 14)pn = 14;
d_set();
}else if((px == 2)&&(py == 8)){
d_set();
}
repaint();
}
}
);
addMouseMotionListener(
new MouseMotionAdapter(){
public void mouseDragged(MouseEvent e){
px = e.getX() / 30 ; py = e.getY() / 30 ;
if((td[py][px] > -1)&&(td[py][px] < 6)){
td[py][px] = pc;
}else if((td[py][px] > 5)&&(td[py][px] < 11)){
pc = td[py][px] - 5;
}
repaint();
}
}
);
}
public void paint(Graphics g){
og.setColor(Color.white);
og.fillRect(0,0,270,300);
for(int d1 = 1;d1 < 8;d1 ++){
for(int d2 = 1;d2 < 8;d2 ++){
d_rect(td[d2][d1],d1,d2);
}
}
og.setColor(Color.black);
og.setFont(new Font("",Font.BOLD,15));
og.drawString("reset",55,270);
og.drawRoundRect(47,250,56,30,10,10);
og.drawRoundRect(49,252,52,26,8,8);
if(pn == 0){
og.setColor(Color.gray);
}else{
og.setColor(Color.black);
}
og.drawLine(140,255,130,265);
og.drawLine(140,275,130,265);
og.drawLine(135,255,125,265);
og.drawLine(135,275,125,265);
og.drawLine(134,255,124,265);
og.drawLine(134,275,124,265);
if(pn == 14){
og.setColor(Color.gray);
}else{
og.setColor(Color.black);
}
og.drawLine(190,255,200,265);
og.drawLine(190,275,200,265);
og.drawLine(195,255,205,265);
og.drawLine(195,275,205,265);
og.drawLine(196,255,206,265);
og.drawLine(196,275,206,265);
og.setColor(Color.black);
og.setFont(new Font("",Font.BOLD,15));
if(pn < 9){
og.drawString("No."+(pn+1),150,272);
}else{
og.drawString("No."+(pn+1),145,272);
}
fg = 1;
for(int d1 = 1;d1 < 8;d1 ++){
for(int d2 = 1;d2 < 8;d2 ++){
if(td[d2][d1] == 0){
fg = 0;
}else if(td[d2][d1] < 6){
cf = 0;
if((td[d2][d1] == td[d2][d1+1])||(td[d2][d1] == td[d2][d1+1]-5))cf ++;
if((td[d2][d1] == td[d2][d1-1])||(td[d2][d1] == td[d2][d1-1]-5))cf ++;
if((td[d2][d1] == td[d2+1][d1])||(td[d2][d1] == td[d2+1][d1]-5))cf ++;
if((td[d2][d1] == td[d2-1][d1])||(td[d2][d1] == td[d2-1][d1]-5))cf ++;
if(cf != 2)fg = 0;
}else if(td[d2][d1] < 11){
cf = 0;
if(td[d2][d1] == td[d2][d1+1]+5)cf ++;
if(td[d2][d1] == td[d2][d1-1]+5)cf ++;
if(td[d2][d1] == td[d2+1][d1]+5)cf ++;
if(td[d2][d1] == td[d2-1][d1]+5)cf ++;
if(cf != 1)fg = 0;
}
}
}
if(fg == 1){
og.setFont(new Font("",Font.BOLD,60));
og.setColor(Color.black);
og.drawString("clear!!",52,158);
og.setColor(Color.red);
og.drawString("clear!!",50,160);
}
g.drawImage(os,0,0,this);
}
public void d_rect(int cc,int xx,int yy){
if(cc == 0){
og.setColor(new Color(255,250,205));
og.fillRoundRect(xx*30,yy*30,30,30,7,7);
og.setColor(Color.gray);
og.drawRoundRect(xx*30,yy*30,30,30,7,7);
}else if(cc < 6){
for(int kk = 1;kk < 16;kk ++){
switch(cc){
case 1 : og.setColor(new Color(255 - kk*10, 0, 0)) ; break ;
case 2 : og.setColor(new Color( 0,255 - kk*10, 0)) ; break ;
case 3 : og.setColor(new Color( 0, 0,255 - kk*10)) ; break ;
case 4 : og.setColor(new Color(255 - kk*10,255 - kk*10, 0)) ; break ;
case 5 : og.setColor(new Color(255 - kk*10, 0,255 - kk*10)) ; break ;
}
og.drawRect(xx*30+kk,yy*30+kk,30-kk*2,30-kk*2);
}
}else if(cc < 11){
for(int kk = 1;kk < 16;kk ++){
switch(cc){
case 6 : og.setColor(new Color(105 + kk*10, 0, 0)) ; break ;
case 7 : og.setColor(new Color( 0,105 + kk*10, 0)) ; break ;
case 8 : og.setColor(new Color( 0, 0,105 + kk*10)) ; break ;
case 9 : og.setColor(new Color(105 + kk*10,105 + kk*10, 0)) ; break ;
case 10 : og.setColor(new Color(105 + kk*10, 0,105 + kk*10)) ; break ;
}
og.drawRect(xx*30+kk,yy*30+kk,30-kk*2,30-kk*2);
}
}
}
public void d_set(){
for(int s1 = 0;s1 < 9;s1 ++){
td[0][s1] = -1 ; td[8][s1] = -1 ; td[s1][0] = -1 ; td[s1][8] = -1 ;
}
for(int s1 = 1;s1 < 8;s1 ++){
for(int s2 = 1;s2 < 8;s2 ++){
td[s2][s1] = 0;
}
}
for(int s1 = 0;s1 < 5;s1 ++){
td[pd[pn][s1][1]][pd[pn][s1][0]] = s1 + 6;
td[pd[pn][s1][3]][pd[pn][s1][2]] = s1 + 6;
}
}
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 ) ;
}
}
