import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class c_tile extends Applet{
int h = 20 , w = 35;
Image bg;
Graphics gr;
int olx[] = {w * 3,w * 7,w * 9,w * 7,w * 3,w * 1,w * 3};
int oly[] = {h * 1,h * 1,h * 7,h * 13,h * 13,h * 7,h * 1};
int t1x[] = {w * 5,w * 8,w * 2,w * 5} , t1y[] = {h * 1,h * 10,h * 10,h * 1};
int t2x[] = {w * 2,w * 8,w * 5,w * 2} , t2y[] = {h * 4,h * 4,h * 13,h * 4};
int s1x[] = {w * 5,w * 6,w * 4,w * 5} , s1y[] = {h * 14,h * 17,h * 17,h * 14};
int s2x[] = {w * 4,w * 6,w * 5,w * 4} , s2y[] = {h * 15,h * 15,h * 18,h * 15};
int std[][] = {{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 tdf[][] = {{-1,-1,-1,-1},{-1,-1,-1,-1},{-1,-1,-1,-1},{-1,-1,-1,-1}};
int tdr[][] = {{-1,-1,-1,-1},{-1,-1,-1,-1},{-1,-1,-1,-1},{-1,-1,-1,-1}};
int pc[][] = {{1,1,1},{2,2,2},{3,3,3},{4,4,4},
{1,2,2},{1,3,3},{1,4,4},{2,3,3},
{2,4,4},{3,4,4},{1,1,2},{1,1,3},
{1,1,4},{2,2,3},{2,2,4},{3,3,4},
{1,2,3},{1,2,4},{1,3,4},{2,3,4},
{1,3,2},{1,4,2},{1,4,3},{2,4,3}};
int f,n,c,t;
int sd = 0,ss = 0,sn;
int dx,dy,px,py,bx,by;
public void init(){
setBackground(Color.white);
bg = createImage(650,400);
gr = bg.getGraphics();
for(int ix = 0;ix < 4;ix ++){
for(int iy = 0;iy < 6;iy ++){
if(std[iy][ix] == 1){
f = 1;
}else{
f = 0;
}
Tri((ix * 2 + 11) * w,(iy * 3 +3) * h,0,f,pc[ix + iy * 4][0],pc[ix + iy * 4][1],pc[ix + iy * 4][2]);
}
}
Tri(w * 5,h * 16,sd,ss,pc[sn][0],pc[sn][1],pc[sn][2]);
addMouseListener(
new MouseAdapter(){
public void mousePressed(MouseEvent e){
dx = e.getX() ; dy = e.getY();
if((dx > 350) && (dx < 630) && (dy > 20) && (dy < 380)){
px = (dx - 350) / 70 ; py = (dy - 20) / 60;
if(std[py][px] == 1){
if(ss == 1){
bx = sn % 4;by = sn / 4;
std[by][bx] = 1;
Tri((bx * 2 + 11) * w,(by * 3 + 3) * h,0,1,pc[sn][0],pc[sn][1],pc[sn][2]);
}
n = px + py * 4;
sn = n;ss = 1;
Tri(w * 5,h * 16,sd,ss,pc[sn][0],pc[sn][1],pc[sn][2]);
std[py][px] = 0;
Tri((px * 2 + 11) * w,(py * 3 + 3) * h,0,0,pc[sn][0],pc[sn][1],pc[sn][2]);
}else{
if(ss == 1){
bx = sn % 4;by = sn / 4;
std[by][bx] = 1;ss = 0;
Tri((bx * 2 + 11) * w,(by * 3 + 3) * h,0,1,pc[sn][0],pc[sn][1],pc[sn][2]);
Tri(w * 5,h * 16,sd,ss,pc[sn][0],pc[sn][1],pc[sn][2]);
}
}
}
if((dx > 140) && (dx < 210) && (dy > 280) && (dy < 360)){
Tri(w * 5,h * 16,sd,0,pc[sn][0],pc[sn][1],pc[sn][2]);
if(sd == 0){
sd = 1;
}else{
c = pc[sn][0];pc[sn][0] = pc[sn][2];pc[sn][2] = pc[sn][1];pc[sn][1] = c;
sd = 0;
}
Tri(w * 5,h * 16,sd,ss,pc[sn][0],pc[sn][1],pc[sn][2]);
}
if((dy > 20) && (dy < 260) && (12*dx-7*dy+560 > 0) && (12*dx-7*dy-2800 < 0) && (12*dx+7*dy-1400 > 0) && (12*dx+7*dy-4760 < 0)){
py = (dy - 20) / 60;
if(ss == 1){
if(sd == 0){
px = (dx - w * ((py + 1) % 2 + 1)) / 70;
if(tdf[py][px] > -1){
t = tdf[py][px];tdf[py][px] = sn;sn = t;
}else{
tdf[py][px] = sn;ss = 0;
}
Tri(px * 70 + ((py + 1) % 2 + 2) * w,py * 60 + 60,0,1,pc[tdf[py][px]][0],pc[tdf[py][px]][1],pc[tdf[py][px]][2]);
Tri(w * 5,h * 16,sd,ss,pc[sn][0],pc[sn][1],pc[sn][2]);
}else{
px = (dx - w * (py % 2 + 1)) / 70;
if(tdr[py][px] > -1){
t = tdr[py][px];tdr[py][px] = sn;sn = t;
}else{
tdr[py][px] = sn;ss = 0;
}
Tri(px * 70 + (py % 2 + 2) * w,py * 60 + 40,1,1,pc[tdr[py][px]][0],pc[tdr[py][px]][1],pc[tdr[py][px]][2]);
Tri(w * 5,h * 16,sd,ss,pc[sn][0],pc[sn][1],pc[sn][2]);
}
}else{
if(sd == 0){
px = (dx - w * ((py + 1) % 2 + 1)) / 70;
if(tdf[py][px] > -1){
sn = tdf[py][px];tdf[py][px] = -1;ss = 1;
Tri(px * 70 + ((py + 1) % 2 + 2) * w,py * 60 + 60,0,0,pc[sn][0],pc[sn][1],pc[sn][2]);
Tri(w * 5,h * 16,sd,ss,pc[sn][0],pc[sn][1],pc[sn][2]);
}
}else{
px = (dx - w * (py % 2 + 1)) / 70;
if(tdr[py][px] > -1){
sn = tdr[py][px];tdr[py][px] = -1;ss = 1;
Tri(px * 70 + (py % 2 + 2) * w,py * 60 + 40,1,0,pc[sn][0],pc[sn][1],pc[sn][2]);
Tri(w * 5,h * 16,sd,ss,pc[sn][0],pc[sn][1],pc[sn][2]);
}
}
}
}
}
}
);
}
public void paint(Graphics g){
g.drawImage(bg,0,0,this);
g.drawPolygon(olx,oly,7);
g.drawPolygon(t1x,t1y,4);
g.drawPolygon(t2x,t2y,4);
g.drawLine(w * 3,h * 1,w * 7,h * 13);
g.drawLine(w * 7,h * 1,w * 3,h * 13);
g.drawLine(w * 1,h * 7,w * 9,h * 7);
g.drawOval(125,270,100,100);
if(sd == 0){
g.drawPolygon(s1x,s1y,4);
}else{
g.drawPolygon(s2x,s2y,4);
}
g.drawString("<<",170,275);
g.drawString(">>",170,375);
}
public void Tri(int cx , int cy , int dir , int sw , int co1 , int co2 , int co3){
int h = 20 , w = 35;
int tx[] = new int[4] , ty[] = new int[4];
int px[] = new int[4] , py[] = new int[4];
tx[0] = cx ; ty[0] = cy;
if(dir == 0){
tx[1] = tx[0] + 0 * w ; ty[1] = ty[0] - 2 * h;
tx[2] = tx[0] - 1 * w ; ty[2] = ty[0] + 1 * h;
tx[3] = tx[0] + 1 * w ; ty[3] = ty[0] + 1 * h;
}else{
tx[1] = tx[0] - 1 * w ; ty[1] = ty[0] - 1 * h;
tx[2] = tx[0] + 0 * w ; ty[2] = ty[0] + 2 * h;
tx[3] = tx[0] + 1 * w ; ty[3] = ty[0] - 1 * h;
}
px[0] = tx[0] ; py[0] = ty[0] ;
px[1] = tx[1] ; py[1] = ty[1] ;
px[2] = tx[2] ; py[2] = ty[2] ;
px[3] = tx[0] ; py[3] = ty[0] ;
if(sw > 0){
switch(co1){
case 1 : gr.setColor(Color.blue);break;
case 2 : gr.setColor(Color.cyan);break;
case 3 : gr.setColor(Color.green);break;
case 4 : gr.setColor(Color.red);break;
}
gr.fillPolygon(px,py,4);
gr.setColor(Color.black);
gr.drawPolygon(px,py,4);
}else{
gr.setColor(Color.white);
gr.fillPolygon(px,py,4);
gr.drawLine(px[1],py[1],px[2],py[2]);
}
px[0] = tx[0] ; py[0] = ty[0] ;
px[1] = tx[2] ; py[1] = ty[2] ;
px[2] = tx[3] ; py[2] = ty[3] ;
px[3] = tx[0] ; py[3] = ty[0] ;
if(sw > 0){
switch(co2){
case 1 : gr.setColor(Color.blue);break;
case 2 : gr.setColor(Color.cyan);break;
case 3 : gr.setColor(Color.green);break;
case 4 : gr.setColor(Color.red);break;
}
gr.fillPolygon(px,py,4);
gr.setColor(Color.black);
gr.drawPolygon(px,py,4);
}else{
gr.setColor(Color.white);
gr.fillPolygon(px,py,4);
gr.drawLine(px[1],py[1],px[2],py[2]);
}
px[0] = tx[0] ; py[0] = ty[0] ;
px[1] = tx[3] ; py[1] = ty[3] ;
px[2] = tx[1] ; py[2] = ty[1] ;
px[3] = tx[0] ; py[3] = ty[0] ;
if(sw > 0){
switch(co3){
case 1 : gr.setColor(Color.blue);break;
case 2 : gr.setColor(Color.cyan);break;
case 3 : gr.setColor(Color.green);break;
case 4 : gr.setColor(Color.red);break;
}
gr.fillPolygon(px,py,4);
gr.setColor(Color.black);
gr.drawPolygon(px,py,4);
}else{
gr.setColor(Color.white);
gr.fillPolygon(px,py,4);
gr.drawLine(px[1],py[1],px[2],py[2]);
}
repaint();
}
}
