import java.applet.*; import java.awt.*; import java.awt.event.*; public class h_matches extends Applet implements Runnable{ Thread th = null; Image os; Graphics og; int tdb[][][] = {{{-1,-1,0,0,-1},{-1,0,1,0,-1},{0,1,1,0,-1},{0,1,0,-1,-1},{0,0,-1,-1,-1}}, {{-1,-1,0,0,0},{-1,0,1,1,0},{0,1,1,0,-1},{0,0,0,-1,-1},{-1,-1,-1,-1,-1}}, {{-1,0,0,0,-1},{0,1,1,0,-1},{0,1,1,0,-1},{0,0,0,-1,-1},{-1,-1,-1,-1,-1}}}; int td[][][] = new int[3][5][5]; int tdc[][][] = new int[3][5][5]; int hx[] = new int[9],hy[] = new int[9]; int cx,cy,cn; int mx,my; int pd; int co,ef,cs; int ln,tn; public void init(){ os = createImage(420,320); og = os.getGraphics(); for(int i1 = 0;i1 < 3;i1 ++){ for(int i2 = 0;i2 < 5;i2 ++){ for(int i3 = 0;i3 < 5;i3 ++){ td[i1][i2][i3] = tdb[i1][i2][i3]; } } } co = 1; ln = 6; ef = 0; addMouseListener( new MouseAdapter(){ public void mousePressed(MouseEvent e){ if((e.getX()>320)&&(e.getX()<400)&&(e.getY()>250)&&(e.getY()<280)){ for(int i1 = 0;i1 < 3;i1 ++){ for(int i2 = 0;i2 < 5;i2 ++){ for(int i3 = 0;i3 < 5;i3 ++){ td[i1][i2][i3] = tdb[i1][i2][i3]; } } } co = 1; ln = 6; ef = 0; } if((e.getY()-(70*((e.getY()-10)/70)+10)) < 20){ cn = 1; cy = (e.getY()+35)/70; cx = (e.getX()+60-40*cy)/80; }else if(((mx-20)/40+(my-20)/70)%2 == 0){ cn = 2; cy = (e.getY()-20)/70; cx = (e.getX()+60-40*cy)/80; }else{ cn = 3; cy = (e.getY()-20)/70; cx = (e.getX()+60-40*cy)/80; } if(ef == 0){ switch(co){ case 1 : if(td[cn-1][cy][cx] == 1){ co = 2; td[cn-1][cy][cx] = 0; } break; case 2 : if(td[cn-1][cy][cx] == 0){ co = 3; td[cn-1][cy][cx] = 1; } break; case 3 : if(td[cn-1][cy][cx] == 1){ co = 4; td[cn-1][cy][cx] = 0; } break; case 4 : if(td[cn-1][cy][cx] == 0){ co = 1; td[cn-1][cy][cx] = 1; ln --; // if(ln == 2)ef = 1; } break; } } repaint(); } } ); addMouseMotionListener( new MouseMotionAdapter(){ public void mouseMoved(MouseEvent e){ mx = e.getX(); my = e.getY(); if((mx<340)&&(my<320)){ if((my-(70*((my-10)/70)+10)) < 20){ pd = 1; }else if(((mx-20)/40+(my-20)/70)%2 == 0){ pd = 2; }else{ pd = 3; } repaint(); } } } ); } public void paint(Graphics g){ og.setColor(Color.white); og.fillRect(0,0,420,320); og.setColor(Color.lightGray); for(int dx = 0;dx < 4;dx ++){ for(int dy = 0;dy < 5;dy ++){ if(td[0][dy][dx] != -1)og.drawLine(80*dx+40*dy-60,70*dy+20,80*dx+40*dy+20,70*dy+20); } } for(int dx = 0;dx < 5;dx ++){ for(int dy = 0;dy < 4;dy ++){ if(td[1][dy][dx] != -1)og.drawLine(80*dx+40*dy-60,70*dy+20,80*dx+40*dy-20,70*dy+90); } } for(int dx = 0;dx < 4;dx ++){ for(int dy = 0;dy < 4;dy ++){ if(td[2][dy][dx] != -1)og.drawLine(80*dx+40*dy+20,70*dy+20,80*dx+40*dy-20,70*dy+90); } } if(co == 1){ for(int i1 = 0;i1 < 3;i1 ++){ for(int i2 = 0;i2 < 5;i2 ++){ for(int i3 = 0;i3 < 5;i3 ++){ tdc[i1][i2][i3] = td[i1][i2][i3]; } } } tn = 0; og.setColor(Color.blue); for(int dx = 0;dx < 4;dx ++){ for(int dy = 0;dy < 4;dy ++){ if((td[0][dy][dx]==1)&&(td[1][dy][dx]==1)&&(td[2][dy][dx]==1)){ hx[0]=80*dx-60+40*dy+10;hx[1]=hx[0]+60;hx[2]=hx[0]+30;hx[3]=hx[0]; hy[0]=70*dy+20+6;hy[1]=hy[0];hy[2]=hy[0]+52;hy[3]=hy[0]; og.drawPolygon(hx,hy,4); tdc[0][dy][dx]=0;tdc[1][dy][dx]=0;tdc[2][dy][dx]=0; tn ++; } } } for(int dx = 0;dx < 4;dx ++){ for(int dy = 0;dy < 4;dy ++){ if((td[0][dy+1][dx]==1)&&(td[1][dy][dx+1]==1)&&(td[2][dy][dx]==1)){ hx[0]=80*dx-20+40*dy+10;hx[1]=hx[0]+60;hx[2]=hx[0]+30;hx[3]=hx[0]; hy[0]=70*dy+90-6;hy[1]=hy[0];hy[2]=hy[0]-52;hy[3]=hy[0]; og.drawPolygon(hx,hy,4); tdc[0][dy+1][dx]=0;tdc[1][dy][dx+1]=0;tdc[2][dy][dx]=0; tn ++; } } } for(int dx = 0;dx < 3;dx ++){ for(int dy = 0;dy < 3;dy ++){ if((td[0][dy+1][dx]==0)&&(td[1][dy][dx+1]==0)&&(td[2][dy][dx]==0)&& (td[0][dy][dx]==1)&&(td[0][dy][dx+1]==1)&& (td[1][dy][dx]==1)&&(td[1][dy+1][dx]==1)&& (td[2][dy][dx+1]==1)&&(td[2][dy+1][dx]==1)){ hx[0]=80*dx-60+40*dy+10;hx[1]=hx[0]+140;hx[2]=hx[0]+70;hx[3]=hx[0]; hy[0]=70*dy+20+6;hy[1]=hy[0];hy[2]=hy[0]+122;hy[3]=hy[0]; og.drawPolygon(hx,hy,4); tdc[0][dy][dx]=0;tdc[0][dy][dx+1]=0; tdc[1][dy][dx]=0;tdc[1][dy+1][dx]=0; tdc[2][dy][dx+1]=0;tdc[2][dy+1][dx]=0; tn ++; } } } for(int dx = 1;dx < 4;dx ++){ for(int dy = 1;dy < 4;dy ++){ if((td[0][dy][dx]==0)&&(td[1][dy][dx]==0)&&(td[2][dy][dx]==0)&& (td[0][dy+1][dx-1]==1)&&(td[0][dy+1][dx]==1)&& (td[1][dy-1][dx+1]==1)&&(td[1][dy][dx+1]==1)&& (td[2][dy-1][dx]==1)&&(td[2][dy][dx-1]==1)){ hx[0]=80*dx-100+40*dy+10;hx[1]=hx[0]+140;hx[2]=hx[0]+70;hx[3]=hx[0]; hy[0]=70*dy+90-6;hy[1]=hy[0];hy[2]=hy[0]-122;hy[3]=hy[0]; og.drawPolygon(hx,hy,4); tdc[0][dy+1][dx-1]=0;tdc[0][dy+1][dx]=0; tdc[1][dy-1][dx+1]=0;tdc[1][dy][dx+1]=0; tdc[2][dy-1][dx]=0;tdc[2][dy][dx-1]=0; tn ++; } } } if(tn != ln)ef = 1; cs = 0; for(int i1 = 0;i1 < 3;i1 ++){ for(int i2 = 0;i2 < 5;i2 ++){ for(int i3 = 0;i3 < 5;i3 ++){ if(tdc[i1][i2][i3] != -1)cs = cs + tdc[i1][i2][i3]; } } } if(cs != 0)ef = 1; } for(int dx = 0;dx < 4;dx ++){ for(int dy = 0;dy < 5;dy ++){ if(td[0][dy][dx] == 1)match(80*dx+40*dy-60,70*dy+20,1); } } for(int dx = 0;dx < 5;dx ++){ for(int dy = 0;dy < 4;dy ++){ if(td[1][dy][dx] == 1)match(80*dx+40*dy-60,70*dy+20,2); } } for(int dx = 0;dx < 4;dx ++){ for(int dy = 0;dy < 4;dy ++){ if(td[2][dy][dx] == 1)match(80*dx+40*dy-60,70*dy+20,3); } } if((co == 2) || (co == 4)){ switch(pd){ case 1 : match(mx-40,my,pd) ; break ; case 2 : match(mx-20,my-35,pd) ; break ; case 3 : match(mx-60,my-35,pd) ; break ; } og.setFont(new Font("",Font.BOLD,18)); og.setColor(Color.gray); if(co == 2){ og.drawString("1",mx,my); }else{ og.drawString("2",mx,my); } } if((ef == 0)&&(ln > 2)){ og.setFont(new Font("",Font.BOLD,30)); og.setColor(Color.black); og.drawString(""+ln+" -> "+(ln-1),310,70); }else{ og.setColor(Color.red); if((ln == 2)&&(cs == 0)){ og.setFont(new Font("",Font.BOLD,30)); og.drawString("clear!!",310,70); ef = 1; }else{ og.setFont(new Font("",Font.BOLD,20)); og.drawString("NO GOOD",310,70); } } og.setColor(Color.black); og.setFont(new Font("",Font.BOLD,24)); og.drawString("retry",335,272); og.drawRect(320,250,80,30); g.drawImage(os,0,0,this); } public void match(int px,int py,int dn){ switch(dn){ case 1 : og.setColor(new Color(222,184,135)); og.fillRect(px+5,py-3,65,6); og.setColor(new Color(139,0,0)); hx[0]=px+60;hx[1]=hx[0]+3;hx[2]=hx[0]+13;hx[3]=hx[0]+16;hx[4]=hx[3];hx[5]=hx[2];hx[6]=hx[1];hx[7]=hx[0];hx[8]=hx[0]; hy[0]=py-3;hy[1]=hy[0]-3;hy[2]=hy[1];hy[3]=hy[0];hy[4]=hy[0]+6;hy[5]=hy[4]+3;hy[6]=hy[5];hy[7]=hy[4];hy[8]=hy[0]; og.fillPolygon(hx,hy,9); break; case 2 : og.setColor(new Color(222,184,135)); hx[0]=px+6;hx[1]=hx[0]+35;hx[2]=hx[1]-5;hx[3]=hx[0]-5;hx[4]=hx[0]; hy[0]=py+5;hy[1]=hy[0]+60;hy[2]=hy[1]+3;hy[3]=hy[0]+3;hy[4]=hy[0]; og.fillPolygon(hx,hy,5); og.setColor(new Color(139,0,0)); hx[0]=px+5;hx[1]=hx[0]+4;hx[2]=hx[1]+5;hx[3]=hx[2];hx[4]=hx[3]-5;hx[5]=hx[4]-4;hx[6]=hx[5]-5;hx[7]=hx[6];hx[8]=hx[0]; hy[0]=py+4;hy[1]=hy[0];hy[2]=hy[1]+9;hy[3]=hy[2]+4;hy[4]=hy[3]+3;hy[5]=hy[4];hy[6]=hy[5]-9;hy[7]=hy[6]-4;hy[8]=hy[0]; og.fillPolygon(hx,hy,9); break; case 3 : og.setColor(new Color(222,184,135)); hx[0]=px+75;hx[1]=hx[0]+5;hx[2]=hx[1]-35;hx[3]=hx[0]-35;hx[4]=hx[0]; hy[0]=py+5;hy[1]=hy[0]+3;hy[2]=hy[1]+60;hy[3]=hy[0]+60;hy[4]=hy[0]; og.fillPolygon(hx,hy,5); og.setColor(new Color(139,0,0)); hx[0]=px+40;hx[1]=hx[0]+5;hx[2]=hx[1]+4;hx[3]=hx[2]+5;hx[4]=hx[3];hx[5]=hx[4]-5;hx[6]=hx[5]-4;hx[7]=hx[6]-5;hx[8]=hx[0]; hy[0]=py+65;hy[1]=hy[0]+3;hy[2]=hy[1];hy[3]=hy[2]-9;hy[4]=hy[3]-4;hy[5]=hy[4]-3;hy[6]=hy[5];hy[7]=hy[6]+9;hy[8]=hy[0]; og.fillPolygon(hx,hy,9); break; } } 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 ) ; } }