import java.awt.*;  import java.awt.event.*;  public class lianliankan implements ActionListener  {  static String s="no"; //用来纪录点击按钮的信息  int x0=0,y0=0,x=0,y=0,n1=0,n2=0; //用来纪录按钮的位置信息  Frame f,f1;  Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b10; //用比较笨的方法添加了  Button b11,b12,b13,b14,b15,b16,b17,b18; //30个按钮来实现游戏界面  Button b19,b20,b21,b22,b23,b24,b25; //可以用数组实现,这是本人  Button b26,b27,b28,b29,b30,bc; //学java时,入门的联系,所以  Button b,ba,br,bt1,bt2; //有些东西很业余!!嘻嘻  Panel p1,p2,p3;  TextField t; //用来显示一些随机信息,方法是下面的guli().  Label l;  int d[][]={ //用来和界面的按钮建立映射关系  {0,0,0,0,0,0,0}, 
  {0,0,0,0,0,0,0},  {0,0,0,0,0,0,0},  {0,0,0,0,0,0,0},  {0,0,0,0,0,0,0},  {0,0,0,0,0,0,0},  {0,0,0,0,0,0,0},  {0,0,0,0,0,0,0}  };  public static void main(String[] args)  { 
  lianliankan t=new lianliankan();  t.suiji();  t.go(); 
  }  public void actionPerformed(ActionEvent e) //再来一次按钮的响应事件。  {  int d[][]={  {0,0,0,0,0,0,0}, 
  {0,0,0,0,0,0,0},  {0,0,0,0,0,0,0},  {0,0,0,0,0,0,0},  {0,0,0,0,0,0,0},  {0,0,0,0,0,0,0},  {0,0,0,0,0,0,0},  {0,0,0,0,0,0,0}  };  this.d=d;  suiji();  f.setVisible(false);  f1.setVisible(false);  s="no";  go(); 
  } 
 
  public void go()//初始化界面  {  l=new Label("亲爱的玩家,");  f=new Frame("连连看");  t=new TextField();  p2=new Panel();  p1=new Panel();  p3=new Panel();  bc=new Button("退出");  br=new Button("重列");  b=new Button();  b1=new Button(String.valueOf(d[1][1]));  b2=new Button(String.valueOf(d[1][2]));  b3=new Button(String.valueOf(d[1][3]));  b4=new Button(String.valueOf(d[1][4]));  b5=new Button(String.valueOf(d[1][5]));  b6=new Button(String.valueOf(d[2][1]));  b7=new Button(String.valueOf(d[2][2]));  b8=new Button(String.valueOf(d[2][3]));  b9=new Button(String.valueOf(d[2][4]));  b10=new Button(String.valueOf(d[2][5]));  b11=new Button(String.valueOf(d[3][1]));  b12=new Button(String.valueOf(d[3][2]));  b13=new Button(String.valueOf(d[3][3]));  b14=new Button(String.valueOf(d[3][4]));  b15=new Button(String.valueOf(d[3][5]));  b16=new Button(String.valueOf(d[4][1]));  b17=new Button(String.valueOf(d[4][2]));  b18=new Button(String.valueOf(d[4][3]));  b19=new Button(String.valueOf(d[4][4]));  b20=new Button(String.valueOf(d[4][5]));  b21=new Button(String.valueOf(d[5][1]));  b22=new Button(String.valueOf(d[5][2]));  b23=new Button(String.valueOf(d[5][3]));  b24=new Button(String.valueOf(d[5][4]));  b25=new Button(String.valueOf(d[5][5]));  b26=new Button(String.valueOf(d[6][1]));  b27=new Button(String.valueOf(d[6][2]));  b28=new Button(String.valueOf(d[6][3]));  b29=new Button(String.valueOf(d[6][4]));  b30=new Button(String.valueOf(d[6][5]));  p3.setLayout(null);  p1.setSize(250,300);  p2.setSize(100,40);  p3.setSize(300,30);  t.setSize(60,30);  l.setSize(70,30);  p1.setLayout(new GridLayout(6,5));  p1.setBackground(Color.pink);  p1.setLocation(100,100);  p2.setLocation(0,400);  p3.setLocation(50,50);  t.setLocation(230,2);  l.setLocation(150,2);  bc.setLocation(0,40);  br.setLocation(0,100);  f.add(p1);  f.add(p2);  f.add(p3);  p3.add(l);  p3.add(t);  p2.add(bc);  p2.add(br);  p1.add(b1);  p1.add(b2);  p1.add(b3);  p1.add(b4);  p1.add(b5);  p1.add(b6);  p1.add(b7);  p1.add(b8);  p1.add(b9);  p1.add(b10);  p1.add(b11);  p1.add(b12);  p1.add(b13);  p1.add(b14);  p1.add(b15);  p1.add(b16);  p1.add(b17);  p1.add(b18);  p1.add(b19);  p1.add(b20);  p1.add(b21);  p1.add(b22);  p1.add(b23);  p1.add(b24);  p1.add(b25);  p1.add(b26);  p1.add(b27);  p1.add(b28);  p1.add(b29);  p1.add(b30);  f.pack();  f.setBounds(280,100,500,450);  f.setResizable(false);  f.setVisible(true);  bc.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  ex();  } 
  });  br.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  chonglie();  } 
  });  b1.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  wei(1,1,b1); 
  } 
  });  b2.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  wei(1,2,b2);  } 
 
  });  b3.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  { 
  wei(1,3,b3); 
  } 
  });  b4.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  { 
  wei(1,4,b4);  } 
  });  b5.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  wei(1,5,b5);  }  });  b6.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  wei(2,1,b6);  }  });  b7.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  wei(2,2,b7);  }  });  b8.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  wei(2,3,b8);  }  });  b9.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  wei(2,4,b9);  }  });  b10.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  wei(2,5,b10);  }  });  b11.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  wei(3,1,b11);  }  });  b12.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  wei(3,2,b12);  }  });  b13.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  wei(3,3,b13);  }  });  b14.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  wei(3,4,b14);  }  });  b15.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  wei(3,5,b15);  }  });  b16.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  wei(4,1,b16);  }  });  b17.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  wei(4,2,b17);  }  });  b18.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  wei(4,3,b18);  }  });  b19.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  wei(4,4,b19);  }  });  b20.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  wei(4,5,b20);  }  });  b21.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  wei(5,1,b21);  }  });  b22.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  wei(5,2,b22);  }  });  b23.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  wei(5,3,b23);  }  });  b24.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  wei(5,4,b24);  }  });  b25.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  wei(5,5,b25);  }  });  b26.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  wei(6,1,b26);  }  });  b27.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  wei(6,2,b27);  }  });  b28.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  wei(6,3,b28);  }  });  b29.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  wei(6,4,b29);  }  });  b30.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  wei(6,5,b30);  }  }); 
 
  } 
 
  public void ex() //退出界面,可用diolog来实现有模式的类型,更加符合  {  f1=new Frame("游戏作业");  f1.setLayout(new GridLayout(1,1));  bt1=new Button("确定退出");  bt2=new Button("再来一局");  f1.add(bt1);  f1.add(bt2);  f1.pack();  f1.setBounds(400,250,90,60);  f1.setResizable(false);  f1.show();  f1.setVisible(true);  bt1.addMouseListener(new MouseAdapter(){  public void mouseClicked(MouseEvent e)  {  System.exit(0);  }  });  bt2.addActionListener(this);  } 
 
  public void suiji() //产生随机数,来填充游戏界面对应的数组的各个位置  {  int m,n,k=0,k1,k2,k3;  for(m=1;m<=15;m++)  {  k1=(int)(Math.random()*25+1);  for(n=1;n<=2;n++)  {  k2=(int)(Math.random()*6+1);  k3=(int)(Math.random()*5+1);  while(d[k2][k3]!=0 && k!=30)  {  k2=(int)(Math.random()*6+1);  k3=(int)(Math.random()*5+1);  }  this.d[k2][k3]=k1;  k++;  }  }  } 
 
  public void guli() //随机信息  {  int l=0;  t.setText("");  l=(int)(Math.random()*10);  System.out.println(l);  switch(l)  {  case 1:  t.setText("好!加油!");  break; 
  case 3:  t.setText("你真棒!");  break; 
  case 5:  t.setText("加快速度!");  break; 
  case 6:  t.setText("不错啊!");  break; 
  case 8:  t.setText("加油吧!");  break; 
  case 9:  t.setText("够聪明!");  break; 
  default:  break; 
  }  }  public void chonglie() //重列方法  {  int save[],i,j,n=0,k2,k3,k;  int d[][]={  {0,0,0,0,0,0,0},  {0,0,0,0,0,0,0},  {0,0,0,0,0,0,0},  {0,0,0,0,0,0,0},  {0,0,0,0,0,0,0},  {0,0,0,0,0,0,0},  {0,0,0,0,0,0,0},  {0,0,0,0,0,0,0}  };  save=new int[30];  for(n=0;n<30;n++)  save[n]=0; //定义一个数组来保存当前的每个按钮位置上的信息  n=0;  for(i=0;i<=6;i++)  for(j=0;j<=5;j++)  {  if(this.d[i][j]!=0)  {  save[n]=this.d[i][j];  n++;  }  }  n=n-1;  this.d=d;  while(n>=0) //产生随机位置,放置按钮  {  k2=(int)(Math.random()*6+1);  k3=(int)(Math.random()*5+1);  while(d[k2][k3]!=0)  {  k2=(int)(Math.random()*6+1);  k3=(int)(Math.random()*5+1);  }  this.d[k2][k3]=save[n];  n--;  }  f.setVisible(false);  s="no"; //这里一定要将按钮点击信息归为初始  go();  ling();  }  public void ling() //将数组中为零的成员对应的按钮消去  { //用按钮类型的数组实现会简化得多,  if(d[1][1]==0)  b1.setVisible(false);  if(d[1][2]==0)  b2.setVisible(false);  if(d[1][3]==0)  b3.setVisible(false);  if(d[1][4]==0)  b4.setVisible(false);  if(d[1][5]==0)  b5.setVisible(false);  if(d[2][1]==0)  b6.setVisible(false);  if(d[2][2]==0)  b7.setVisible(false);  if(d[2][3]==0)  b8.setVisible(false);  if(d[2][4]==0)  b9.setVisible(false);  if(d[2][5]==0)  b10.setVisible(false);  if(d[3][1]==0)  b11.setVisible(false);  if(d[3][2]==0)  b12.setVisible(false);  if(d[3][3]==0)  b13.setVisible(false);  if(d[3][4]==0)  b14.setVisible(false);  if(d[3][5]==0)  b15.setVisible(false);  if(d[4][1]==0)  b16.setVisible(false);  if(d[4][2]==0)  b17.setVisible(false);  if(d[4][3]==0)  b18.setVisible(false);  if(d[4][4]==0)  b19.setVisible(false);  if(d[4][5]==0)  b20.setVisible(false);  if(d[5][1]==0)  b21.setVisible(false);  if(d[5][2]==0)  b22.setVisible(false);  if(d[5][3]==0)  b23.setVisible(false);  if(d[5][4]==0)  b24.setVisible(false);  if(d[5][5]==0)  b25.setVisible(false);  if(d[6][1]==0)  b26.setVisible(false);  if(d[6][2]==0)  b27.setVisible(false);  if(d[6][3]==0)  b28.setVisible(false);  if(d[6][4]==0)  b29.setVisible(false);  if(d[6][5]==0)  b30.setVisible(false);  } 
 
  public void wei(int w1,int w2,Button bz) //判断并纪录每次点击按钮的信息  { //当两次的按钮相同才能消去  if((s.trim()).equals("no"))  {  s=b1.getLabel();  x0=w1;  y0=w2;  n1=d[x0][y0];  b=bz;  x=w1;  y=w2;  n2=d[x][y];  ba=bz; 
  }  else  {  x0=x;  y0=y;  n1=d[x0][y0];  b=ba;  x=w1;  y=w2;  n2=d[x][y];  ba=bz;  if(n1==n2 && ba!=b)  {  xiao();  }  }  } 
 
  public void xiao() //这里是整个游戏最重要的部分,就是判断两个按钮在信息  { //相同的情况下能不能消去。仔细分析,不一条条注释  int i=0, j=0,n=0,k=0;  if((x0==x &&(y0==y+1||y0==y-1)) || ((x0==x+1||x0==x-1)&&(y0==y))) //相邻的情况  {  ba.setVisible(false);  b.setVisible(false);  guli();  s="no";  d[x0][y0]=0;  d[x][y]=0;  }  else  {  for (j=0;j<7;j++ ) //两个按钮按行分析,看能否消去  {  if (d[x0][j]==0)  {  if (y>j)  { 
  for (i=y-1;i>=j;i-- )  {  if (d[x][i]!=0)  {  k=0;  break;  }  else  {  k=1;  }  }  if (k==1)  {  if (y0>j)  {  for (i=y0-1;i>=j ;i-- )  {  if (d[x0][i]!=0)  {  k=0;  break;  }  else  {  k=2;  }  }  }  if (y0<j)  {  for (i=y0+1;i<=j ;i++)  {  if (d[x0][i]!=0)  {  k=0;  break;  }  else  {  k=2;  }  }  }  }  }  if (y<j)  { 
 
  for (i=y+1;i<=j ;i++ )  { 
  if (d[x][i]!=0)  {  k=0;  break;  }  else  {  k=1;  }  }  if (k==1)  {  if (y0>j)  {  for (i=y0-1;i>=j ;i-- )  {  if (d[x0][i]!=0)  {  k=0;  break;  }  else  {  k=2;  }  }  }  if (y0<j)  {  for (i=y0+1;i<=j ;i++)  {  if (d[x0][i]!=0)  {  k=0;  break;  }  else  {  k=2;  }  }  }  }  }  if (y==j )  {  if (y0>j)  {  for (i=y0-1;i>=j ;i-- )  { 
  if (d[x0][i]!=0)  {  k=0;  break;  }  else  {  k=2;  }  }  }  if (y0<j)  {  for (i=y0+1;i<=j ;i++)  {  if (d[x0][i]!=0)  {  k=0;  break;  }  else  {  k=2;  }  }  }  }  }  if (k==2)  { if (x0==x)  {  b.setVisible(false);  ba.setVisible(false);  guli();  s="no";  k=0;  d[x0][y0]=0;  d[x][y]=0;  }  if (x0<x)  {  for (n=x0;n<=x-1;n++ )  {  if (d[n][j]!=0)  {  k=0;  break;  }  if(d[n][j]==0 && n==x-1)  {  b.setVisible(false);  ba.setVisible(false);  guli();  s="no";  k=0;  d[x0][y0]=0;  d[x][y]=0;  }  }  }  if (x0>x)  {  for (n=x0;n>=x+1 ;n-- )  {  if (d[n][j]!=0)  {  k=0;  break;  }  if(d[n][j]==0 && n==x+1)  {  b.setVisible(false);  ba.setVisible(false);  guli();  s="no";  k=0;  d[x0][y0]=0;  d[x][y]=0; 
  }  }  }  }  } 
  for (i=0;i<8;i++ ) //按列分析,看能不能消去  {  if (d[i][y0]==0)  {  if (x>i)  { 
  for (j=x-1;j>=i ;j-- )  {  if (d[j][y]!=0)  {  k=0;  break;  }  else  {  k=1;  }  } 
 
  if (k==1)  {  if (x0>i)  {  for (j=x0-1;j>=i ;j-- )  {  if (d[j][y0]!=0)  {  k=0;  break;  }  else  {  k=2;  }  }  }  if (x0<i)  {  for (j=x0+1;j<=i;j++ )  {  if (d[j][y0]!=0)  {  k=0;  break;  }  else  {  k=2;  }  }  }  }  }  if (x<i)  { 
  for (j=x+1;j<=i;j++ )  {  if (d[j][y]!=0)  {  k=0;  break;  }  else  {  k=1;  }  }  if (k==1)  {  if (x0>i)  {  for (j=x0-1;j>=i ;j-- )  {  if (d[j][y0]!=0)  {  k=0;  break;  }  else  {  k=2;  }  }  }  if (x0<i)  {  for (j=x0+1;j<=i ;j++ )  {  if (d[j][y0]!=0)  {  k=0;  break;  }  else  {  k=2;  }  }  }  }  }  if (x==i)  { 
 
  if (x0>i)  {  for (j=x0-1;j>=i ;j-- )  {  if (d[j][y0]!=0)  {  k=0;  break;  }  else  {  k=2;  }  }  }  if (x0<i)  {  for (j=x0+1;j<=i ;j++ )  {  if (d[j][y0]!=0)  {  k=0;  break;  }  else  {  k=2;  }  }  } 
  }  }  if (k==2)  {  if (y0==y)  {  b.setVisible(false);  ba.setVisible(false);  guli();  s="no";  k=0;  d[x0][y0]=0;  d[x][y]=0; 
  }  if (y0<y)  {  for (n=y0;n<=y-1 ;n++ )  {  if (d[i][n]!=0)  {  k=0;  break;  }  if(d[i][n]==0 && n==y-1)  {  b.setVisible(false);  ba.setVisible(false);  guli();  s="no";  k=0;  d[x0][y0]=0;  d[x][y]=0; 
  }  }  }  if (y0>y)  {  for (n=y0;n>=y+1 ;n--)  {  if (d[i][n]!=0)  {  k=0;  break;  }  if(d[i][n]==0 && n==y+1)  {  b.setVisible(false);  ba.setVisible(false);  guli();  s="no";  k=0;  d[x0][y0]=0;  d[x][y]=0; 
  }  }  }  }  } 
  }  }  } 
  
 
  |