package com.xz.sl;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane; public class Saolei extends JFrame{ final int ROW = 20;
final int COL = 20;
final int LEI = 30;
JButton[][] buttons = new JButton[ROW][COL];
int[][] counts = new int[ROW][COL];
final int LCODE = 11; //雷的编码 Container container = new Container(); public Saolei() {
init(); } private void init() {
JButton restBtn = new JButton("重来");
restBtn.setOpaque(true);
restBtn.setBackground(Color.PINK);
restBtn.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
for(int i=0;i<ROW;i++) {
for(int j=0;j<COL;j++) {
buttons[i][j].setText("");
buttons[i][j].setEnabled(true);
buttons[i][j].setBackground(Color.YELLOW);
counts[i][j] = 0; }
}
mailei();
jslsl();
}
}); setLayout(new BorderLayout());
add(restBtn,BorderLayout.NORTH);
add(container,BorderLayout.CENTER);
container.setLayout(new GridLayout(ROW,COL));
for(int i=0;i<ROW;i++) {
for(int j=0;j<COL;j++) {
JButton button = new JButton();
button.setMargin(new Insets(0, 0, 0, 0));
button.setBackground(Color.YELLOW);
button.setOpaque(true);
buttons[i][j] = button;
button.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
JButton button = (JButton) e.getSource();
if(button.equals(restBtn)) { }else {
int count = 0;
for(int i=0;i<ROW;i++) {
for(int j=0;j<COL;j++) {
if(button.equals(buttons[i][j])) {
count = counts[i][j];
//踩到雷了
if(count == LEI) {
clcl();
}else {
openCell(i,j);
checkWin();
}
return;
}
}
}
}
} private void checkWin() {
for(int i=0;i<ROW;i++) {
for(int j=0;j<COL;j++) {
//说明还没有赢
if(buttons[i][j].isEnabled() == true && counts[i][j] != LEI) {
return;
}
}
} JOptionPane.showMessageDialog(container, "恭喜您赢了..."); } private void openCell(int i,int j ) { //如果格子已经打开,直接返回
if(buttons[i][j].isEnabled() == false) {
return ;
} buttons[i][j].setText(counts[i][j]+"");
buttons[i][j].setEnabled(false);
buttons[i][j].setBackground(Color.CYAN); if(counts[i][j] == 0) {
//左上角
if(i > 0 && j > 0 && counts[i-1][j-1] != LEI) {
openCell(i-1, j-1);
} if(i > 0 && j > 0 && counts[i-1][j] != LEI) {
openCell(i-1, j);
} if(i > 0 && j < 19 && counts[i-1][j+1] != LEI) {
openCell(i-1, j+1);
} if(i > 0 && j > 0 && counts[i][j-1] != LEI) {
openCell(i, j-1);
} if(i > 0 && j < 19 && counts[i][j+1] != LEI) {
openCell(i, j+1);
} if(i < 19 && j > 0 && counts[i+1][j-1] != LEI) {
openCell(i+1, j-1);
} if(i < 19 && j > 0 && counts[i+1][j] != LEI) {
openCell(i+1, j);
} if(i < 19 && j < 19 && counts[i+1][j+1] != LEI) {
openCell(i+1, j+1);
}
}else {
buttons[i][j].setText(counts[i][j]+"");
}
} });
container.add(button);
}
}
mailei();
//计算周边的雷的数量
jslsl(); setVisible(true);
setTitle("扫雷游戏");
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(600,700);
} private void jslsl() {
for(int i=0;i<ROW;i++) {
for(int j=0;j<COL;j++) {
int count = 0;
if(counts[i][j] == LEI) {
continue;
} //左上角
if(i > 0 && j > 0 && counts[i-1][j-1] == LEI) {
count++;
} if(i > 0 && j > 0 && counts[i-1][j] == LEI) {
count++;
} if(i > 0 && j < 19 && counts[i-1][j+1] == LEI) {
count++;
} if(i > 0 && j > 0 && counts[i][j-1] == LEI) {
count++;
} if(i > 0 && j < 19 && counts[i][j+1] == LEI) {
count++;
} if(i < 19 && j > 0 && counts[i+1][j-1] == LEI) {
count++;
} if(i < 19 && j > 0 && counts[i+1][j] == LEI) {
count++;
} if(i < 19 && j < 19 && counts[i+1][j+1] == LEI) {
count++;
} counts[i][j] = count;
// buttons[i][j].setText(counts[i][j]+" "); }
}
} private void clcl() {
for(int i=0;i<ROW;i++) {
for(int j=0;j<COL;j++) {
int c = counts[i][j];
if(c == LEI) {
buttons[i][j].setText("X");
buttons[i][j].setBackground(Color.RED);
buttons[i][j].setEnabled(false);
}else {
buttons[i][j].setText(c+"");
buttons[i][j].setEnabled(false);
}
}
}
} private void mailei() {
Random random = new Random();
int randRow,randCol;
for(int i=0;i<LEI;i++) {
randRow = random.nextInt(ROW);
randCol = random.nextInt(COL);
if(counts[randRow][randCol] == LEI) {
i--;
}else {
counts[randRow][randCol] = LEI;
// buttons[randRow][randCol].setText(LEI+"");
}
}
} public static void main(String[] args) {
new Saolei();
} }

