java扫雷游戏改进_java扫雷改进版

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));

}

}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值