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 ) ;
}
}
