import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class origami extends Applet implements Runnable{
Thread th = null;
Image os;
Graphics og;
int fb = 0;
int fd[][] = {{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,5,3,3,5,0,0,0},
{0,0,0,1,0,0,1,0,0,0},
{0,0,0,1,0,0,6,0,0,0},
{0,0,0,5,3,4,5,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0}};
int bd[][] = {{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,6,6,4,4,0,0,0},
{0,0,0,2,0,0,2,0,0,0},
{0,0,0,4,0,0,2,0,0,0},
{0,0,0,3,2,1,6,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0}};
int td[][][] = new int[2][10][10];
int sw[] = new int[7];
int ssw = 0,px,py,cr = 0,sn;
int mx,my,cs,cn;
Button rep,tur;
Label sp;
public void init(){
os = createImage(400,440);
og = os.getGraphics();
setBackground(Color.white);
og.setFont(new Font("",Font.PLAIN,38));
R_set();
setLayout(new BorderLayout());
Panel pan = new Panel();
pan.setLayout(new FlowLayout());
pan.add(rep = new Button(" replay "));
pan.add(sp = new Label(" "));
pan.add(tur = new Button(" turn "));
add("South",pan);
addMouseListener(
new MouseAdapter(){
public void mousePressed(MouseEvent e){
px = (e.getX()-10)/20;
py = (e.getY()-10)/20;
if(ssw == 1){
if(cr == 0){
if(e.getY() < sn*40){
for(int tx = 0;tx < 10;tx ++){
for(int ty = 0;ty < sn;ty ++){
if(td[fb][ty][tx] != 0){
if(td[fb][2*sn-ty-1][tx] < 10){
if(td[fb][2*sn-ty-1][tx] != 0){
td[fb][2*sn-ty-1][tx] = td[(fb+1)%2][ty][9-tx];
}else{
td[fb][2*sn-ty-1][tx] = td[(fb+1)%2][ty][9-tx];
td[(fb+1)%2][2*sn-ty-1][9-tx] = td[fb][ty][tx];
}
td[fb][ty][tx] = 0;
td[(fb+1)%2][ty][9-tx] = 0;
}else{
ssw = 0;
}
}
}
}
}else if(e.getY() > sn*40){
for(int tx = 0;tx < 10;tx ++){
for(int ty = 9;ty >= sn;ty --){
if(td[fb][ty][tx] != 0){
if(td[fb][2*sn-ty-1][tx] >= 0){
if(td[fb][2*sn-ty-1][tx] != 0){
td[fb][2*sn-ty-1][tx] = td[(fb+1)%2][ty][9-tx];
}else{
td[fb][2*sn-ty-1][tx] = td[(fb+1)%2][ty][9-tx];
td[(fb+1)%2][2*sn-ty-1][9-tx] = td[fb][ty][tx];
}
td[fb][ty][tx] = 0;
td[(fb+1)%2][ty][9-tx] = 0;
}else{
ssw = 0;
}
}
}
}
}
}else{
if(e.getX() < sn*40){
for(int ty = 0;ty < 10;ty ++){
for(int tx = 0;tx < sn;tx ++){
if(td[fb][ty][tx] != 0){
if(td[fb][ty][2*sn-tx-1] < 10){
if(td[fb][ty][2*sn-tx-1] != 0){
td[fb][ty][2*sn-tx-1] = td[(fb+1)%2][ty][9-tx];
}else{
td[fb][ty][2*sn-tx-1] = td[(fb+1)%2][ty][9-tx];
td[(fb+1)%2][ty][10-2*sn+tx] = td[fb][ty][tx];
}
td[fb][ty][tx] = 0;
td[(fb+1)%2][ty][9-tx] = 0;
}else{
ssw = 0;
}
}
}
}
}else if(e.getX() > sn*40){
for(int ty = 0;ty < 10;ty ++){
for(int tx = 9;tx >= sn;tx --){
if(td[fb][ty][tx] != 0){
if(td[fb][ty][2*sn-tx-1] >= 0){
if(td[fb][ty][2*sn-tx-1] != 0){
td[fb][ty][2*sn-tx-1] = td[(fb+1)%2][ty][9-tx];
}else{
td[fb][ty][2*sn-tx-1] = td[(fb+1)%2][ty][9-tx];
td[(fb+1)%2][ty][10-2*sn+tx] = td[fb][ty][tx];
}
td[fb][ty][tx] = 0;
td[(fb+1)%2][ty][9-tx] = 0;
}else{
ssw = 0;
}
}
}
}
}
}
ssw = 0;
}else{
if((px%2==0)&&(py%2==1)){
cr = 0;
sn = (py+1)/2;
ssw = 1;
}else if((px%2==1)&&(py%2==0)){
cr = 1;
sn = (px+1)/2;
ssw = 1;
}
}
repaint();
}
}
);
tur.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
fb = (fb+1)%2;
ssw = 0;
repaint();
}
});
rep.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
R_set();
repaint();
}
});
}
public void paint(Graphics g){
og.setColor(Color.white);
og.fillRect(0,0,400,440);
for(int k1 = 0;k1 < 10;k1 ++){
for(int k2 = 0;k2 < 10;k2 ++){
if(td[fb][k2][k1] == 0){
og.setColor(Color.lightGray);
og.drawRect(k1*40,k2*40,40,40);
}else{
og.setColor(new Color(128,255,128));
og.fill3DRect(k1*40,k2*40,40,40,true);
og.setColor(Color.black);
switch(td[fb][k2][k1]){
case 1 :og.drawString("œ",k1*40+2,k2*40+35);break;
case 2 :og.drawString("~",k1*40+2,k2*40+35);break;
case 3 :og.drawString(" ",k1*40+2,k2*40+35);break;
case 4 :og.drawString("‡",k1*40+2,k2*40+35);break;
case 5 :og.drawString("›",k1*40+2,k2*40+35);break;
case 6 :og.drawString("¡",k1*40+2,k2*40+35);break;
}
}
}
}
if(ssw == 1){
og.setColor(Color.red);
if(cr == 0){
og.drawLine(0,sn*40,400,sn*40);
}else{
og.drawLine(sn*40,0,sn*40,400);
}
}
check();
if(sw[1] == 0){
og.setColor(Color.red);
}else{
og.setColor(Color.blue);
}
og.drawString("œ",80,435);
if(sw[2] == 0){
og.setColor(Color.red);
}else{
og.setColor(Color.blue);
}
og.drawString("~",120,435);
if(sw[3] == 0){
og.setColor(Color.red);
}else{
og.setColor(Color.blue);
}
og.drawString(" ",160,435);
if(sw[4] == 0){
og.setColor(Color.red);
}else{
og.setColor(Color.blue);
}
og.drawString("‡",200,435);
if(sw[5] == 0){
og.setColor(Color.red);
}else{
og.setColor(Color.blue);
}
og.drawString("›",240,435);
if(sw[6] == 0){
og.setColor(Color.red);
}else{
og.setColor(Color.blue);
}
og.drawString("¡",280,435);
g.drawImage(os,0,0,this);
}
public void check(){
mx = 10;my = 10;cs = 0;
for(int k1 = 0;k1 < 10;k1 ++){
for(int k2 = 0;k2 < 10;k2 ++){
if(td[fb][k2][k1] != 0){
if(mx >= k1)mx = k1;
if(my >= k2)my = k2;
cs ++;
}
}
}
if(cs == 4){
cn = td[fb][my][mx];
if((td[fb][my][mx+1]==cn)&&(td[fb][my+1][mx]==cn)&&(td[fb][my+1][mx+1]==cn)){
sw[cn] = 1;
}
}
}
public void R_set(){
for(int k1 = 0;k1 < 10;k1 ++){
for(int k2 = 0;k2 < 10;k2 ++){
td[0][k2][k1] = fd[k2][k1];
td[1][k2][k1] = bd[k2][k1];
}
}
}
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 ) ;
}
}
