import java.applet.*; import java.awt.*; import java.awt.event.*; public class n_box extends Applet implements Runnable{ Thread th = null; Image os; Graphics og; int lv = 1,nn; int td[][] = new int[3][7]; int cx[] = new int[9],cy[] = new int[9]; int px,py; Choice cho = new Choice(); Button rep; Label spa; public void init(){ os = createImage(480,270); og = os.getGraphics(); setLayout(new BorderLayout()); Panel pan = new Panel(); pan.setLayout(new FlowLayout()); pan.add(rep = new Button(" replay ")); pan.add(spa = new Label(" ")); pan.add(cho); cho.addItem(" 3 x 3 "); cho.addItem(" 5 x 3 "); cho.addItem(" 7 x 3 "); cho.addItemListener(new MyListener()); add("South",pan); rep.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ d_set(); repaint(); } }); d_set(); addMouseListener( new MouseAdapter(){ public void mousePressed(MouseEvent e){ px = e.getX(); py = e.getY(); if(((px-(cx[0]*60+60))<(py-(cy[0]*60+60)))&&((px-(cx[0]*60+60))<(-(py-(cy[0]*60+60))))){ if(cx[0] > 0){ switch (td[cy[0]][cx[0]]){ case 1 : if(td[cy[0]][cx[0]-1] == 0){ td[cy[0]][cx[0]-1] = 1 ; td[cy[0]][cx[0]] = 0 ; cx[0] = cx[0] - 1 ; }else if(td[cy[0]][cx[0]-1] == 2){ td[cy[0]][cx[0]-1] = 3 ; td[cy[0]][cx[0]] = 0 ; cx[0] = cx[0] - 1 ; }else if(td[cy[0]][cx[0]-1] == 32){ td[cy[0]][cx[0]-1] = 33 ; td[cy[0]][cx[0]] = 0 ; if((cx[0]-1 == cx[5])&&(cy[0] == cy[5])){ nn = 5; }else{ nn = 7; } cx[0] = cx[0] - 1 ; }else if(td[cy[0]][cx[0]-1] == 34){ td[cy[0]][cx[0]-1] = 35 ; td[cy[0]][cx[0]] = 0 ; if((cx[0]-1 == cx[5])&&(cy[0] == cy[5])){ nn = 5; }else{ nn = 7; } cx[0] = cx[0] - 1 ; } break ; case 3 : if(td[cy[0]][cx[0]-1] == 0){ td[cy[0]][cx[0]-1] = 3 ; td[cy[0]][cx[0]] = 0 ; cx[0] = cx[0] - 1 ; cx[1] = cx[1] - 1 ; }else if(td[cy[0]][cx[0]-1] == 32){ td[cy[0]][cx[0]-1] = 35 ; td[cy[0]][cx[0]] = 0 ; if((cx[0]-1 == cx[5])&&(cy[0] == cy[5])){ nn = 5; }else{ nn = 7; } cx[0] = cx[0] - 1 ; cx[1] = cx[1] - 1 ; } break ; case 5 : if(td[cy[0]][cx[0]-1] == 0){ td[cy[0]][cx[0]-1] = 5 ; td[cy[0]][cx[0]] = 0 ; cx[0] = cx[0] - 1 ; cx[2] = cx[2] - 1 ; } break ; case 9 : if(td[cy[0]][cx[0]-1] == 0){ td[cy[0]][cx[0]-1] = 9 ; td[cy[0]][cx[0]] = 0 ; cx[0] = cx[0] - 1 ; cx[3] = cx[3] - 1 ; } break ; case 11 : if(td[cy[0]][cx[0]-1] == 0){ td[cy[0]][cx[0]-1] = 11 ; td[cy[0]][cx[0]] = 0 ; cx[0] = cx[0] - 1 ; cx[1] = cx[1] - 1 ; cx[3] = cx[3] -1 ; } break ; case 17 : if(td[cy[0]][cx[0]-1] == 0){ td[cy[0]][cx[0]-1] = 17 ; td[cy[0]][cx[0]] = 0 ; cx[0] = cx[0] - 1 ; cx[4] = cx[4] - 1 ; } break ; case 19 : if(td[cy[0]][cx[0]-1] == 0){ td[cy[0]][cx[0]-1] = 19 ; td[cy[0]][cx[0]] = 0 ; cx[0] = cx[0] - 1 ; cx[1] = cx[1] - 1 ; cx[4] = cx[4] -1 ; } break ; case 33 : if(td[cy[0]][cx[0]-1] == 0){ td[cy[0]][cx[0]-1] = 33 ; td[cy[0]][cx[0]] = 0 ; cx[0] = cx[0] - 1 ; cx[nn] = cx[nn] - 1 ; } break ; case 35 : if(td[cy[0]][cx[0]-1] == 0){ td[cy[0]][cx[0]-1] = 35 ; td[cy[0]][cx[0]] = 0 ; cx[0] = cx[0] - 1 ; cx[1] = cx[1] - 1 ; cx[nn] = cx[nn] -1 ; } break ; case 65 : if(td[cy[0]][cx[0]-1] == 0){ td[cy[0]][cx[0]-1] = 1 ; td[cy[0]][cx[0]] = 64 ; cx[0] = cx[0] - 1 ; }else if(td[cy[0]][cx[0]-1] == 2){ td[cy[0]][cx[0]-1] = 3 ; td[cy[0]][cx[0]] = 64 ; cx[0] = cx[0] - 1 ; }else if(td[cy[0]][cx[0]-1] == 32){ td[cy[0]][cx[0]-1] = 33 ; td[cy[0]][cx[0]] = 64 ; if((cx[0]-1 == cx[5])&&(cy[0] == cy[5])){ nn = 5; }else{ nn = 7; } cx[0] = cx[0] - 1 ; }else if(td[cy[0]][cx[0]-1] == 34){ td[cy[0]][cx[0]-1] = 35 ; td[cy[0]][cx[0]] = 64 ; if((cx[0]-1 == cx[5])&&(cy[0] == cy[5])){ nn = 5; }else{ nn = 7; } cx[0] = cx[0] - 1 ; } break ; } } }else if(((px-(cx[0]*60+60))>(py-(cy[0]*60+60)))&&((px-(cx[0]*60+60))<(-(py-(cy[0]*60+60))))){ if(cy[0] > 0){ switch (td[cy[0]][cx[0]]){ case 1 : if(td[cy[0]-1][cx[0]] == 0){ td[cy[0]-1][cx[0]] = 1 ; td[cy[0]][cx[0]] = 0 ; cy[0] = cy[0] - 1 ; }else if(td[cy[0]-1][cx[0]] == 4){ td[cy[0]-1][cx[0]] = 5 ; td[cy[0]][cx[0]] = 0 ; cy[0] = cy[0] - 1 ; }else if(td[cy[0]-1][cx[0]] == 8){ td[cy[0]-1][cx[0]] = 9 ; td[cy[0]][cx[0]] = 0 ; cy[0] = cy[0] - 1 ; } break ; case 3 : if(td[cy[0]-1][cx[0]] == 0){ td[cy[0]-1][cx[0]] = 3 ; td[cy[0]][cx[0]] = 0 ; cy[0] = cy[0] - 1 ; cy[1] = cy[1] - 1 ; }else if(td[cy[0]-1][cx[0]] == 4){ td[cy[0]-1][cx[0]] = 7 ; td[cy[0]][cx[0]] = 0 ; cy[0] = cy[0] - 1 ; cy[1] = cy[1] - 1 ; }else if(td[cy[0]-1][cx[0]] == 8){ td[cy[0]-1][cx[0]] = 11 ; td[cy[0]][cx[0]] = 0 ; cy[0] = cy[0] - 1 ; cy[1] = cy[1] - 1 ; } break ; case 5 : if(td[cy[0]-1][cx[0]] == 0){ td[cy[0]-1][cx[0]] = 5 ; td[cy[0]][cx[0]] = 0 ; cy[0] = cy[0] - 1 ; cy[2] = cy[2] - 1 ; } break ; case 9 : if(td[cy[0]-1][cx[0]] == 0){ td[cy[0]-1][cx[0]] = 9 ; td[cy[0]][cx[0]] = 0 ; cy[0] = cy[0] - 1 ; cy[3] = cy[3] - 1 ; } break ; case 11 : if(td[cy[0]-1][cx[0]] == 0){ td[cy[0]-1][cx[0]] = 11 ; td[cy[0]][cx[0]] = 0 ; cy[0] = cy[0] - 1 ; cy[1] = cy[1] - 1 ; cy[3] = cy[3] - 1 ; } break ; case 17 : if(td[cy[0]-1][cx[0]] == 0){ td[cy[0]-1][cx[0]] = 1 ; td[cy[0]][cx[0]] = 16 ; cy[0] = cy[0] - 1 ; }else if(td[cy[0]-1][cx[0]] == 4){ td[cy[0]-1][cx[0]] = 5 ; td[cy[0]][cx[0]] = 16 ; cy[0] = cy[0] - 1 ; }else if(td[cy[0]-1][cx[0]] == 8){ td[cy[0]-1][cx[0]] = 9 ; td[cy[0]][cx[0]] = 16 ; cy[0] = cy[0] - 1 ; } break ; case 19 : if(td[cy[0]-1][cx[0]] == 0){ td[cy[0]-1][cx[0]] = 3 ; td[cy[0]][cx[0]] = 16 ; cy[0] = cy[0] - 1 ; cy[1] = cy[1] - 1 ; }else if(td[cy[0]-1][cx[0]] == 4){ td[cy[0]-1][cx[0]] = 7 ; td[cy[0]][cx[0]] = 16 ; cy[0] = cy[0] - 1 ; cy[1] = cy[1] - 1 ; }else if(td[cy[0]-1][cx[0]] == 8){ td[cy[0]-1][cx[0]] = 11 ; td[cy[0]][cx[0]] = 16 ; cy[0] = cy[0] - 1 ; cy[1] = cy[1] - 1 ; } break ; case 33 : if(td[cy[0]-1][cx[0]] == 0){ td[cy[0]-1][cx[0]] = 33 ; td[cy[0]][cx[0]] = 0 ; cy[0] = cy[0] - 1 ; cy[nn] = cy[nn] - 1 ; } break ; case 35 : if(td[cy[0]-1][cx[0]] == 0){ td[cy[0]-1][cx[0]] = 35 ; td[cy[0]][cx[0]] = 0 ; cy[0] = cy[0] - 1 ; cy[1] = cy[1] - 1 ; cy[nn] = cy[nn] - 1 ; } break ; case 65 : if(td[cy[0]-1][cx[0]] == 0){ td[cy[0]-1][cx[0]] = 65 ; td[cy[0]][cx[0]] = 0 ; cy[0] = cy[0] - 1 ; cy[nn] = cy[nn] - 1 ; } break ; } } }else if(((px-(cx[0]*60+60))<(py-(cy[0]*60+60)))&&((px-(cx[0]*60+60))>(-(py-(cy[0]*60+60))))){ if(cy[0] < 2){ switch (td[cy[0]][cx[0]]){ case 1 : if(td[cy[0]+1][cx[0]] == 0){ td[cy[0]+1][cx[0]] = 1 ; td[cy[0]][cx[0]] = 0 ; cy[0] = cy[0] + 1 ; }else if(td[cy[0]+1][cx[0]] == 16){ td[cy[0]+1][cx[0]] = 17 ; td[cy[0]][cx[0]] = 0 ; cy[0] = cy[0] + 1 ; } break ; case 3 : if(td[cy[0]+1][cx[0]] == 0){ td[cy[0]+1][cx[0]] = 3 ; td[cy[0]][cx[0]] = 0 ; cy[0] = cy[0] + 1 ; cy[1] = cy[1] + 1 ; }else if(td[cy[0]+1][cx[0]] == 16){ td[cy[0]+1][cx[0]] = 19 ; td[cy[0]][cx[0]] = 0 ; cy[0] = cy[0] + 1 ; cy[1] = cy[1] + 1 ; } break ; case 5 : if(td[cy[0]+1][cx[0]] == 0){ td[cy[0]+1][cx[0]] = 1 ; td[cy[0]][cx[0]] = 4 ; cy[0] = cy[0] + 1 ; }else if(td[cy[0]+1][cx[0]] == 16){ td[cy[0]+1][cx[0]] = 17 ; td[cy[0]][cx[0]] = 4 ; cy[0] = cy[0] + 1 ; } break ; case 9 : if(td[cy[0]+1][cx[0]] == 0){ td[cy[0]+1][cx[0]] = 1 ; td[cy[0]][cx[0]] = 8 ; cy[0] = cy[0] + 1 ; }else if(td[cy[0]+1][cx[0]] == 16){ td[cy[0]+1][cx[0]] = 17 ; td[cy[0]][cx[0]] = 8 ; cy[0] = cy[0] + 1 ; } break ; case 11 : if(td[cy[0]+1][cx[0]] == 0){ td[cy[0]+1][cx[0]] = 3 ; td[cy[0]][cx[0]] = 8 ; cy[0] = cy[0] + 1 ; cy[1] = cy[1] + 1 ; }else if(td[cy[0]+1][cx[0]] == 16){ td[cy[0]+1][cx[0]] = 19 ; td[cy[0]][cx[0]] = 8 ; cy[0] = cy[0] + 1 ; cy[1] = cy[1] + 1 ; } break ; case 17 : if(td[cy[0]+1][cx[0]] == 0){ td[cy[0]+1][cx[0]] = 17 ; td[cy[0]][cx[0]] = 0 ; cy[0] = cy[0] + 1 ; cy[4] = cy[4] + 1 ; } break ; case 19 : if(td[cy[0]+1][cx[0]] == 0){ td[cy[0]+1][cx[0]] = 19 ; td[cy[0]][cx[0]] = 0 ; cy[0] = cy[0] + 1 ; cy[1] = cy[1] + 1 ; cy[4] = cy[4] + 1 ; } break ; case 33 : if(td[cy[0]+1][cx[0]] == 0){ td[cy[0]+1][cx[0]] = 33 ; td[cy[0]][cx[0]] = 0 ; cy[0] = cy[0] + 1 ; cy[nn] = cy[nn] + 1 ; } break ; case 35 : if(td[cy[0]+1][cx[0]] == 0){ td[cy[0]+1][cx[0]] = 35 ; td[cy[0]][cx[0]] = 0 ; cy[0] = cy[0] + 1 ; cy[1] = cy[1] + 1 ; cy[nn] = cy[nn] + 1 ; } break ; case 65 : if(td[cy[0]+1][cx[0]] == 0){ td[cy[0]+1][cx[0]] = 65 ; td[cy[0]][cx[0]] = 0 ; cy[0] = cy[0] + 1 ; cy[nn] = cy[nn] + 1 ; } break ; } } }else if(((px-(cx[0]*60+60))>(py-(cy[0]*60+60)))&&((px-(cx[0]*60+60))>(-(py-(cy[0]*60+60))))){ if(cx[0] < 6){ switch (td[cy[0]][cx[0]]){ case 1 : if(td[cy[0]][cx[0]+1] == 0){ td[cy[0]][cx[0]+1] = 1 ; td[cy[0]][cx[0]] = 0 ; cx[0] = cx[0] + 1 ; }else if(td[cy[0]][cx[0]+1] == 64){ td[cy[0]][cx[0]+1] = 65 ; td[cy[0]][cx[0]] = 0 ; if((cx[0]+1 == cx[6])&&(cy[0] == cy[6])){ nn = 6; }else{ nn = 8; } cx[0] = cx[0] + 1 ; } break ; case 3 : if(td[cy[0]][cx[0]+1] == 0){ td[cy[0]][cx[0]+1] = 1 ; td[cy[0]][cx[0]] = 2 ; cx[0] = cx[0] + 1 ; }else if(td[cy[0]][cx[0]+1] == 64){ td[cy[0]][cx[0]+1] = 65 ; td[cy[0]][cx[0]] = 2 ; if((cx[0]+1 == cx[6])&&(cy[0] == cy[6])){ nn = 6; }else{ nn = 8; } cx[0] = cx[0] + 1 ; } break ; case 5 : if(td[cy[0]][cx[0]+1] == 0){ td[cy[0]][cx[0]+1] = 5 ; td[cy[0]][cx[0]] = 0 ; cx[0] = cx[0] + 1 ; cx[2] = cx[2] + 1 ; } break ; case 9 : if(td[cy[0]][cx[0]+1] == 0){ td[cy[0]][cx[0]+1] = 9 ; td[cy[0]][cx[0]] = 0 ; cx[0] = cx[0] + 1 ; cx[3] = cx[3] + 1 ; } break ; case 11 : if(td[cy[0]][cx[0]+1] == 0){ td[cy[0]][cx[0]+1] = 11 ; td[cy[0]][cx[0]] = 0 ; cx[0] = cx[0] + 1 ; cx[1] = cx[1] + 1 ; cx[3] = cx[3] + 1 ; } break ; case 17 : if(td[cy[0]][cx[0]+1] == 0){ td[cy[0]][cx[0]+1] = 17 ; td[cy[0]][cx[0]] = 0 ; cx[0] = cx[0] + 1 ; cx[4] = cx[4] + 1 ; } break ; case 19 :if(td[cy[0]][cx[0]+1] == 0){ td[cy[0]][cx[0]+1] = 19 ; td[cy[0]][cx[0]] = 0 ; cx[0] = cx[0] + 1 ; cx[1] = cx[1] + 1 ; cx[4] = cx[4] + 1 ; } break ; case 33 :if(td[cy[0]][cx[0]+1] == 0){ td[cy[0]][cx[0]+1] = 1 ; td[cy[0]][cx[0]] = 32 ; cx[0] = cx[0] + 1 ; }else if(td[cy[0]][cx[0]+1] == 64){ td[cy[0]][cx[0]+1] = 65 ; td[cy[0]][cx[0]] = 32 ; if((cx[0]+1 == cx[6])&&(cy[0] == cy[6])){ nn = 6; }else{ nn = 8; } cx[0] = cx[0] + 1 ; } break ; case 35 : if(td[cy[0]][cx[0]+1] == 0){ td[cy[0]][cx[0]+1] = 1 ; td[cy[0]][cx[0]] = 34 ; cx[0] = cx[0] + 1 ; }else if(td[cy[0]][cx[0]+1] == 64){ td[cy[0]][cx[0]+1] = 65 ; td[cy[0]][cx[0]] = 34 ; if((cx[0]+1 == cx[6])&&(cy[0] == cy[6])){ nn = 6; }else{ nn = 8; } cx[0] = cx[0] + 1 ; } break ; case 65 : if(td[cy[0]][cx[0]+1] == 0){ td[cy[0]][cx[0]+1] = 65 ; td[cy[0]][cx[0]] = 0 ; cx[0] = cx[0] + 1 ; cx[nn] = cx[nn] + 1 ; } break ; } } } repaint(); } } ); } class MyListener implements ItemListener{ public void itemStateChanged(ItemEvent e){ Choice cho = (Choice)e.getSource(); switch(cho.getSelectedIndex()){ case 0 : lv = 1 ; d_set() ; repaint() ; break; case 1 : lv = 2 ; d_set() ; repaint() ; break; case 2 : lv = 3 ; d_set() ; repaint() ; break; } } } public void paint(Graphics g){ og.setColor(Color.white); og.fillRect(0,0,480,270); og.setColor(new Color(255,255,128)); for(int x1 = 0;x1 < lv*2+1;x1 ++){ for(int y1 = 0;y1 < 3;y1 ++){ og.fill3DRect((x1+3-lv)*60+30,y1*60+30,60,60,true); } } og.setColor(Color.red); og.fillRect(cx[1]*60+45,cy[1]*60+45,30,5); og.fillRect(cx[1]*60+45,cy[1]*60+45,5,30); og.fillRect(cx[1]*60+45,cy[1]*60+70,30,5); og.setColor(Color.blue); og.fillRect(cx[2]*60+35,cy[2]*60+35,50,5); og.fillRect(cx[2]*60+35,cy[2]*60+35,5,50); og.fillRect(cx[2]*60+80,cy[2]*60+35,5,50); og.setColor(Color.black); og.fillRect(cx[3]*60+35,cy[3]*60+35,50,5); og.fillRect(cx[3]*60+35,cy[3]*60+35,5,50); og.fillRect(cx[3]*60+80,cy[3]*60+35,5,50); og.fillRect(cx[4]*60+35,cy[4]*60+35,5,50); og.fillRect(cx[4]*60+80,cy[4]*60+35,5,50); og.fillRect(cx[4]*60+35,cy[4]*60+80,50,5); if((lv == 2)||(lv == 3)){ og.fillRect(cx[5]*60+35,cy[5]*60+35,5,50); og.fillRect(cx[5]*60+35,cy[5]*60+35,50,5); og.fillRect(cx[5]*60+35,cy[5]*60+80,50,5); og.fillRect(cx[6]*60+35,cy[6]*60+35,50,5); og.fillRect(cx[6]*60+80,cy[6]*60+35,5,50); og.fillRect(cx[6]*60+35,cy[6]*60+80,50,5); } if(lv == 3){ og.fillRect(cx[7]*60+35,cy[7]*60+35,5,50); og.fillRect(cx[7]*60+35,cy[7]*60+35,50,5); og.fillRect(cx[7]*60+35,cy[7]*60+80,50,5); og.fillRect(cx[8]*60+35,cy[8]*60+35,50,5); og.fillRect(cx[8]*60+80,cy[8]*60+35,5,50); og.fillRect(cx[8]*60+35,cy[8]*60+80,50,5); } for(int c1 = 0;c1 < 11;c1 ++){ og.setColor(new Color(0,c1*15+100,c1*15+100)); og.fillOval(cx[0]*60+50+c1,cy[0]*60+50+c1,20-c1*2,20-c1*2); } if(td[cy[0]][cx[0]] == 7){ og.setFont(new Font("",Font.BOLD,60)); og.setColor(Color.black); og.drawString("clear!!",162,138); og.setColor(Color.red); og.drawString("clear!!",160,140); } g.drawImage(os,0,0,this); } public void start(){ if(th == null){ th = new Thread(this); th.start(); } } public void d_set(){ cx[0] = 3 ; cy[0] = 1 ; cx[3] = 3 ; cy[3] = 0 ; cx[4] = 3 ; cy[4] = 2 ; cy[1] = 1 ; cy[2] = 1 ; cy[5] = 1 ; cy[6] = 1 ; cy[7] = 1 ; cy[8] = 1 ; switch (lv) { case 1 : cx[1] = 2 ; cx[2] = 4 ; break ; case 2 : cx[1] = 1 ; cx[2] = 5 ; cx[5] = 2 ; cx[6] = 4 ; break ; case 3 : cx[1] = 0 ; cx[2] = 6 ; cx[5] = 2 ; cx[6] = 4 ; cx[7] = 1 ; cx[8] = 5 ; break ; } for(int y1 = 0;y1 < 3;y1 ++){ for(int x1 = 0;x1 < 7;x1 ++){ switch (lv) { case 1 : if((x1 < 2)||(x1 > 4)){ td[y1][x1] = -1; }else{ td[y1][x1] = 0; } break ; case 2 : if((x1 < 1)||(x1 > 5)){ td[y1][x1] = -1; }else{ td[y1][x1] = 0; } break ; case 3 : td[y1][x1] = 0 ; break ; } } } td[cy[0]][cx[0]] = td[cy[0]][cx[0]] + 1; td[cy[1]][cx[1]] = td[cy[1]][cx[1]] + 2; td[cy[2]][cx[2]] = td[cy[2]][cx[2]] + 4; td[cy[3]][cx[3]] = td[cy[3]][cx[3]] + 8; td[cy[4]][cx[4]] = td[cy[4]][cx[4]] + 16; if(lv > 1){ td[cy[5]][cx[5]] = td[cy[5]][cx[5]] + 32; td[cy[6]][cx[6]] = td[cy[6]][cx[6]] + 64; } if(lv > 2){ td[cy[7]][cx[7]] = td[cy[7]][cx[7]] + 32; td[cy[8]][cx[8]] = td[cy[8]][cx[8]] + 64; } } 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 ) ; } }