📄 mineframe.java
字号:
menuGame.addSeparator();
menuGame.add(TCItem);
/**
* 关于菜单
*/
menuAbout.add(BZItem);
menuAbout.addSeparator();
menuAbout.add(GYItem);
/**
* 游戏菜单绑定键盘事件
*/
menuGame.setMnemonic(KeyEvent.VK_G);
KSItem.setMnemonic(KeyEvent.VK_N);
CJItem.setMnemonic(KeyEvent.VK_B);
ZJItem.setMnemonic(KeyEvent.VK_I);
GJItem.setMnemonic(KeyEvent.VK_E);
ZDYItem.setMnemonic(KeyEvent.VK_C);
YXBItem.setMnemonic(KeyEvent.VK_T);
TCItem.setMnemonic(KeyEvent.VK_X);
KSItem.addActionListener(this);
CJItem.addActionListener(this);
ZJItem.addActionListener(this);
GJItem.addActionListener(this);
ZDYItem.addActionListener(this);
YXBItem.addActionListener(this);
TCItem.addActionListener(this);
/**
* 关于菜单绑定键盘事件
*/
menuAbout.setMnemonic(KeyEvent.VK_A);
BZItem.setMnemonic(KeyEvent.VK_H);
GYItem.setMnemonic(KeyEvent.VK_A);
BZItem.addActionListener(this);
GYItem.addActionListener(this);
/**
* 添加到menuBar
*/
menuBar.add(menuGame);
menuBar.add(menuAbout);
setJMenuBar(menuBar);
}
/*********************
* 选择菜单时触发的事件方法
*/
public void actionPerformed(ActionEvent e)
{
String choice=((JMenuItem)e.getSource()).getText().trim();
if(choice.equals("开局(N)"))
{
dispose();
write();
new MineFrame(tempmineNumber,rows,cols);
}
if(choice.equals("初级(B)"))
{
dispose();
write();
new MineFrame(10,9,9);
}
if(choice.equals("中级(I)"))
{
dispose();
write();
new MineFrame(40,16,16);
}
if(choice.equals("高级(E)"))
{
dispose();
write();
new MineFrame(99,16,30);
}
if(choice.equals("自定义(C)"))
{
write();
new ZDYDialog(MineFrame.this,"自定义雷区", true);
}
if(choice.equals("扫雷英雄榜(T)"))
{
new XYBDialog(MineFrame.this,"扫雷英雄榜", true);
}
if(choice.equals("退出(X)"))
{
System.exit(0);
}
if(choice.equals("关于本程序(A)"))
{
new about.About(MineFrame.this,"关于扫雷",true);
}
if(choice.equals("帮助主题(H)"))
{
try
{
Runtime r=Runtime.getRuntime();
Process p=r.exec("hh.exe ..\\winmine.chm");
}catch(Exception err){}
}
}
/**************************
* 点击开始按钮的样式,以及事件的处理
*/
class beginBtnFace implements MouseListener
{
public void mouseClicked(MouseEvent e)
{
dispose();
//MineFrame.this.remove(pane2);
write();
new MineFrame(tempmineNumber,rows,cols);
//pane2();
//constructMineBtn();
}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mousePressed(MouseEvent e)
{
Object obj=e.getSource();
JButton bb=(JButton)obj;
if(bb==beginBtn)
{
beginBtn.setBorder(new BevelBorder(BevelBorder.LOWERED));
}
}
public void mouseReleased(MouseEvent e)
{
Object obj=e.getSource();
JButton bb=(JButton)obj;
if(bb==beginBtn)
{
beginBtn.setBorder(new BevelBorder(BevelBorder.RAISED));
}
}
}
/**********************
* 鼠标点击按钮时的触发事件
*/
class MouseE implements MouseListener
{
MineButton mbtn;
public void mouseClicked(MouseEvent e)
{
bttmp=mbtn;
mbtn=(MineButton)e.getSource();
if(!t.isRunning() && bool)
{
t.start();
}
if(bool) //如果t停止的话,就不进行事件的判断
{
doubleClieckID+=e.getButton(); //接受点击的值
if(e.getButton()==MouseEvent.BUTTON1 && mbtn.id<20)
{
MouseLeft(e);
}
else if(e.getButton()==MouseEvent.BUTTON3)
{
MouseRight();
}
}
}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mousePressed(MouseEvent e)
{
mbtn=(MineButton)e.getSource();
if(t.isRunning())
{
beginBtn.setIcon(new ImageIcon(MineFrame.class.getResource("image/99.jpg")));
}
for(int i=0;i<rows;i++)
{
for(int j=0;j<cols;j++)
{
if(mbtn==mineBtn[i][j] & mineBtn[i][j].isEnabled())
{
mineBtn[i][j].setBorder(new EmptyBorder(new Insets(1,1,1,1)));
mineBtn[i][j].setBackground(new Color(220,220,220));
}
}
}
}
public void mouseReleased(MouseEvent e)
{
mbtn=(MineButton)e.getSource();
if(t.isRunning())
{
beginBtn.setIcon(new ImageIcon(MineFrame.class.getResource("image/3.jpg")));
}
for(int i=0;i<rows;i++)
{
for(int j=0;j<cols;j++)
{
if(mbtn==mineBtn[i][j] & mineBtn[i][j].isEnabled())
{
mineBtn[i][j].setBorder(new BevelBorder(BevelBorder.RAISED));
mineBtn[i][j].setBackground(new Color(220,220,220));
}
}
}
}
/**
* 点击鼠标左键触发的方法
*/
public void MouseLeft(MouseEvent e)
{
/**
* 用id来判断,如果不是雷的话,应显示数字
* 把按钮的图片重新设置
*/
if(mbtn.id==10){mbtn.setIcon(new ImageIcon(MineFrame.class.getResource("image/0.gif")));mbtn.setDisabledIcon(new ImageIcon(MineFrame.class.getResource("image/0.gif")));mbtn.id-=10;}
if(mbtn.id==11){mbtn.setIcon(new ImageIcon(MineFrame.class.getResource("image/1.gif")));mbtn.setDisabledIcon(new ImageIcon(MineFrame.class.getResource("image/1.gif")));mbtn.id-=10;}
if(mbtn.id==12){mbtn.setIcon(new ImageIcon(MineFrame.class.getResource("image/2.gif")));mbtn.setDisabledIcon(new ImageIcon(MineFrame.class.getResource("image/2.gif")));mbtn.id-=10;}
if(mbtn.id==13){mbtn.setIcon(new ImageIcon(MineFrame.class.getResource("image/3.gif")));mbtn.setDisabledIcon(new ImageIcon(MineFrame.class.getResource("image/3.gif")));mbtn.id-=10;}
if(mbtn.id==14){mbtn.setIcon(new ImageIcon(MineFrame.class.getResource("image/4.gif")));mbtn.setDisabledIcon(new ImageIcon(MineFrame.class.getResource("image/4.gif")));mbtn.id-=10;}
if(mbtn.id==15){mbtn.setIcon(new ImageIcon(MineFrame.class.getResource("image/5.gif")));mbtn.setDisabledIcon(new ImageIcon(MineFrame.class.getResource("image/5.gif")));mbtn.id-=10;}
if(mbtn.id==16){mbtn.setIcon(new ImageIcon(MineFrame.class.getResource("image/6.gif")));mbtn.setDisabledIcon(new ImageIcon(MineFrame.class.getResource("image/6.gif")));mbtn.id-=10;}
if(mbtn.id==17){mbtn.setIcon(new ImageIcon(MineFrame.class.getResource("image/7.gif")));mbtn.setDisabledIcon(new ImageIcon(MineFrame.class.getResource("image/7.gif")));mbtn.id-=10;}
if(mbtn.id==18){mbtn.setIcon(new ImageIcon(MineFrame.class.getResource("image/8.gif")));mbtn.setDisabledIcon(new ImageIcon(MineFrame.class.getResource("image/8.gif")));mbtn.id-=10;}
mbtn.setBorder(new EmptyBorder(new Insets(1,1,1,1)));
mbtn.setEnabled(false);
win();
/**
* 如果点击是雷的话,把剩余的雷显示出来,同时游戏结束
* 把开始按钮的图片也重新设置
*/
for(int i=0;i<rows;i++)
{
for(int j=0;j<cols;j++)
{
if(mbtn.id==19)
{
mbtn.setEnabled(false);
mbtn.setIcon(new ImageIcon(MineFrame.class.getResource("image/DiLei_Bomd.gif")));
mbtn.setDisabledIcon(new ImageIcon(MineFrame.class.getResource("image/DiLei_Bomd.gif")));
if(mineBtn[i][j].id==19)
{
mineBtn[i][j].setEnabled(false);
mineBtn[i][j].setIcon(new ImageIcon(MineFrame.class.getResource("image/DiLei.gif")));
mineBtn[i][j].setDisabledIcon(new ImageIcon(MineFrame.class.getResource("image/DiLei.gif")));
beginBtn.setIcon(new ImageIcon(MineFrame.class.getResource("image/88.jpg")));
e.consume();
if(t.isRunning())
{
t.stop();
bool=false;
}
}
}
if(mbtn==mineBtn[i][j]) //如果点击的按钮是空的话,调用递归方法循环搜索
{
if(mbtn.id==0)
{
DiGui(i,j);
return;
}
}
}
}
}
/**
* 点击鼠标右键触发的方法
*/
public void MouseRight()
{
if(mbtn.isEnabled())
{
for(int i=0;i<rows;i++)
{
for(int j=0;j<cols;j++)
{
if(mbtn==mineBtn[i][j])
{
if(mbtn==mineBtn[i][j] & mineBtn[i][j].id<20)
{
mbtn.setIcon(new ImageIcon(MineFrame.class.getResource("image/FLAG.GIF"))); //雷,插旗
mineBtn[i][j].id+=10;
mineNumber--;
if(mineNumber==0)
{
win();
}
setmineNumberLable(); //设置显示雷数的标签框的文本
}
else if(mbtn==mineBtn[i][j] & mineBtn[i][j].id>=20)
{
mbtn.setIcon(null);
mineBtn[i][j].id-=10;
mineNumber++;
setmineNumberLable(); //设置显示雷数的标签框的文本
}
}
}
}
}
}
/**
*用于判断标签框上显示雷的数字
*/
public void setmineNumberLable()
{
if(mineNumber<10)
{
lb1.setText("00"+mineNumber);
if(mineNumber<0)
{
lb1.setText("-0"+Math.abs(mineNumber));
if(mineNumber<=-10)
{
lb1.setText(""+mineNumber);
}
}
}
else
{
lb1.setText("0"+mineNumber);
}
}
}
/**
* 判断是否赢了
*/
public void win()
{
int winMineNumber=0;
int yyy=0;
for(int k=0;k<rows;k++)
{
for(int l=0;l<cols;l++)
{
if(mineBtn[k][l].id==29)
{
winMineNumber++;
}
if(mineBtn[k][l].id<10 |mineBtn[k][l].id>=20)
{
yyy++;
}
}
}
if(winMineNumber==tempmineNumber & yyy==(rows*cols))
{
t.stop();
bool=false;
beginBtn.setIcon(new ImageIcon(MineFrame.class.getResource("image/ok.jpg")));
finishtime=Integer.parseInt(lb2.getText().trim());
CJFinishTime=Integer.parseInt(XYBlb[3].getText().trim());
ZJFinishTime=Integer.parseInt(XYBlb[5].getText().trim());
GJFinishTime=Integer.parseInt(XYBlb[7].getText().trim());
if(JiBei==1)
{
if(finishtime<CJFinishTime)new XMwindow(MineFrame.this);
}
if(JiBei==2)
{
if(finishtime<ZJFinishTime)new XMwindow(MineFrame.this);
}
if(JiBei==3)
{
if(finishtime<GJFinishTime)new XMwindow(MineFrame.this);
}
}
}
/**
* 点击按钮在无雷的情况下展开周围按钮的递归方法
*/
public void DiGui(int x,int y)
{
for(int i=-1;i<2;i++)
{
if(i+x>=rows)continue;
if(i+x<0)continue;
for(int j=-1;j<2;j++)
{
if(j+y>=cols)continue;
if(j+y<0)continue;
if(i==0 & j==0)continue;
if(mineBtn[i+x][j+y].id>=10 && mineBtn[i+x][j+y].id<20)
{
mineBtn[i+x][j+y].id-=10;
if(mineBtn[i+x][j+y].id==0)
{
mineBtn[i+x][j+y].setIcon(new ImageIcon(MineFrame.class.getResource("image/0.gif")));
mineBtn[i+x][j+y].setDisabledIcon(new ImageIcon(MineFrame.class.getResource("image/0.gif")));
mineBtn[i+x][j+y].setEnabled(false);
mineBtn[i+x][j+y].setBorder(new EmptyBorder(new Insets(1,1,1,1)));
DiGui(i+x,j+y);
}
if(mineBtn[i+x][j+y].id>=1 && mineBtn[i+x][j+y].id<=8)
{
if(mineBtn[i+x][j+y].id==1){mineBtn[i+x][j+y].setIcon(new ImageIcon(MineFrame.class.getResource("image/1.gif")));mineBtn[i+x][j+y].setDisabledIcon(new ImageIcon(MineFrame.class.getResource("image/1.gif")));}
if(mineBtn[i+x][j+y].id==2){mineBtn[i+x][j+y].setIcon(new ImageIcon(MineFrame.class.getResource("image/2.gif")));mineBtn[i+x][j+y].setDisabledIcon(new ImageIcon(MineFrame.class.getResource("image/2.gif")));}
if(mineBtn[i+x][j+y].id==3){mineBtn[i+x][j+y].setIcon(new ImageIcon(MineFrame.class.getResource("image/3.gif")));mineBtn[i+x][j+y].setDisabledIcon(new ImageIcon(MineFrame.class.getResource("image/3.gif")));}
if(mineBtn[i+x][j+y].id==4){mineBtn[i+x][j+y].setIcon(new ImageIcon(MineFrame.class.getResource("image/4.gif")));mineBtn[i+x][j+y].setDisabledIcon(new ImageIcon(MineFrame.class.getResource("image/4.gif")));}
if(mineBtn[i+x][j+y].id==5){mineBtn[i+x][j+y].setIcon(new ImageIcon(MineFrame.class.getResource("image/5.gif")));mineBtn[i+x][j+y].setDisabledIcon(new ImageIcon(MineFrame.class.getResource("image/5.gif")));}
if(mineBtn[i+x][j+y].id==6){mineBtn[i+x][j+y].setIcon(new ImageIcon(MineFrame.class.getResource("image/6.gif")));mineBtn[i+x][j+y].setDisabledIcon(new ImageIcon(MineFrame.class.getResource("image/6.gif")));}
if(mineBtn[i+x][j+y].id==7){mineBtn[i+x][j+y].setIcon(new ImageIcon(MineFrame.class.getResource("image/7.gif")));mineBtn[i+x][j+y].setDisabledIcon(new ImageIcon(MineFrame.class.getResource("image/7.gif")));}
if(mineBtn[i+x][j+y].id==8){mineBtn[i+x][j+y].setIcon(new ImageIcon(MineFrame.class.getResource("image/8.gif")));mineBtn[i+x][j+y].setDisabledIcon(new ImageIcon(MineFrame.class.getResource("image/8.gif")));}
mineBtn[i+x][j+y].setBorder(new EmptyBorder(new Insets(1,1,1,1)));
mineBtn[i+x][j+y].setEnabled(false);
}
if(mineBtn[i+x][j+y].id==9)
{
mineBtn[i+x][j+y].id=19;
}
}
}
}
}
/***************
*自定义Dialog
*选择自定义菜单时弹出的窗口
*/
class ZDYDialog extends JDialog implements ActionListener
{
JButton b1,b2;
JLabel jl1,jl2,jl3;
JTextField jtf1,jtf2,jtf3;
public ZDYDialog(){super();}
public ZDYDialog(Frame owner, String title, boolean modal)
{
super(owner,title,modal);
p=MineFrame.this.getLocation();
setResizable(false);
b1=new JButton("确定");
b2=new JButton("取消");
jl1=new JLabel("高度");
jl2=new JLabel("宽度");
jl3=new JLabel("雷数");
jtf1=new JTextField(rows+"");
jtf2=new JTextField(cols+"");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -