📄 lianliankan.java
字号:
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 but[]=new Button[30]; //创建足够数量的按钮
Button b,ba,bc,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 llk=new lianliankan();
llk.suiji();
llk.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()
{
int i,j;
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();
for(i = 1;i<=6;i++)
{
for(j=1;j<=5;j++)
but[i*5+j-6]=new Button(String.valueOf(d[i][j]));
}
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);
for(i=0;i<30;i++)
p1.add(but[i]);
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(); } });
but[0].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{ wei(1,1);} });
but[1].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{ wei(1,2); } });
but[2].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{ wei(1,3);} });
but[3].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{wei(1,4);}});
but[4].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{wei(1,5);} });
but[5].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{wei(2,1);}});
but[6].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{ wei(2,2);}});
but[7].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{wei(2,3);}});
but[8].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{wei(2,4);}});
but[9].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{wei(2,5);}});
but[10].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{wei(3,1);} });
but[11].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{wei(3,2);} });
but[12].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{wei(3,3);}});
but[13].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{wei(3,4);}});
but[14].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{wei(3,5);}});
but[15].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{wei(4,1);}});
but[16].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{wei(4,2);} });
but[17].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{wei(4,3);} });
but[18].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{wei(4,4);}});
but[19].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{ wei(4,5);} });
but[20].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{wei(5,1);}});
but[21].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{wei(5,2);} });
but[22].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{wei(5,3);}});
but[23].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{wei(5,4);}});
but[24].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{wei(5,5);} });
but[25].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{wei(6,1);} });
but[26].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{wei(6,2);}});
but[27].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{ wei(6,3);}});
but[28].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{wei(6,4);}});
but[29].addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{ wei(6,5);} });
}
//退出界面
public void ex()
{
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)
{f1.setVisible(false);
f.setVisible(false);} });
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()
{
int i,j;
for(i = 1;i<=6;i++)
{
for(j=1;j<=5;j++)
{
if(d[i][j]==0)
{
but[i*5+j-6].setVisible(false);
//System.out.println(but[i*5+j-6]);
}
}
}
}
//判断并纪录每次点击按钮的信息
public void wei(int w1,int w2)
{ //当两次的按钮相同才能消去
if((s.trim()).equals("no"))
{
s="yes";
x0=w1;y0=w2;
n1=d[x0][y0];
b=but[w1*5+w2-6];
x=w1;y=w2;
n2=d[x][y];
ba=but[w1*5+w2-6];
}
else
{
x0=x; y0=y;
n1=d[x0][y0];
b=ba;
x=w1; y=w2;
n2=d[x][y];
ba=but[w1*5+w2-6];
if(n1==n2 && ba!=b)
{ xiao(); }
}
}
private void forxiao()
{
b.setVisible(false);
ba.setVisible(false);
guli();
s="no";
d[x0][y0]=0;
d[x][y]=0;
}
//这里是整个游戏最重要的部分,就是判断两个按钮在信息
//相同的情况下能不能消去。仔细分析,不一条条注释
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))) //相邻的情况
{ forxiao(); }
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)
{ forxiao(); }
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)
{ forxiao(); }
}
}
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)
{forxiao();}
}
}
}
}
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)
{forxiao();}
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)
{ forxiao();}
}
}
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)
{ forxiao();}
}
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -