import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class d_lots extends Applet implements Runnable{
Thread th = null;
Image os;
Graphics og;
int ad0[][][][] = {{{{1,0,0,0},{0,0,0,0}},{{0,1,0,0},{0,0,0,0}},{{0,1,0,1},{0,0,0,0}}},
{{{0,1,0,0},{0,0,0,0}},{{0,1,0,0},{1,0,0,0}},{{0,1,0,1},{0,0,0,0}}},
{{{0,1,0,0},{0,0,0,0}},{{0,1,0,0},{1,0,0,0}},{{0,1,0,1},{1,0,0,0}}},
{{{1,0,0,0},{0,0,0,0}},{{0,1,0,0},{1,0,0,1}},{{0,1,0,1},{0,0,1,0}}},
{{{0,1,0,0},{1,0,0,1}},{{0,1,0,0},{1,0,0,0}},{{0,1,0,1},{0,0,0,0}}},
{{{0,0,1,0},{1,0,0,1}},{{0,1,0,0},{1,0,1,0}},{{0,1,0,1},{0,0,0,0}}}};
int td[][][] = new int[3][2][4] , ad[][][] = new int[3][2][4];
int ch[] = new int[5];
int sa,si,sp,lv;
int px,py;
String al[][] = {{"A","B","C","D","E"},{"A","B","C","D","E"},{"A","B","C","D","E"}};
String sw;
public void init(){
os = createImage(360,400);
og = os.getGraphics();
setBackground(Color.white);
d_set();
addMouseListener(
new MouseAdapter(){
public void mousePressed(MouseEvent e){
px = e.getX() ; py = e.getY() ;
if((px > 30) && (px < 150)){
if(e.getClickCount() == 1){
sa = (py - 15) / 120 + 1;
}else if(e.getClickCount() == 2){
a_turn();
}
}else if((px > 180) && (px < 330)){
if(e.getClickCount() == 1){
si = (py - 60) / 90;
if(si < 3){
for(int i1 = 0;i1 < 2;i1 ++){
for(int i2 = 0;i2 < 4;i2 ++){
td[si][i1][i2] = ad[sa-1][i1][i2] ;
}
}
}else if((px > 275) && (px < 325) && (py > 360) && (py < 385)){
d_set();
}else if((px > 215) && (px < 265) && (py > 360) && (py < 385)){
lv = (lv + 1) % 6;
d_set();
}
}else if(e.getClickCount() == 2){
for(int i1 = 0;i1 < 2;i1 ++){
for(int i2 = 0;i2 < 4;i2 ++){
td[si][i1][i2] = 0 ;
}
}
}
}
repaint();
}
}
);
}
public void paint(Graphics g){
og.setColor(new Color(220,255,220));
og.fillRect(0,0,360,400);
og.setColor(Color.white);
og.fillRect(195,60,150,270);
og.setColor(Color.lightGray);
og.drawLine(195,150,345,150);
og.drawLine(195,240,345,240);
og.setColor(Color.darkGray);
for(int d1 = 0;d1 < 3;d1 ++){
for(int d2 = 0;d2 < 2;d2 ++){
for(int d3 = 0;d3 < 4;d3 ++){
if(ad[d1][d2][d3] == 1)og.fillRect(d3*30+30,d1*120+d2*30+60,30,2);
}
}
}
for(int d1 = 0;d1 < 3;d1 ++){
for(int d2 = 0;d2 < 5;d2 ++){
og.fillRect(d2*30+30,d1*120+30,2,90);
}
}
for(int d1 = 0;d1 < 5;d1 ++){
og.fillRect(d1*30+210,60,2,270);
}
for(int d1 = 0;d1 < 3;d1 ++){
for(int d2 = 0;d2 < 2;d2 ++){
for(int d3 = 0;d3 < 4;d3 ++){
if(td[d1][d2][d3] == 1)og.fillRect(d3*30+210,d1*90+d2*30+90,30,2);
}
}
}
og.setColor(Color.red);
if(sa != 0){
og.drawRect(20,120*sa-100,140,110);
}
for(int d1 = 0;d1 < 5;d1 ++){
al[2][d1] = al[0][d1];
}
for(int d1 = 0;d1 < 3;d1 ++){
for(int d2 = 0;d2 < 2;d2 ++){
for(int d3 = 0;d3 < 4;d3 ++){
if(td[d1][d2][d3] == 1){
sw = al[2][d3] ; al[2][d3] = al[2][d3+1] ; al[2][d3+1] = sw;
}
}
}
}
for(int d1 = 0;d1 < 5;d1 ++){
if(al[2][d1] == al[1][d1]){
ch[d1] = 1;
}else{
ch[d1] = 0;
}
}
og.setFont(new Font("",Font.BOLD,20));
for(int d1 = 0;d1 < 5;d1 ++){
og.setColor(Color.black);
og.drawString(""+al[0][d1],d1*30+205,55);
og.setColor(Color.blue);
og.drawString(""+al[0][d1],d1*30+204,54);
}
for(int d1 = 0;d1 < 5;d1 ++){
og.setColor(Color.black);
og.drawString(""+al[1][d1],d1*30+205,350);
if(ch[d1] == 1){
og.setColor(Color.blue);
}else{
og.setColor(Color.red);
}
og.drawString(""+al[1][d1],d1*30+204,349);
}
og.setFont(new Font("",Font.BOLD,16));
og.setColor(Color.white);
og.fillRoundRect(215,360,50,25,15,15);
og.setColor(Color.black);
og.drawRoundRect(215,360,50,25,15,15);
og.drawString("Lv"+(lv+1),226,378);
og.setColor(Color.white);
og.fillRoundRect(275,360,50,25,15,15);
og.setColor(Color.black);
og.drawRoundRect(275,360,50,25,15,15);
og.drawString("set",287,378);
sp = 1;
for(int d1 = 0;d1 < 5;d1 ++){
sp = sp * ch[d1] ;
}
og.setFont(new Font("",Font.BOLD,60));
if((sp == 1) && (sa != 0)){
og.setColor(Color.black);
og.drawString("clear!!",92,232);
og.setColor(Color.red);
og.drawString("clear!!",90,230);
}
g.drawImage(os,0,0,this);
}
public void d_set(){
for(int d1 = 0;d1 < 3;d1 ++){
for(int d2 = 0;d2 < 2;d2 ++){
for(int d3 = 0;d3 < 4;d3 ++){
td[d1][d2][d3] = 0;
ad[d1][d2][d3] = ad0[lv][d1][d2][d3];
}
}
}
for(int d1 = 0;d1 < 5;d1 ++){
al[1][d1] = al[0][d1];
}
for(int kk = 0;kk < 3;kk ++){
sp = (int)(7 * Math.random()) + 1;
if(sp != 1){
sa = sp / 2 ;
if(sp % 2 == 1)a_turn();
for(int d2 = 0;d2 < 2;d2 ++){
for(int d3 = 0;d3 < 4;d3 ++){
td[kk][d2][d3] = ad[sa - 1][d2][d3];
}
}
}
}
for(int d1 = 0;d1 < 3;d1 ++){
for(int d2 = 0;d2 < 2;d2 ++){
for(int d3 = 0;d3 < 4;d3 ++){
if(td[d1][d2][d3] == 1){
sw = al[1][d3] ; al[1][d3] = al[1][d3+1] ; al[1][d3+1] = sw;
}
}
}
}
for(int d1 = 0;d1 < 3;d1 ++){
for(int d2 = 0;d2 < 2;d2 ++){
for(int d3 = 0;d3 < 4;d3 ++){
td[d1][d2][d3] = 0;
ad[d1][d2][d3] = ad0[lv][d1][d2][d3];
}
}
}
sa = 0 ;
}
public void a_turn(){
sp = ad[sa-1][0][0] ; ad[sa-1][0][0] = ad[sa-1][1][3] ; ad[sa-1][1][3] = sp ;
sp = ad[sa-1][0][1] ; ad[sa-1][0][1] = ad[sa-1][1][2] ; ad[sa-1][1][2] = sp ;
sp = ad[sa-1][0][2] ; ad[sa-1][0][2] = ad[sa-1][1][1] ; ad[sa-1][1][1] = sp ;
sp = ad[sa-1][0][3] ; ad[sa-1][0][3] = ad[sa-1][1][0] ; ad[sa-1][1][0] = sp ;
}
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(50);
}
catch (InterruptedException e){
}
}
}
public void update( Graphics g ){
paint( g ) ;
}
}
