学易优
始于2008年专业教育平台
  • 地区

免费发布课程

学易优网
咨询热线:400-099-6980
学易优网
了解更多 快扫我吧

首页 > 备考指南 > 职业技能 > 正文

基于Java的扫雷小程序 文  /风飞扬2017年02月28日 14:340

摘要 Java能实现扫雷吗?of course!一起来看一下吧。

《扫雷》是一款大众类的益智小游戏,于1992年发行。游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷。相信大家刚接触电脑的时候都有玩过。那么在java中,如何去实习扫雷呢?其实很简单,下面一起来看一下吧!

package XJ.mine;

import java.awt.*;

import java.awt.event.*;

import java.util.*;

import javax.swing.*;

 

public class MineFrame extends JFrame implements ActionListener {

private static final int MINE = 9;

static Random r = new Random();

protected int height, width, mines, remain, board[][];

protected JButton btns[][];

 

public MineFrame(int height, int width, int mines) {

super("Mime ver 1.0 by XJ");

this.height = height; this.width = width; this.mines = mines;

remain = height * width - mines;

board = new int[height + 2][width + 2];

placeMime();

btns = new JButton[height][width];

setLayout(new GridLayout(width, height));

for (int i = 0; i < height; i++)

for (int j = 0; j < width; j++) {

add(btns[i][j] = new JButton());

btns[i][j].addActionListener(this);

}

this.setSize(height * 50 + 90, width * 50 + 25);

this.setVisible(true);

}

 

private void placeMime() {

for (int i = 0; i < mines;) {

int x = r.nextInt(height) + 1;

int y = r.nextInt(width) + 1;

if (board[x][y] == 0) {

++i;

board[x][y] = MINE;

}

}

for (int i = 1; i <= height; i++)

for (int j = 1; j <= width; j++)

if (board[i][j] != MINE) 

board[i][j] = count8(i, j);

}

 

private int count8(int h, int w) {

int s = 0;

for (int i = h - 1; i <= h + 1; i++)

for (int j = w - 1; j <= w + 1; j++)

if (board[i][j] == MINE)

++s;

return s;

}

 

public static void main(String[] args) {

new MineFrame(10, 10, 20);

}

 

public void actionPerformed(ActionEvent e) {

if (e.getSource() instanceof JButton) {

JButton curButton = (JButton) (e.getSource());

int x = 0, y = 0;

for (int i = 0; i < height; i++)

for (int j = 0; j < width; j++)

if (btns[i][j] == curButton) {

x = i + 1; y = j + 1;

}

if (board[x][y] == MINE)

JOptionPane.showMessageDialog(null, "Game over!");

else if (board[x][y] > 0) {

--remain;

curButton.setText(board[x][y] + "");

curButton.setEnabled(false);

} else expand(x, y);

if (remain == 0) // 判断胜利

JOptionPane.showMessageDialog(null, "Win");

}

}

    

private void expand(int x, int y) {//0的扩搜索

--remain;

if (board[x][y] != 0) {

btns[x - 1][y - 1].setText(board[x][y] + "");

btns[x - 1][y - 1].setEnabled(false);

return;

}

btns[x - 1][y - 1].setText(board[x][y] + "");

btns[x - 1][y - 1].setEnabled(false);

int h = x, w = y;

for (int i = h - 1; i <= h + 1; i++)

for (int j = w - 1; j <= w + 1; j++)

if (ok(i, j) && btns[i - 1][j - 1].isEnabled())

expand(i, j);

}

 

private boolean ok(int x, int y) {

return x <= height && x >= 1 && y <= width && y >= 1;

}

}

这个世界上大部分事物都是可以用计算机语言表达出来的,这就是编程语言的魅力。你心动了吗?趁着年轻为何不去拼一把,没有基础不可怕,可怕的是没有基础而又不去学习,还在犹豫什么,打开微信关注我们的官方微信公众号:xueyeyou.你可以报名参加我们的培训,也可以与我们进行互动学习更多的编程知识。

推荐阅读:

Java模拟中国象棋控制台

Java模拟中国福利彩票双色球中奖概率

Java图搜索解决词语接龙问题



阅读上一篇:同等学力考研必知的50个问题汇总

阅读下一篇:奥地利留学奖学金介绍


发表评论

暂无评论

在线投稿

亲,请先登录呦~
关于我们
关于学易优
企业理念
网站地图
联系我们
报名指南
求学登记
报名流程
帮我选课
付款方式
招生合作
机构合作
会员服务
网站加盟
广告服务
学员专享
专享礼遇
积分制度
客服中心
咨询热线
400-099-6980
周一至周日:
8:00-22:00