?? 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 + -