import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class seesaw extends Applet implements Runnable{
int td[][] = {{-1,-1,-1,-1,-1, 0, 6,-1,-1,-1,-1,-1},
{-1,-1,-1,-1, 0, 0, 6, 5,-1,-1,-1,-1},
{-1,-1,-1, 0, 0, 0, 6, 5, 4,-1,-1,-1},
{-1,-1, 0, 0, 0, 0, 6, 5, 4, 3,-1,-1},
{-1, 0, 0, 0, 0, 0, 6, 5, 4, 3, 2,-1},
{ 0, 0, 0, 0, 0, 0, 6, 5, 4, 3, 2, 1}};
int tn[][] = {{1,2,3,4,5,6},{1,2,3,4,5,6}};
int ro[] = new int[6];
int rn,fn;
int sw = 1;
int px,py;
double ds = 3.14159263 / 72;
Thread th = null;
Image ar[] = new Image[3];
Image os;
Graphics og;
public void init(){
os = createImage(420,270);
og = os.getGraphics();
setBackground(Color.white);
ar[0] = getImage(getDocumentBase(),"Picture/ar8.gif");
ar[1] = getImage(getDocumentBase(),"Picture/ar4.gif");
ar[2] = getImage(getDocumentBase(),"Picture/ar1.gif");
addMouseListener(
new MouseAdapter(){
public void mousePressed(MouseEvent e){
px = e.getX();
py = e.getY();
if((py > 220)&&(py < 265)){
if((px > 20)&&(px < 70)){
sw = -1;
}
if((px > 350)&&(px < 400)){
sw = 1;
}
if((px > 95)&&(px < 145)){
for(int r1 = 0;r1 < 6;r1 ++){
ro[r1] = td[5][r1];
}
rn = tn[0][5];
for(int r2 = 0;r2 < 5;r2 ++){
for(int r1 = 0;r1 < 6;r1 ++){
td[5-r2][r1] = td[4-r2][r1];
}
tn[0][5-r2] = tn[0][4-r2];
}
for(int r1 = 0;r1 < 6;r1 ++){
td[0][r1] = ro[r1];
}
tn[0][0] = rn;
}
if((px > 275)&&(px < 325)){
for(int r1 = 0;r1 < 6;r1 ++){
ro[r1] = td[5][r1+6];
}
rn = tn[1][5];
for(int r2 = 0;r2 < 5;r2 ++){
for(int r1 = 0;r1 < 6;r1 ++){
td[5-r2][r1+6] = td[4-r2][r1+6];
}
tn[1][5-r2] = tn[1][4-r2];
}
for(int r1 = 0;r1 < 6;r1 ++){
td[0][r1+6] = ro[r1];
}
tn[1][0] = rn;
}
}
if(sw == -1){
for(int c1 = 0;c1 < 6;c1 ++){
fn = 6-tn[0][c1];
for(int c2 = 0;c2 < 12;c2 ++){
if((td[c1][c2] != 0)&&(td[c1][c2] != -1)){
td[c1][fn] = td[c1][c2];
if(fn != c2)td[c1][c2] = 0;
fn ++;
}
}
}
}else if(sw == 1){
for(int c1 = 0;c1 < 6;c1 ++){
fn = 5+tn[1][c1];
for(int c2 = 0;c2 < 12;c2 ++){
if((td[c1][11-c2] != 0)&&(td[c1][11-c2] != -1)){
td[c1][fn] = td[c1][11-c2];
if(fn != 11-c2)td[c1][11-c2] = 0;
fn --;
}
}
}
}
repaint();
}
}
);
}
public void paint(Graphics g){
og.setColor(Color.white);
og.fillRect(0,0,420,270);
for(int w1 = 0;w1 < 6;w1 ++){
og.setColor(Color.blue);
og.drawLine(tx(210,30*w1+30),ty(210,30*w1+30),tx(210+30*tn[1][w1],30*w1+30),ty(210+30*tn[1][w1],30*w1+30));
og.drawLine(tx(210+30*tn[1][w1],30*w1+30),ty(210+30*tn[1][w1],30*w1+30),tx(210+30*tn[1][w1],30*w1+60),ty(210+30*tn[1][w1],30*w1+60));
og.drawLine(tx(210+30*tn[1][w1],30*w1+60),ty(210+30*tn[1][w1],30*w1+60),tx(210,30*w1+60),ty(210,30*w1+60));
og.drawLine(tx(210,30*w1+30),ty(210,30*w1+30),tx(210-30*tn[0][w1],30*w1+30),ty(210-30*tn[0][w1],30*w1+30));
og.drawLine(tx(210-30*tn[0][w1],30*w1+30),ty(210-30*tn[0][w1],30*w1+30),tx(210-30*tn[0][w1],30*w1+60),ty(210-30*tn[0][w1],30*w1+60));
og.drawLine(tx(210-30*tn[0][w1],30*w1+60),ty(210-30*tn[0][w1],30*w1+60),tx(210,30*w1+60),ty(210,30*w1+60));
}
og.setColor(Color.red);
og.drawLine(tx(210,15),ty(210,15),tx(210,210),ty(210,210));
og.drawLine(tx(209,15),ty(209,15),tx(209,210),ty(209,210));
og.drawLine(tx(15,210),ty(15,210),tx(405,210),ty(405,210));
og.drawLine(tx(15,211),ty(15,211),tx(405,211),ty(405,211));
og.setColor(Color.black);
og.drawLine(210,210,240,240);
og.drawLine(240,240,180,240);
og.drawLine(180,240,210,210);
for(int b1 = 0;b1 < 12;b1 ++){
for(int b2 = 0;b2 < 6;b2 ++){
if(td[b2][b1] > 0){
for(int cd = 0;cd < 14;cd ++){
switch(td[b2][b1]){
case 1 : og.setColor(new Color(255,100,230-cd*10)) ; break ;
case 2 : og.setColor(new Color(230-cd*10,255,100)) ; break ;
case 3 : og.setColor(new Color(100,230-cd*10,255)) ; break ;
case 4 : og.setColor(new Color(255,255,230-cd*10)) ; break ;
case 5 : og.setColor(new Color(255,230-cd*10,255)) ; break ;
case 6 : og.setColor(new Color(230-cd*10,255,255)) ; break ;
}
og.drawOval(tx(30*b1+45,30*b2+45)-cd,ty(30*b1+45,30*b2+45)-cd,2*cd,2*cd);
}
}
}
}
og.drawImage(ar[0],23,220,this);
og.drawImage(ar[0],353,220,this);
og.drawImage(ar[1],98,220,this);
og.drawImage(ar[2],278,220,this);
g.drawImage(os,0,0,this);
}
public int tx(int ix,int iy){
int rx;
int x = ix;
int y = iy;
rx = (int)(x*Math.cos(ds*sw)-y*Math.sin(ds*sw)+210*(Math.sin(ds*sw)-Math.cos(ds*sw)+1));
return rx;
}
public int ty(int ix,int iy){
int ry;
int x = ix;
int y = iy;
ry = (int)(x*Math.sin(ds*sw)+y*Math.cos(ds*sw)-210*(Math.sin(ds*sw)+Math.cos(ds*sw)-1));
return ry;
}
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 ) ;
}
}