以上代码纯属练习用,没有经过任何的封装,有兴趣的小伙伴可以自行封装一下哦。

Java版的扫雷游戏源码的更多相关文章

  1. 基于jQuery经典扫雷游戏源码

    分享一款基于jQuery经典扫雷游戏源码.这是一款网页版扫雷小游戏特效代码下载.效果图如下: 在线预览   源码下载 实现的代码. html代码: <center> <h1>j ...

  2. html5 canvas简易版捕鱼达人游戏源码

    插件描述:html5利用canvas写的一个js版本的捕鱼,有积分统计,鱼可以全方位移动,炮会跟着鼠标移动,第一次打开需要鼠标移出背景图,再移入的时候就可以控制炮的转动,因为是用的mouseover触 ...

  3. ios版弹珠游戏源码

    这个是我们比较喜欢玩的一直小游戏的,ios版弹珠游戏源码,该游戏源码来着IOS教程网其他网友提供上传的,大家可以了解一下吧. nore_js_op>     <ignore_js_op&g ...

  4. Android版的疯狂猜图游戏源码完整版分享

    这个游戏源码是在安装教程网那么分享过来的,Android版的疯狂猜图游戏源码完整版分享,也是本人之前很早以前发的一款游戏源码的,大家如果想了解一下,可以看看吧,不说多了,上一个图先吧.   > ...

  5. Java写的斗地主游戏源码

    源码下载在最后 我们的前年的课设要求做一个斗地主程序,当时正在愁如何做界面,当时刚好在学习C#,于是就用C#完成了这个程序.一方面,当时我C#功底还很差(其实现在也不怎么样),很多地方用了“笨办法”, ...

  6. jQuery网页版五子棋小游戏源码下载

    体验效果:http://hovertree.com/texiao/game/4/ 网页五子棋源代码: <!DOCTYPE html> <html> <head> & ...

  7. Java Swing打猎射击游戏源码

    代码如下 <font size="3">package Game; import java.awt.Graphics; import java.awt.Image; i ...

  8. HTML5小游戏源码收藏

    html5魅族创意的贪食蛇游戏源码下载 html5网页版打砖块小游戏源码下载 html5 3D立体魔方小游戏源码下载 html5网页版飞机躲避游戏源码下载 html5三国人物连连看游戏源码下载 js ...

  9. android版猜拳游戏源码分享

    android版猜拳游戏源码分享安卓版猜拳游戏源码,该文件中带有安装测试包的,这个游戏源码比较简单的,现在有两个代码,一个自定义VIEW的,一个就是普通的imageView图片,游戏非常适合一些新手的 ...

随机推荐

  1. POj1860(floyd+正权回路)

    题目传送门 题意:有多种汇币,汇币之间可以交换,这需要手续费,当你用100A币交换B币时,A到B的汇率是29.75,手续费是0.39,那么你可以得到(100 - 0.39) * 29.75 = 296 ...

  2. MyBatis工程搭建&MyBatis实现Mapper配置查询

    一.MyMyBatis工程搭建 新建Maven项目:mybatis-demo 准备数据源 1 # 删除mybatis_demo数据库 2 drop database if exists mybatis ...

  3. 谷歌SRE运维模式解读

    谷歌SRE运维模式解读 前面我和你分享了一些关于运维组织架构和协作模式转型的内容,为了便于我们更加全面地了解先进的运维模式,今天我们再来谈一下谷歌的SRE(Site Reliability Engin ...

  4. 全网最详细的Linux命令系列-nl命令

    nl命令在linux系统中用来计算文件中行号.nl 可以将输出的文件内容自动的加上行号!其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等 ...

  5. AI数学基础之:确定图灵机和非确定图灵机

    目录 简介 图灵机 图灵机的缺点 等效图灵机 确定图灵机 非确定图灵机 简介 图灵机是由艾伦·麦席森·图灵在1936年描述的一种抽象机器,它是人们使用纸笔进行数学运算的过程的抽象,它肯定了计算机实现的 ...

  6. Web协议详解与抓包实战,高效解决网络难题

    无论你是前后端工程师,还是运维测试,如果想面试更高的职位,或者要站在更高的角度去理解技术业务架构,并能在问题出现时快速.高效地解决问题,Web 协议一定是你绕不过去的一道坎. 旨在帮助你对各种常用 W ...

  7. spieces-in-pieces动画编辑器

    前言: 制作灵感来源于 http://species-in-pieces.com/ 这个网站,此网站作者是来自阿姆斯特丹的设计师 Bryan James,其借用纯CSS技术表现出30种濒危动物的碎片拼 ...

  8. Digit Generator UVA - 1583

    ​ For a positive integer N, the digit-sum of N is defined as the sum of N itself and its digits. Whe ...

  9. Day14_83_反射机制获取某个特定属性的各部分

    反射机制获取某个特定属性的各部分 * 通过属性名(变量名)来获取一个属性整体 例如: Field userNoField=c.getDeclaredField("userNo"); ...

  10. Sql server注入一些tips

    sql server环境测试: 几个特性: 1.sql server兼容性可以说是最差的. 举例: select x from y where id=1 字符串查询 select x from y w ...