import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.Math;
public class t_over extends Applet implements Runnable{
Thread th = null;
double pi = 3.1415;
int mtd[][] = new int [5][5];
double st = 0;
int swd = -1,swl = 0,swt = 0;
Color co[] = new Color[2];
int dx,dy;
int wid = 40,sp = 30;
Image os;
Graphics og;
int tn = 3;
int ch;
Button rep = new Button(" replay ");
Choice cho = new Choice();
public void init(){
os = createImage(260,280);
og = os.getGraphics();
co[0] = new Color(255,0,128);
co[1] = new Color(0,128,255);
setBackground(Color.white);
addMouseListener(
new MouseAdapter(){
public void mousePressed(MouseEvent e){
dx = (e.getX() - sp + wid - (5 - tn) * 20) / wid;
dy = (e.getY() - sp + wid - (5 - tn) * 20) / wid;
if((dx == 0) || (dx == tn + 1)){
swd = -1;swl = dy - 1;
th.resume();
}
if((dy == 0) || (dy == tn + 1)){
swd = 1;swl = dx - 1;
th.resume();
}
}
}
);
setLayout(new BorderLayout());
Panel pan = new Panel();
pan.setLayout(new FlowLayout());
pan.add(cho);
pan.add(rep = new Button(" replay "));
cho.addItem(" 3~3 ");
cho.addItem(" 4~4 ");
cho.addItem(" 5~5 ");
cho.addItemListener(new MyListener());
add("South",pan);
rep.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
R_set();
repaint();
}
});
}
class MyListener implements ItemListener{
public void itemStateChanged(ItemEvent e){
Choice cho = (Choice)e.getSource();
switch(cho.getSelectedIndex()){
case 0 : tn = 3;R_set();repaint();break;
case 1 : tn = 4;R_set();repaint();break;
case 2 : tn = 5;R_set();repaint();break;
}
}
}
public void paint(Graphics g){
og.setColor(Color.white);
og.fillRect(0,0,260,280);
for(int ix = 0;ix < tn;ix ++){
for(int iy = 0;iy < tn;iy ++){
if(swd == 1){
if(ix != swl){
og.setColor(co[mtd[iy][ix]]);
og.fillRect(ix * wid + sp + (5 - tn) * 20,iy * wid + sp + (5 - tn) * 20,wid,wid);
og.setColor(Color.black);
og.drawRect(ix * wid + sp + (5 - tn) * 20,iy * wid + sp + (5 - tn) * 20,wid,wid);
}
}else{
if(iy != swl){
og.setColor(co[mtd[iy][ix]]);
og.fillRect(ix * wid + sp + (5 - tn) * 20,iy * wid + sp + (5 - tn) * 20,wid,wid);
og.setColor(Color.black);
og.drawRect(ix * wid + sp + (5 - tn) * 20,iy * wid + sp + (5 - tn) * 20,wid,wid);
}
}
}
}
if(swd == 1){
for(int kt = 0; kt < tn;kt ++){
og.setColor(co[mtd[kt][swl]]);
og.fillRect(swl * wid + sp + (5 - tn) * 20,(wid * tn) / 2 + sp + (int)(Math.round((wid * (kt - tn / 2) - (tn % 2) * (wid / 2)) * Math.cos(st))) + (5 - tn) * 20,wid,(int)(Math.round(wid * Math.cos(st))));
og.setColor(Color.black);
og.drawRect(swl * wid + sp + (5 - tn) * 20,(wid * tn) / 2 + sp + (int)(Math.round((wid * (kt - tn / 2) - (tn % 2) * (wid / 2)) * Math.cos(st))) + (5 - tn) * 20,wid,(int)(Math.round(wid * Math.cos(st))));
}
}else{
for(int kt = 0; kt < tn;kt ++){
og.setColor(co[mtd[swl][kt]]);
og.fillRect((wid * tn) / 2 + sp + (int)(Math.round((wid * (kt - tn / 2) - (tn % 2) * (wid / 2)) * Math.cos(st))) + (5 - tn) * 20,swl * wid + sp + (5 - tn) * 20,(int)(Math.round(wid * Math.cos(st))),wid);
og.setColor(Color.black);
og.drawRect((wid * tn) / 2 + sp + (int)(Math.round((wid * (kt - tn / 2) - (tn % 2) * (wid / 2)) * Math.cos(st))) + (5 - tn) * 20,swl * wid + sp + (5 - tn) * 20,(int)(Math.round(wid * Math.cos(st))),wid);
}
}
g.drawImage(os,0,0,this);
}
public void R_set(){
for(int ix = 0;ix < tn;ix ++){
for(int iy = 0;iy < tn;iy ++){
mtd[iy][ix] = 0;
swl = 0;
}
}
return;
}
public void start(){
if(th == null){
th = new Thread(this);
th.start();
}
th.suspend();
}
public void stop(){
th = null;
}
public void run(){
while (th != null){
try {
if(swt == 0){
st = st + pi / 50;
if(st > pi / 2){
if(swd == 1){
for(int cd = 0;cd < (tn / 2 + tn % 2);cd ++){
ch = mtd[cd][swl];
mtd[cd][swl] = (mtd[tn - cd - 1][swl] + 1) % 2;
mtd[tn - cd - 1][swl] = (ch + 1) % 2;
}
}else{
for(int cd = 0;cd < (tn / 2 + tn % 2);cd ++){
ch = mtd[swl][cd];
mtd[swl][cd] = (mtd[swl][tn - cd - 1] + 1) % 2;
mtd[swl][tn - cd - 1] = (ch + 1) % 2;
}
}
swt = 1;
}
}else{
st = st - pi / 50;
if(st < 0){
st = 0;
swt = 0;
th.suspend();
}
}
Thread.sleep(30);
}
catch (InterruptedException e){ }
repaint();
}
}
public void update(Graphics g){
paint(g) ;
}
}
