?? myframe.java
字號(hào):
package cleanMine;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.UIManager.LookAndFeelInfo;
public class MyFrame implements ActionListener
{
JFrame jf;
JMenuBar jmb;
JLabel jl_1,jl_2,jl_3,jl_4;
JButton restart;
MineButton[][] mines;
JPanel jp_center;
int level=10;
boolean isGoing=true;
int countClick=level;
timeThread tt;
public MyFrame()
{
jf=new JFrame("掃雷 --JAVA版--");
initMenuBar();
jf.setLayout(new BorderLayout());
initNorth();
initMines();
tt=new timeThread(jl_4);
tt.start();
showMe();
}
private void initMines()
{
isGoing=true;
if(jp_center!=null)
{
jf.remove(jp_center);
}
mines=new MineButton[level][level];
jp_center=new JPanel();
jp_center.setLayout(new GridLayout(level,level));//將面板布局為設(shè)置為十行十列的網(wǎng)格.setLayout(new GridLayout(level,level));//將面板布局為設(shè)置為十行十列的網(wǎng)格
jf.add(jp_center,BorderLayout.CENTER);
for(int i=0;i<mines.length;i++)
{
for(int j=0;j<mines[i].length;j++)
{
mines[i][j]=new MineButton(i,j);
jp_center.add(mines[i][j]);
mines[i][j].addActionListener(this);
mines[i][j].addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent arg0)
{
if(arg0.getButton()==3)
{
MineButton m=(MineButton)arg0.getSource();
if(countClick>0)
{
if(!m.isChangD()&&!m.isFlagd())
{
m.setFlagd(true);
m.setText("?");
countClick--;
jl_2.setText(""+countClick);
}
else if(!m.isChangD()&&m.isFlagd())
{
m.setFlagd(true);
m.setText("");
countClick++;
jl_2.setText(""+countClick);
}
if(countClick==0)
{
boolean success=true;
for(int i=0;i<level;i++)
for(int j=0;j<level;j++)
{
if(mines[i][j].getText().equals("?")&&mines[i][j].getIsMines()!=-1)
{
success=false;
break;
}
}
if(success)
{
restart.setText("您成功了!");
tt.stopTime();
}
else
{
restart.setText("您輸了!");
tt.stopTime();
}
}
}
}
}
});
}
}
//布雷
int count=0;
while(count<level)
{
int x=(int)(Math.random()*level);
int y=(int)(Math.random()*level);
if(mines[x][y].getIsMines()!=-1)
{
mines[x][y].setIsMines(-1);
count++;
}
}
//判斷周圍的雷數(shù)
for(int i=0;i<mines.length;i++)
{
for(int j=0;j<mines[i].length;j++)
{
if(mines[i][j].getIsMines()!=-1)
{
int countMines=0;
if(i-1>-1&&j-1>-1&&mines[i-1][j-1].getIsMines()==-1)
countMines++;
if(i-1>-1&&j>-1&&mines[i-1][j].getIsMines()==-1)
countMines++;
if(i-1>-1&&j+1<mines[i-1].length&&mines[i-1][j+1].getIsMines()==-1)
countMines++;
if(j-1>-1&&mines[i][j-1].getIsMines()==-1)
countMines++;
if(j+1<mines[i].length&&mines[i][j+1].getIsMines()==-1)
countMines++;
if(i+1<mines.length&&j-1>-1&&mines[i+1][j-1].getIsMines()==-1)
countMines++;
if(i+1<mines.length&&mines[i+1][j].getIsMines()==-1)
countMines++;
if(i+1<mines.length&&j+1<mines[i+1].length&&mines[i+1][j+1].getIsMines()==-1)
countMines++;
mines[i][j].setIsMines(countMines);
}
}
}
//jf.add(jp,BorderLayout.CENTER);
}
private void initNorth()
{
jl_1=new JLabel("剩余雷數(shù):");
jl_2=new JLabel(level+"");
jl_3=new JLabel("所用時(shí)間:");
jl_4=new JLabel("0");
restart=new JButton("重新開始");
restart.addActionListener(this);
JPanel jp=new JPanel();
jp.add(jl_1);
jp.add(jl_2);
jp.add(restart);
jp.add(jl_3);
jp.add(jl_4);
jf.add(jp,BorderLayout.NORTH);
}
private void initMenuBar()//初始化菜單欄
{
jmb=new JMenuBar();//創(chuàng)建菜單欄
JMenu jm_1=new JMenu("游戲");//創(chuàng)建菜單項(xiàng)
JMenuItem jm_1_1=new JMenuItem("開局");
jm_1_1.addActionListener(this);
ButtonGroup bg_1=new ButtonGroup();//用于捆綁初高級(jí)菜單,使其只能二選一
JCheckBoxMenuItem jm_1_2=new JCheckBoxMenuItem("初級(jí)",true);//單選菜單
jm_1_2.addActionListener(this);
bg_1.add(jm_1_2);
JCheckBoxMenuItem jm_1_3=new JCheckBoxMenuItem("高級(jí)");//單選菜單
jm_1_3.addActionListener(this);
bg_1.add(jm_1_3);
JMenuItem jm_1_4=new JMenuItem("退出");
jm_1_4.addActionListener(this);
jm_1.add(jm_1_1);
jm_1.addSeparator();//添加橫線
jm_1.add(jm_1_2);
jm_1.add(jm_1_3);
jm_1.addSeparator();//添加橫線
jm_1.add(jm_1_4);
JMenu jm_2=new JMenu("界面");//創(chuàng)建菜單項(xiàng)
ButtonGroup bg_2=new ButtonGroup();
JCheckBoxMenuItem jm_2_1=new JCheckBoxMenuItem("XP樣式",true);
jm_2_1.addActionListener(this);
bg_2.add(jm_2_1);
JCheckBoxMenuItem jm_2_2=new JCheckBoxMenuItem("經(jīng)典樣式",true);
jm_2_2.addActionListener(this);
bg_2.add(jm_2_2);
jm_2.add(jm_2_1);
jm_2.add(jm_2_2);
jmb.add(jm_1);//加載菜單
jmb.add(jm_2);//加載菜單
jf.setJMenuBar(jmb);//加載菜單欄
}
private void showMe()
{
tt.reset();
jf.setLocation(300,100);
jf.setSize(30*level,30*level+60);
jf.setVisible(true);
jf.setResizable(false);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//關(guān)閉按鈕生效
}
public static void main(String[] args)
{
new MyFrame();
}
public void actionPerformed(ActionEvent e)
{
String comm=e.getActionCommand();
if("開局".equals(comm))
{
jl_2.setText(level+"");
jl_4.setText("0");
initMines();
countClick=level;
restart.setText("重新開始");
showMe();
//isGoing=true;
}
else if("初級(jí)".equals(comm))
{
level=10;
jl_2.setText(level+"");
jl_4.setText("0");
initMines();
countClick=level;
restart.setText("重新開始");
showMe();
//isGoing=true;
}
else if("高級(jí)".equals(comm))
{
level=20;
jl_2.setText(level+"");
jl_4.setText("0");
initMines();
countClick=level;
restart.setText("重新開始");
showMe();
//isGoing=true;
}
else if("退出".equals(comm))
{
System.exit(1);
}
else if("XP樣式".equals(comm))
{
LookAndFeelInfo[] infos=UIManager.getInstalledLookAndFeels();
String[] names=new String[infos.length];
for(int i=0;i<infos.length;i++)
{
names[i]=infos[i].getClassName();
}
try
{
UIManager.setLookAndFeel(names[0]);
}
catch (Exception e1)
{
e1.printStackTrace();
}
SwingUtilities.updateComponentTreeUI(jf);
}
else if("經(jīng)典樣式".equals(comm))
{
LookAndFeelInfo[] infos=UIManager.getInstalledLookAndFeels();
String[] names=new String[infos.length];
for(int i=0;i<infos.length;i++)
{
names[i]=infos[i].getClassName();
}
try
{
UIManager.setLookAndFeel(names[3]);
}
catch (Exception e1)
{
e1.printStackTrace();
}
SwingUtilities.updateComponentTreeUI(jf);
}
else if("重新開始".equals(comm)||"您成功了!".equals(comm)||"您輸了!".equals(comm))
{
jl_2.setText(level+"");
jl_4.setText("0");
initMines();
countClick=level;
restart.setText("重新開始");
showMe();
//isGoing=true;
}
else
{
if(isGoing)
{
MineButton mine=(MineButton)e.getSource();
if(mine.getText()!="?")
{
if(mine.getIsMines()==-1)
{
isGoing=false;
for(int i=0;i<mines.length;i++)
for(int j=0;j<mines[i].length;j++)
{
//mines[i][j].setEnabled(false);
if(mines[i][j].getIsMines()==-1)
{
mines[i][j].setText("*");
mines[i][j].setFont(new Font("comic Sans MS",27,27));
restart.setText("您輸了!");
tt.stopTime();
}
}
}
else
{
showEmpty(mine.getRow(),mine.getCol());
}
}
}
}
}
private void showEmpty(int row,int col)
{
MineButton m=mines[row][col];
if(!m.isChangD())
{
if(m.getIsMines()==0)
{
//m.setText(""+m.getIsMines());
m.setBackground(Color.WHITE);
m.setChangD(true);
if(row-1>-1&&col-1>-1)
showEmpty(row-1,col-1);
if(row-1>-1)
showEmpty(row-1,col);
if(row-1>-1&&col+1<level)
showEmpty(row-1,col+1);
if(col-1>-1)
showEmpty(row,col-1);
if(col+1<level)
showEmpty(row,col+1);
if(row+1<level&&col-1>-1)
showEmpty(row+1,col-1);
if(row+1<level)
showEmpty(row+1,col);
if(row+1<level&&col+1<level)
showEmpty(row+1,col+1);
}
else if(m.getIsMines()==1)
{
m.setForeground(Color.BLUE);
m.setText(""+m.getIsMines());
m.setChangD(true);
}
else if(m.getIsMines()==2)
{
m.setForeground(Color.GREEN);
m.setText(""+m.getIsMines());
m.setChangD(true);
}
else
{
m.setForeground(Color.RED);
m.setText(""+m.getIsMines());
m.setChangD(true);
}
//m.setChangD(true);
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -