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 ) ; } }