import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class a_dice extends Applet implements Runnable{
int td[][] = new int[10][10];
int nd[][] = new int[10][10];
int dd[][][] = {{{0,0,0},{0,1,0},{0,0,0}},
{{1,0,0},{0,0,0},{0,0,1}},
{{1,0,0},{0,1,0},{0,0,1}},
{{1,0,1},{0,0,0},{1,0,1}},
{{1,0,1},{0,1,0},{1,0,1}},
{{1,0,1},{1,0,1},{1,0,1}}};
int pt[][] = new int[3][3];
int dpx[] = new int[6];
int dpy[] = new int[6];
int dx[] = {20,20,20,340,340,340};
int dy[] = {20,100,180,20,100,180};
int psw[] = new int[6];
int qd[][][] = {{{-1,0,-1,-1,3,6,4,3,-1,-1},{-1,-1,-1,-1,0,-1,-1,-1,2,2}},
{{1,5,-1,-1,-1,-1,-1,0,5,-1},{2,2,2,2,2,-1,-1,-1,-1,2}},
{{1,2,3,4,5,5,-1,-1,-1,-1},{-1,1,-1,-1,-1,-1,1,3,1,-1}}};
int qn = 0,pn;
int cs;
int mx,my,px,py,bx,by,cx,cy;
Thread th = null;
Image os;
Graphics og;
public void init(){
os = createImage(420,260);
og = os.getGraphics();
setBackground(Color.white);
for(int i1 = 0;i1 < 10;i1 ++){
for(int i2 = 0;i2 < 10;i2 ++){
td[i2][i1] = -1;
nd[i2][i1] = -1;
}
}
for(int i1 = 0;i1 < 6;i1 ++){
dpx[i1] = dx[i1];
dpy[i1] = dy[i1];
}
addMouseListener(
new MouseAdapter(){
public void mousePressed(MouseEvent e){
px = e.getX();
py = e.getY();
if(e.getClickCount() == 2){
for(int p1 = 0;p1 < 3;p1 ++){
for(int p2 = 0;p2 < 3;p2 ++){
pt[p1][2-p2] = dd[pn][p2][p1];
}
}
for(int p1 = 0;p1 < 3;p1 ++){
for(int p2 = 0;p2 < 3;p2 ++){
dd[pn][p2][p1] = pt[p2][p1];
}
}
}else{
if((px>20)&&(px<80)){
if((py>20)&&(py<80)){
if(psw[0] == 0){
if(psw[pn] != 1)pn = 0 ; psw[pn] = 1;
}else if(psw[0] == 1){
psw[0] = 0;
}
}else if((py>100)&&(py<160)){
if(psw[1] == 0){
if(psw[pn] != 1)pn = 1 ; psw[pn] = 1;
}else if(psw[1] == 1){
psw[1] = 0;
}
}else if((py>180)&&(py<240)){
if(psw[2] == 0){
if(psw[pn] != 1)pn = 2 ; psw[pn] = 1;
}else if(psw[2] == 1){
psw[2] = 0;
}
}
}else if((px>340)&&(px<400)){
if((py>20)&&(py<80)){
if(psw[3] == 0){
if(psw[pn] != 1)pn = 3 ; psw[pn] = 1;
}else if(psw[3] == 1){
psw[3] = 0;
}
}else if((py>100)&&(py<160)){
if(psw[4] == 0){
if(psw[pn] != 1)pn = 4 ; psw[pn] = 1;
}else if(psw[4] == 1){
psw[4] = 0;
}
}else if((py>180)&&(py<240)){
if(psw[5] == 0){
if(psw[pn] != 1)pn = 5 ; psw[pn] = 1;
}else if(psw[5] == 1){
psw[5] = 0;
}
}
}else if((px>120)&&(px<280)){
if((py>40)&&(py<200)){
bx = (px - 100) / 20;
by = (py - 20) / 20;
if(psw[pn] == 1){
cs = 0;
for(int c1 = 0;c1 < 3;c1 ++){
cs = cs + nd[by-1][bx+c1-1] + nd[by][bx+c1-1] + nd[by+1][bx+c1-1];
}
if(cs == -9){
for(int p1 = 0;p1 < 3;p1 ++){
nd[by-1][bx+p1-1] = pn;
nd[by][bx+p1-1] = pn;
nd[by+1][bx+p1-1] = pn;
}
for(int p2 = 0;p2 < 3;p2 ++){
td[by-1][bx+p2-1] = dd[pn][0][p2];
td[by][bx+p2-1] = dd[pn][1][p2];
td[by+1][bx+p2-1] = dd[pn][2][p2];
}
dpx[pn] = 20 * bx + 80;
dpy[pn] = 20 * by;
psw[pn] = 2;
}
}else{
pn = nd[by][bx];
cx = (dpx[pn] - 100) / 20;
cy = (dpy[pn] - 20) / 20;
for(int i1 = 0;i1 < 3;i1 ++){
for(int i2 = 0;i2 < 3;i2 ++){
td[cy+i2][cx+i1] = -1;
nd[cy+i2][cx+i1] = -1;
}
}
dpx[pn] = dx[pn];
dpy[pn] = dy[pn];
psw[pn] = 1;
}
}
}else if((px>280)&&(px<330)&&(py>225)&&(py<250)){
qn = qn +1;
if(qn > 2)qn = 0;
for(int i1 = 0;i1 < 10;i1 ++){
for(int i2 = 0;i2 < 10;i2 ++){
td[i2][i1] = -1;
nd[i2][i1] = -1;
}
}
for(int k1 = 0;k1 < 6;k1 ++){
dpx[k1] = dx[k1] ; dpy[k1] = dy[k1];
psw[k1] = 0;
}
}
}
repaint();
}
}
);
addMouseMotionListener(
new MouseMotionAdapter(){
public void mouseMoved(MouseEvent e){
mx = e.getX();
my = e.getY();
repaint();
}
}
);
}
public void paint(Graphics g){
og.setColor(Color.white);
og.fillRect(0,0,420,260);
og.setColor(new Color(255,255,153));
for(int c1 = 0;c1 < 10;c1 ++){
for(int c2 = 0;c2 < 10;c2 ++){
og.fill3DRect(20*c1+100,20*c2+20,20,20,true);
}
}
og.setColor(Color.black);
for(int d1 = 0;d1 < 6;d1 ++){
if(psw[d1] != 1){
for(int m1 = 0;m1 < 3;m1 ++){
for(int m2 = 0;m2 < 3;m2 ++){
if(dd[d1][m2][m1] == 1){
og.fillOval(20*m1+dpx[d1]+2,20*m2+dpy[d1]+2,17,17);
}
}
}
og.drawRect(dpx[d1],dpy[d1],60,60);
}else{
for(int m1 = 0;m1 < 3;m1 ++){
for(int m2 = 0;m2 < 3;m2 ++){
if(dd[d1][m2][m1] == 1){
og.fillOval(20*m1+mx-28,20*m2+my-28,17,17);
}
}
}
og.drawRect(mx-30,my-30,60,60);
}
}
for(int s1 = 0;s1 < 10;s1 ++){
og.setFont(new Font("",Font.PLAIN,20));
if(qd[qn][0][s1] != -1){
cs = 0;
for(int s2 = 0;s2 < 10;s2 ++){
if(td[s2][s1] != -1){
cs = cs + td[s2][s1];
}
if(cs == qd[qn][0][s1]){
og.setColor(Color.blue);
}else{
og.setColor(Color.red);
}
og.drawString(""+qd[qn][0][s1],20*s1+105,240);
}
}
if(qd[qn][1][s1] != -1){
cs = 0;
for(int s2 = 0;s2 < 10;s2 ++){
if(td[s1][s2] != -1){
cs = cs + td[s1][s2];
}
if(cs == qd[qn][1][s1]){
og.setColor(Color.blue);
}else{
og.setColor(Color.red);
}
og.drawString(""+qd[qn][1][s1],305,20*s1+38);
}
}
}
og.setColor(Color.gray);
og.fillRoundRect(281,226,50,25,10,10);
og.setColor(Color.lightGray);
og.fillRoundRect(280,225,50,25,10,10);
og.setFont(new Font("",Font.BOLD,20));
og.setColor(Color.white);
og.drawString("No."+(qn+1),286,246);
og.setColor(Color.black);
og.drawString("No."+(qn+1),285,245);
g.drawImage(os,0,0,this);
}
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 ) ;
}
}
