📄 llk.txt
字号:
我写的一个连连看游戏程序
/*很好玩的东东,大家都能做出来的东东,大家如果想把这个复制下去运行的话,记得在这个文件同目录下新建一*个叫做images文件夹。其中存放 liu1.gif,liu2.gif,liu3.gif,liu4.gif,liu5.gif,liu6.gif这样六张图片,
*具体图片可以任意,但名称与格式一定要正确
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Random;
public class frame1 extends JFrame
{
ImageIcon beauty=new ImageIcon("images/liu8.gif");
//JLabel jl=new JLabel(beauty);
private String [] images={"liu1.gif","liu2.gif","liu3.gif","liu4.gif","liu5.gif","liu6.gif"};
private ImageIcon[] ii=new ImageIcon[6];
private JButton [] buttons=new JButton[36];
private int ptr=0;
private JButton[] buttonGroup=new JButton[2];
private int[] 位置绑定=new int[2];
private int ptr1=0;
private int[] sequence=new int[36];
private JButton 激活按钮=new JButton("激活按钮",beauty);
private JButton 重置按钮=new JButton("重置按钮");
private JButton 炸弹按钮=new JButton("炸弹");
private int[] 重置按钮组=new int[36];
private int ptr2=0;
private int [][] matrix={
{1,1,1,1,1,1},//0
{1,1,1,1,1,1},//1
{1,1,1,1,1,1},//2
{1,1,1,1,1,1},//3
{1,1,1,1,1,1},//4
{1,1,1,1,1,1}//5
}; // 0/1/2/3/4/5
public frame1(String title,int width,int height)
{
//设置窗体基本信息
super(title);
Dimension dim=Toolkit.getDefaultToolkit().getScreenSize();
final Container con =getContentPane();
ImageIcon ii=new ImageIcon("images/middle.gif");
setIconImage(ii.getImage());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(width,height);
int w=getSize().width;
int h=getSize().height;
w=(dim.width-w)/2;
h=(dim.height-h)/2;
//添加按钮
激活按钮.setToolTipText("点此按钮将激活所有按钮,继续玩!");
激活按钮.addActionListener(new ActionListener()
{
public void actionPerformed (ActionEvent f)
{
for(int i=0 ;i<36;i++)
{
buttons.setEnabled (true);
matrix[i/6][i%6]=1;
}
}
});
重置按钮.setToolTipText("点此按钮对图片进行重排!");
重置按钮.addActionListener(new ActionListener()
{
public void actionPerformed (ActionEvent f)
{
for(int i=0 ;i<36;i++)
{
if(buttons.isEnabled ())
重置按钮组=1;
else
重置按钮组=0;
}
con.removeAll();
con.setLayout(new GridLayout(7,6));
buildSequence();
for(int j=0 ; j<36;j++)
{
matrix[j/6][j%6]=重置按钮组[sequence[j]];
if(重置按钮组[sequence[j]]==0)
buttons[sequence[j]].setEnabled(false);
con.add(buttons[sequence[j]]);
}
add(激活按钮);
add(重置按钮);
con.add(炸弹按钮);
show();
}
});
炸弹按钮.setToolTipText("慎用,少用,否则你会后悔!");
炸弹按钮.addActionListener(new ActionListener()
{
public void actionPerformed (ActionEvent f)
{
JButton[] 待爆=new JButton[2];
label: for(int i=0;i<36;i++)
{ 待爆[0]=getEnabledButton(i);
待爆[1]=getEnabledButton(i+1);
if (待爆[0]==null&&待爆[1]==null)
JOptionPane.showMessageDialog(null,"No buttons is visible!\n请激活......","提示框",JOptionPane.INFORMATION_MESSAGE);
if (待爆[0]!=null&&待爆[1]!=null&&待爆[0]!=待爆[1])
{
for(int j=0;j<36;j++)
{
if(待爆[0]==buttons[sequence[j]])
{
位置绑定[0]=j;
break;
}
}
for(int j=0;j<36;j++)
{
if(待爆[1]==buttons[sequence[j]])
{ 位置绑定[1]=j;
break;
}
}
if(isConnected((位置绑定[0])/6,(位置绑定[0])%6,(位置绑定[1])/6,(位置绑定[1]%6)))
{
待爆[0].setEnabled(false);
待爆[1].setEnabled(false);
matrix[(位置绑定[0])/6][(位置绑定[0])%6]=0;
matrix[(位置绑定[1])/6][(位置绑定[1])%6]=0;
break label;
}
}
}
}
});
setButtons();
setLayout(new GridLayout(7,6));
buildSequence();
for(int i=0 ; i<36;i++)
{
con.add(buttons[sequence]);
}
for( int i=0;i<36;i++)
{
buttons[sequence].addActionListener(new ActionListener()
{
public void actionPerformed (ActionEvent e)
{
int p=ptr;
for(int j=0;j<36;j++)
{
if((JButton)e.getSource()==buttons[sequence[j]])
{
位置绑定[ptr1]=j;
}
}
if(p==0||p==1)
{
buttonGroup[p]=(JButton)(e.getSource());
ptr++;
ptr1++;
System.out.println("ptr="+ptr);
}
if (p==1)
{
System.out.println("("+(位置绑定[0])/6+","+(位置绑定[0])%6+") and ("+(位置绑定[1])/6+","+(位置绑定[1])%6+")");
boolean bl=isConnected((位置绑定[0])/6,(位置绑定[0])%6,(位置绑定[1])/6,(位置绑定[1])%6);
System.out.println ("point x("+(位置绑定[0])/6+","+(位置绑定[0])%6+") is connected with point ("+(位置绑定[1])/6+","+(位置绑定[1])%6+") is "+bl);
if(buttonGroup[0]==buttonGroup[1])
{
ptr=0;
ptr1=0;
}
else if((buttonGroup[0].getIcon())==(buttonGroup[1].getIcon())&&isConnected((位置绑定[0])/6,(位置绑定[0])%6,(位置绑定[1])/6,(位置绑定[1]%6)))
{
buttonGroup[0].setEnabled(false);
buttonGroup[1].setEnabled(false);
matrix[(位置绑定[0])/6][(位置绑定[0])%6]=0;
matrix[(位置绑定[1])/6][(位置绑定[1])%6]=0;
ptr=0;
ptr1=0;
}
else
{
ptr=0;
ptr1=0;
}
}
boolean bl=true;
for (int i=0; i<36;i++)
{
if(buttons.isEnabled())
{
bl=false;
break;
}
}
if(bl)
{
String str=JOptionPane.showInputDialog(" 嗨,哥们!这美女现在送给你了!\n请留下尊姓大名: ");
JOptionPane.showMessageDialog(null,"笨蛋,"+str+"! \n今天虽然不是愚人节,可世上哪有这么便宜的事","你个傻瓜",JOptionPane.INFORMATION_MESSAGE);
}
}
});
}
con.add(激活按钮);
con.add(重置按钮);
con.add(炸弹按钮);
setVisible(true);
}
public void setButtons()
{
for(int i=0;i<6;i++)
{
this.ii=new ImageIcon("images/"+this.images);
for(int j=0;j<6;j++)
{
this.buttons[i*6+j]=new JButton(this.ii);
}
}
}
//这个方法声称已随机数列(0~35)
public void buildSequence ()
{
Random random= new Random();
sequence[0]=random.nextInt(36);
for(int i=0;i<35;i++)
{
int r=random.nextInt(36);
if (notEqual(r,i))
{
sequence[i+1]=r;
}
else
i--;
}
for(int i=0;i<36;i++)
System.out.println(sequence);
}
public boolean notEqual(int r,int ptr)
{
for(int i=0;i<=ptr;i++)
{
if(r==sequence)
return false;
}
return true;
}
public boolean isConnected (int x,int y,int p,int q)
{
if(matrix[x][y]==0||matrix[p][q]==0)
return false;
for(int i=1;i<6-y;i++)
{
int result=0;
result=right(x,y,i,result);
result=down(x,y+i,p-x,result);
result=right(p,y+i,q-y-i,result);
//System.out.println("____________________________________");
if(result==1)
return true;
}
for(int i=1;i<=y;i++)
{
int result=0;
result=right(x,y,-i,result);
result=down(x,y-i,p-x,result);
result=right(p,y-i,q+i-y,result);
//System.out.println("____________________________________");
if(result==1)
return true;
}
for(int i=1;i<=x;i++)
{
int result=0;
result=down(x,y,-i,result);
result=right(x-i,y,q-y,result);
result=down(x-i,q,p+i-x,result);
//System.out.println("____________________________________");
if(result==1)
return true;
}
for(int i=1;i<6-x;i++)
{
int result=0;
result=down(x,y,i,result);
result=right(x+i,y,q-y,result);//right(3,)
result=down(x+i,q,p-x-i,result);
//System.out.println("____________________________________");
if(result==1)
return true;
}
return false;
}
public int down (int x,int y,int steps, int result)
{
if(steps<0)
{
for(int i=1; i<=Math.abs(steps);i++)
{
result+=matrix[x-i][y];
}
//System.out.println("向上走"+Math.abs(steps)+"步,result 为"+result);
return result;
}
for(int i=1; i<=Math.abs(steps);i++)
{
result+=matrix[x+i][y];
}
//System.out.println("向下走"+steps+"步,result 为"+result);
return result ;
}
public int right (int x,int y,int steps, int result)
{
if(steps<0)
{
for(int i=1; i<=Math.abs(steps);i++)
{
result+=matrix[x][y-i];
}
//System.out.println("向左走"+Math.abs(steps)+"步,result 为"+result);
return result;
}
for(int i=1; i<=Math.abs(steps);i++)
{
result+=matrix[x][y+i];
}
//System.out.println("向右走"+steps+"步,result 为"+result);
return result ;
}
public JButton getEnabledButton(int begining )
{
for(int i=begining ;i<36;i++)
{
if(buttons.isEnabled())
return buttons;
}
return null;
}
public static void main (String[] args )
{
JFrame.setDefaultLookAndFeelDecorated(true);
frame1 f= new frame1("陶士强的连连看",500,500);
f.show();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -