import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
class LeiBlock {
boolean islei;// 是否是雷
int roundlei;// 周围的雷数
boolean isclick;// 是否被点击
int localx;// coordinate x
int localy;// coordinate y
boolean isred;// 是否被标记为地雷
LeiBlock() {
islei = false;
roundlei = 0;
isclick = false;
localy = localx = 0;
isred = false;
}
}
public class myapplet extends Applet {
private static final long serialVersionUID = 2L;
int n = 15;// 规格
int ln=3*n; //地雷个数;
LeiBlock bmatrix[][] = new LeiBlock[n][n];// 位置数组
int xlocal[] = new int[ln];// 雷x坐标
int ylocal[] = new int[ln];// 雷y坐标
boolean yeslei = false; // 判断生成地雷坐标是否成功
JButton mybutton[][] = new JButton[n][n];// 按钮数组
Color clickcolor = new Color(25, 225, 126);// 被点击后的颜色
int subsum = n * n; // 还没有被点击的块数量
boolean first=true;
ImageIcon imagelei = new
ImageIcon("D:\\eclipse\\workspace\\Example\\saoleiresouce\\lei.png");//
地雷图样
ImageIcon imagered = new
ImageIcon("D:\\eclipse\\workspace\\Example\\saoleiresouce\\red.png");//
标注小红旗
public void init() {
//JFrame lframe = new JFrame("saolei"); // 创建框架
Toolkit lkit = Toolkit.getDefaultToolkit();// 得到屏幕大小
Dimension lscreensize = lkit.getScreenSize();
setSize(lscreensize.width / 2, (int) (lscreensize.height *
0.8)); // 设置框架大小
GridLayout lgrid = new GridLayout(n, n, 1, 1);// 添加布局管理器
setLayout(lgrid);
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++) {
bmatrix[i][j] = new LeiBlock(); // 地雷初始化
mybutton[i][j] = new JButton(); // 按钮初始化
mybutton[i][j].addMouseListener(new outinterface());//
按钮注册监听
}
do { // 循环寻找布雷策略,直到成功
for (int i = 0; i < ln; i++) {
xlocal[i] = (int) (Math.random() * n);
ylocal[i] = (int) (Math.random() * n);
}
yeslei = true;
for (int i = 0; i < ln; i++) { // 避免重复位置
for (int j = i + 1; j < ln; j++) {
if (xlocal[i] == xlocal[j])
if (ylocal[i] == ylocal[j])
yeslei = false;
}
}
} while (!yeslei);
for (int i = 0; i < ln; i++) { // 初始化地雷位置
bmatrix[xlocal[i]][ylocal[i]].islei = true;
}
for (int i = 0; i < n; i++) // 初始化地雷阵
for (int j = 0; j < n; j++) {
int sum = 0;
if (!bmatrix[i][j].islei) // 不是地雷的位置
{
if (((j - 1) >= 0)
&& bmatrix[i][j - 1].islei) //
上
sum += 1;
if (((j + 1) < n)
&& bmatrix[i][j + 1].islei) //
下
sum += 1;
if (((i - 1) >= 0)
&& bmatrix[i - 1][j].islei) //
左
sum += 1;
if (((i + 1) < n)
&& bmatrix[i + 1][j].islei) //
右
sum += 1;
if (((j - 1) >= 0)
&& ((i - 1) >= 0)
&& bmatrix[i - 1][j - 1].islei) //
左上
sum += 1;
if (((j + 1) < n)
&& ((i - 1) >= 0)
&& bmatrix[i - 1][j + 1].islei) //
右上
sum += 1;
if (((j - 1) >= 0)
&& ((i + 1) < n)
&& bmatrix[i + 1][j - 1].islei) //
左下
sum += 1;
if (((j + 1) < n)
&& ((i + 1) < n)
&& bmatrix[i + 1][j + 1].islei) //
右下
sum += 1;
}
bmatrix[i][j].roundlei = sum;
}
// 界面显示
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++) {
add(mybutton[i][j]);
}
}
void lvictory() // 游戏胜利方法
{
showStatus("恭喜你,成功过关!!!");
for (int ni = 0; ni < n; ni++)
for (int nj = 0; nj < n; nj++) {
mybutton[ni][nj].setBackground(Color.white);
if (bmatrix[ni][nj].islei)
mybutton[ni][nj].setIcon(imagelei);
else
mybutton[ni][nj].setIcon(null);
}
}
void lfail() // 游戏失败方法
{
for (int ni = 0; ni < n; ni++)
for (int nj = 0; nj < n; nj++)
if (bmatrix[ni][nj].islei) // 全部翻牌显示地雷
{
mybutton[ni][nj].setIcon(imagelei);
// mybutton[ni][nj].setBackground(Color.red);
}
showStatus("啊哦
你输了 !!");
}
class outinterface implements MouseListener {
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
// showStatus("点击了一下");
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
for(int i=0;i
for(int j=0;j
if(e.getSource()==mybutton[i][j])
if(e.getButton()==MouseEvent.BUTTON1)//点击鼠标左键
{
if(e.getClickCount()==1)
//单击事件
{
if(!bmatrix[i][j].isclick)
{
subsum-=1;
if(subsum<=ln)
//游戏胜利
lvictory();
}
if(bmatrix[i][j].islei)
//游戏失败
lfail();
else
//没有点到地雷
{
if(bmatrix[i][j].roundlei!=0)
mybutton[i][j].setText(Integer.toString(bmatrix[i][j].roundlei));
if(((i-1)>=0)&&((i+1)=0)&&((j+1)
&&(!bmatrix[i-1][j].islei)&&(!bmatrix[i-1][j+1].islei)
&&(!bmatrix[i][j-1].islei)&&(!bmatrix[i][j+1].islei)
&&(!bmatrix[i+1][j-1].islei)&&(!bmatrix[i+1][j].islei)&&(!bmatrix[i+1][j+1].islei))
{
if(!bmatrix[i-1][j-1].isclick)//计算剩余块数
subsum-=1;
if(!bmatrix[i-1][j].isclick)
subsum-=1;
if(!bmatrix[i-1][j+1].isclick)
subsum-=1;
if(!bmatrix[i][j-1].isclick)
subsum-=1;
if(!bmatrix[i][j+1].isclick)
subsum-=1;
if(!bmatrix[i+1][j-1].isclick)
subsum-=1;
if(!bmatrix[i+1][j].isclick)
subsum-=1;
if(!bmatrix[i+1][j+1].isclick)
subsum-=1;
bmatrix[i-1][j-1].isclick=true;
bmatrix[i-1][j].isclick=true;
bmatrix[i-1][j+1].isclick=true;
bmatrix[i][j-1].isclick=true;
bmatrix[i][j+1].isclick=true;
bmatrix[i+1][j-1].isclick=true;
bmatrix[i+1][j].isclick=true;
bmatrix[i+1][j+1].isclick=true;
mybutton[i-1][j-1].setBackground(clickcolor);
mybutton[i-1][j].setBackground(clickcolor);
mybutton[i-1][j+1].setBackground(clickcolor);
mybutton[i][j-1].setBackground(clickcolor);
mybutton[i][j+1].setBackground(clickcolor);
mybutton[i+1][j-1].setBackground(clickcolor);
mybutton[i+1][j].setBackground(clickcolor);
mybutton[i+1][j+1].setBackground(clickcolor);
if(bmatrix[i-1][j-1].roundlei!=0)
mybutton[i-1][j-1].setText(Integer.toString(bmatrix[i-1][j-1].roundlei));
if(bmatrix[i-1][j].roundlei!=0)
mybutton[i-1][j].setText(Integer.toString(bmatrix[i-1][j].roundlei));
if(bmatrix[i-1][j+1].roundlei!=0)
mybutton[i-1][j+1].setText(Integer.toString(bmatrix[i-1][j+1].roundlei));
if(bmatrix[i][j-1].roundlei!=0)
mybutton[i][j-1].setText(Integer.toString(bmatrix[i][j-1].roundlei));
if(bmatrix[i][j+1].roundlei!=0)
mybutton[i][j+1].setText(Integer.toString(bmatrix[i][j+1].roundlei));
if(bmatrix[i+1][j-1].roundlei!=0)
mybutton[i+1][j-1].setText(Integer.toString(bmatrix[i+1][j-1].roundlei));
if(bmatrix[i+1][j].roundlei!=0)
mybutton[i+1][j].setText(Integer.toString(bmatrix[i+1][j].roundlei));
if(bmatrix[i+1][j+1].roundlei!=0)
mybutton[i+1][j+1].setText(Integer.toString(bmatrix[i+1][j+1].roundlei));
}
mybutton[i][j].setBackground(clickcolor);
bmatrix[i][j].isclick=true;
//标志被鼠标点击
}
}
if(e.getClickCount()==2)
//双击事件
if(!bmatrix[i][j].islei&&bmatrix[i][j].isclick&&(bmatrix[i][j].roundlei!=0))//空白快无效
{
//自动翻开
int lsum=0;
if((i-1)>=0)
//统计周围被标记个数;
{
if((j-1)>=0&&bmatrix[i-1][j-1].isred)
lsum++;
if((j+1)
lsum++;
if(bmatrix[i-1][j].isred)
lsum++;
}
if((i+1)
{
if((j-1)>=0&&bmatrix[i+1][j-1].isred)
lsum++;
if((j+1)
lsum++;
if(bmatrix[i+1][j].isred)
lsum++;
}
if((j-1)>=0&&bmatrix[i][j-1].isred)
lsum++;
if((j+1)
lsum++;
if(bmatrix[i][j].roundlei==lsum)
//标记数等于显示的周围雷数
{
if((i-1)>=0)
{
if((j-1)>=0&&(!bmatrix[i-1][j-1].isred)&&(!bmatrix[i-1][j-1].isclick))
fanlei(i-1, j-1);
if((j+1)
fanlei(i-1, j+1);
if((!bmatrix[i-1][j].isred)&&(!bmatrix[i-1][j].isclick))
fanlei(i-1, j);
}
if((i+1)
{
if((j-1)>=0&&(!bmatrix[i+1][j-1].isred)&&(!bmatrix[i+1][j-1].isclick))
fanlei(i+1, j-1);
if((j+1)
fanlei(i+1, j+1);
if((!bmatrix[i+1][j].isred)&&(!bmatrix[i+1][j].isclick))
fanlei(i+1, j);
}
if((j-1)>=0&&(!bmatrix[i][j-1].isred)&&(!bmatrix[i][j-1].isclick))
fanlei(i, j-1);
if((j+1)
fanlei(i, j+1);
}
}
if(subsum<=ln)
//游戏胜利
lvictory();
}
else
if(e.getButton()==MouseEvent.BUTTON3)//点击鼠标右键
{
if(!bmatrix[i][j].isclick)
{
if(!bmatrix[i][j].isred)
{
bmatrix[i][j].isred=true;
mybutton[i][j].setIcon(imagered);
}
else{
bmatrix[i][j].isred=false;
mybutton[i][j].setIcon(null);
}
}
else
if(bmatrix[i][j].isred)
{
bmatrix[i][j].isred=false;
mybutton[i][j].setIcon(null);
}
}
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
void fanlei(int x, int y) // 翻雷方法
{
if (bmatrix[x][y].isclick) // 只翻没被翻过的雷
return;
if(bmatrix[x][y].islei)
lfail();
subsum--;
bmatrix[x][y].isclick = true;
mybutton[x][y].setBackground(clickcolor);
if (bmatrix[x][y].roundlei != 0)
mybutton[x][y].setText(Integer.toString(bmatrix[x][y].roundlei));
}
}
}