代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
扫雷
作者:
步山
/ 发布于
2014/11/10
/
387
import java.awt.Color; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; public class MineDemo extends JFrame{ /** * */ private static final long serialVersionUID = 1L; JButton Mine_Button[][] = new JButton[15][15]; int[][] mine; public MineDemo() { InitFrame(); } private void InitFrame() { this.setLayout(new GridLayout(15,15)); this.setBounds(100,100,733,600);//设置在屏幕出现在位置和它的高度 this.setTitle("扫雷"); this.setVisible(true); } //布置雷区矩阵 public void InitMine() { mine=new int[15][15];//定义一个二维数组 int Mine_count=(int)(15*15/7);//布置32个雷 //让数组里的每一个都为零 for(int i=0;i<15;i++) { for(int j=0;j<15;j++) { mine[i][j]=0; } } for (int i = 0; i < Mine_count; i++) { // 随机产生一个坐标 int x = (int) (Math.random() * 15); int y = (int) (Math.random() * 15); // 如果这个坐标是雷,循环次数加1 if (mine[x][y] == -1) { --i; } else {// 否则把这个位置设为雷 mine[x][y] = -1; } // 导致周围按钮的数字加1 for (int j = -1; j <= 1; j++) {//这个代表行 for (int k = -1; k <= 1; k++) {//这个是列 if (x + j >= 0 && y + k >= 0 && x + j < 15 && y + k < 15) {//判断是否越界 if (mine[x + j][y + k] != -1) {// 如果不是雷的话,加1 ++mine[x + j][y + k]; } } } } } for(int i=0;i<15;i++) { for(int j=0;j<15;j++) { System.out.println(mine[i][j]); } } } //下面具体来实现相应的按钮 public void InitButton() { //加入各个按钮 //声明一个按钮 for(int i=0;i<15;i++) { for(int j=0;j<15;j++) { Mine_Button[i][j]=new JButton(); Mine_Button[i][j].setName(i+":"+j); Mine_Button[i][j].setBackground(Color.white); Mine_Button[i][j].addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { JButton button=(JButton)e.getSource(); String name=button.getName(); String[] spliteStr=name.split(":"); int i=Integer.parseInt(spliteStr[0]); int j=Integer.parseInt(spliteStr[1]); findMine(i,j); } }); this.add(Mine_Button[i][j]); } InitMine(); } //布完后开始安雷 } public void findMine(int i, int j) { if(mine[i][j]==-1) { showmine(); } else if(mine[i][j]>0) { Mine_Button[i][j].setText(mine[i][j]+""); } else if(mine[i][j]==0) { Mine_Button[i][j].setText(mine[i][j]+""); mine[i][j]=-6; for(int m=-1;m<=1;m++) { for(int n=-1;n<=1;n++) { if(i+m>=0&i+m<15&j+n>=0&j+n<15) { findMine(i+m,j+n); } } } } } public void showmine() { for(int i=0;i<15;i++) { for(int j=0;j<15;j++) { if(mine[i][j]==-1) { Mine_Button[i][j].setBackground(Color.black);//只要用户点中一个雷,就会显示全部的雷 } } } } public static void main(String[] args) { MineDemo mine=new MineDemo(); mine.InitButton(); } }
试试其它关键字
扫雷
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
步山
贡献的其它代码
(
75
)
.
表.视图.函数.存储过程.触发器.主键.外键.约束.规则:
.
索引
.
SqlServer2005数据库字典表结构
.
上传并给图片加水印
.
从一个目录下提取所有的源文件复制到另一个目录下
.
为按钮添加对话框
.
监听浏览器窗口关闭
.
平滑滚动返回顶部
.
SESSION管理类库
.
麻将胡牌听版判断
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3