import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class domino extends Applet implements Runnable{
Image os;
Graphics og;
Thread th = null;
int td_b[][] = {{0,0,0,0,0,0},
{0,1,1,1,1,0},
{0,1,0,0,1,0},
{0,1,0,0,1,0},
{0,1,1,1,1,0},
{0,0,0,0,0,0}};
int td_n[][] = {{1,1,2,2,3,3},
{0,0,0,0,0,0},
{0,0,0,0,0,0},
{0,0,0,0,0,0},
{0,0,0,0,0,0},
{4,4,5,5,6,6}};
int td_d[][] = {{0,0,1,0,1,1},
{0,0,0,0,0,0},
{0,0,0,0,0,0},
{0,0,0,0,0,0},
{0,0,0,0,0,0},
{1,2,0,2,2,2}};
int domi_d[][] = {{1,0,0},{1,1,0},{1,1,1},{1,1,2},{1,0,2},{1,2,2}};
int dx[] = {0,2,4,0,2,4};
int dy[] = {0,0,0,5,5,5};
int pd , fg = 0 , px , py;
int sx,sy,rx,ry;
int sw;
int su[] = new int [4];
public void init(){
os = createImage(300,300);
og = os.getGraphics();
setBackground(Color.white);
addMouseListener(
new MouseAdapter(){
public void mousePressed(MouseEvent e){
if(fg == 1){
if(e.getClickCount() == 2){
if(domi_d[pd][0] == 0){
domi_d[pd][0] = 1;
sw = domi_d[pd][1] ; domi_d[pd][1] = domi_d[pd][2] ; domi_d[pd][2] = sw;
}else{
domi_d[pd][0] = 0;
}
}
if(e.getClickCount() == 1){
if(domi_d[pd][0] == 0){
rx = e.getX() / 50;
ry = (e.getY()-25) / 50;
if((td_n[ry][rx] == 0)&&(td_n[ry+1][rx]) == 0){
td_n[ry][rx] = pd + 1; td_n[ry+1][rx] = pd + 1;
td_d[ry][rx] = domi_d[pd][1] ; td_d[ry+1][rx] = domi_d[pd][2];
dx[pd] = rx ; dy[pd] = ry;
fg = 0;
}
}else{
rx = (e.getX()-25) / 50;
ry = e.getY() / 50;
if((td_n[ry][rx] == 0)&&(td_n[ry][rx+1]) == 0){
td_n[ry][rx] = pd + 1; td_n[ry][rx+1] = pd + 1;
td_d[ry][rx] = domi_d[pd][1] ; td_d[ry][rx+1] = domi_d[pd][2];
dx[pd] = rx ; dy[pd] = ry;
fg = 0;
}
}
}
}else{
sx = e.getX() / 50;
sy = e.getY() / 50;
if(td_n[sy][sx] != 0){
pd = td_n[sy][sx] - 1;
for(int i1 = 0;i1 < 6;i1 ++){
for(int i2 = 0;i2 <6 ;i2 ++){
if(td_n[i2][i1] == pd + 1){
td_n[i2][i1] = 0;
td_d[i2][i1] = 0;
}
}
}
fg = 1;
}
}
repaint();
}
}
);
addMouseMotionListener(
new MouseMotionAdapter(){
public void mouseMoved(MouseEvent e){
px = e.getX();
py = e.getY();
repaint();
}
}
);
}
public void paint(Graphics g){
og.setColor(Color.white);
og.fillRect(0,0,300,300);
for(int i1 = 0;i1 < 6;i1 ++){
for(int i2 = 0;i2 <6 ;i2 ++){
if(td_b[i2][i1] == 1){
og.setColor(new Color(100,40,220));
}else{
og.setColor(Color.white);
}
og.fillRect(i1 * 50,i2 * 50,50,50);
}
}
for(int dd = 0;dd < 6;dd ++){
if((fg != 1) || (dd != pd)){
if(domi_d[dd][0] == 1){
domi(domi_d[dd][0],dx[dd]*50+50,dy[dd]*50+25,domi_d[dd][1],domi_d[dd][2]);
}else{
domi(domi_d[dd][0],dx[dd]*50+25,dy[dd]*50+50,domi_d[dd][1],domi_d[dd][2]);
}
}
}
if(fg == 1){
domi(domi_d[pd][0],px,py,domi_d[pd][1],domi_d[pd][2]);
}
su[0] = td_d[1][1] + td_d[1][2] + td_d[1][3] + td_d[1][4];
su[1] = td_d[4][1] + td_d[4][2] + td_d[4][3] + td_d[4][4];
su[2] = td_d[1][1] + td_d[2][1] + td_d[3][1] + td_d[4][1];
su[3] = td_d[1][4] + td_d[2][4] + td_d[3][4] + td_d[4][4];
if((su[0]==4)&&(su[1]==4)&&(su[2]==4)&&(su[3]==4)){
og.setColor(Color.red);
for(int k = 0;k < 5;k ++){
og.drawRect(45+k,45+k,210-2*k,210-2*k);
og.drawRect(100+k,100+k,100-2*k,100-2*k);
}
}
g.drawImage(os,0,0,this);
}
public void domi(int d , int x , int y , int s1 , int s2){
og.setColor(Color.black);
if(d == 0){
og.fillRoundRect(x - 25,y - 50,50,100,15,15);
og.setColor(Color.lightGray);
og.drawRoundRect(x - 25,y - 50,50,100,15,15);
og.setColor(new Color(100,100,100));
og.drawLine(x-25,y,x+25,y);
if(s1 == 1){
og.setColor(Color.red);
og.fillOval(x-8,y-33,16,16);
}else if(s1 == 2){
og.setColor(Color.white);
og.fillOval(x-16,y-41,13,13);
og.fillOval(x+3,y-22,13,13);
}
if(s2 == 1){
og.setColor(Color.red);
og.fillOval(x-8,y+17,16,16);
}else if(s2 == 2){
og.setColor(Color.white);
og.fillOval(x-16,y+9,13,13);
og.fillOval(x+3,y+28,13,13);
}
}else{
og.fillRoundRect(x - 50,y - 25,100,50,15,15);
og.setColor(Color.lightGray);
og.drawRoundRect(x - 50,y - 25,100,50,15,15);
og.setColor(new Color(100,100,100));
og.drawLine(x,y-25,x,y+25);
if(s1 == 1){
og.setColor(Color.red);
og.fillOval(x-33,y-8,16,16);
}else if(s1 == 2){
og.setColor(Color.white);
og.fillOval(x-41,y+3,13,13);
og.fillOval(x-22,y-16,13,13);
}
if(s2 == 1){
og.setColor(Color.red);
og.fillOval(x+17,y-8,16,16);
}else if(s2 == 2){
og.setColor(Color.white);
og.fillOval(x+9,y+3,13,13);
og.fillOval(x+28,y-16,13,13);
}
}
}
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(30);
}
catch (InterruptedException e){
}
}
}
public void update( Graphics g ){
paint( g ) ;
}
}
