`
shenjun134
  • 浏览: 16950 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

扫雷算法

    博客分类:
  • java
 
阅读更多
package com.common;

public class Constant {
	public static final String MINE = "*";

	public static int PANEL_SIZE = 10;

	public static int MINE_SIZE = 10;
	
	public static int LEVEL_1 = 1;
	
	public static int LEVEL_2 = 3;
	
	public static int LEVEL_3 = 9;
}

package com.sweep;

import java.util.Random;

import com.common.Constant;

public class Sweep {
	private static Random ran = new Random();
	private static String[][] PANEL = null;

	private static final String MINE = Constant.MINE;

	private static int PANEL_SIZE = Constant.MINE_SIZE;

	private static int MINE_SIZE = Constant.MINE_SIZE;

	public static void initMINE() {
		int totalTimes = MINE_SIZE;
		PANEL = new String[PANEL_SIZE][PANEL_SIZE];

		while (totalTimes > 0) {
			int row = ran.nextInt(PANEL_SIZE);
			int erect = ran.nextInt(PANEL_SIZE);
			if (null == PANEL[row][erect]) {
				PANEL[row][erect] = MINE;
				totalTimes--;
			}
		}
	}

	public static void fillNum() {
		for (int i = 0; i < PANEL_SIZE; i++) {
			for (int j = 0; j < PANEL_SIZE; j++) {
				if (MINE.equals(PANEL[i][j])) {
					if ((j - 1 >= 0)) {
						if (checkNum(PANEL[i][j - 1])) {
							PANEL[i][j - 1] = ""
									+ (Integer.valueOf(PANEL[i][j - 1]) + 1);
						} else if (!MINE.equals(PANEL[i][j - 1])) {
							PANEL[i][j - 1] = "1";
						}

					}

					if ((j + 1 < PANEL_SIZE)) {
						if (checkNum(PANEL[i][j + 1])) {
							PANEL[i][j + 1] = ""
									+ (Integer.valueOf(PANEL[i][j + 1]) + 1);
						} else if (!MINE.equals(PANEL[i][j + 1])) {
							PANEL[i][j + 1] = "1";
						}

					}

					if ((i - 1 >= 0) && (j - 1 >= 0)) {
						if (checkNum(PANEL[i - 1][j - 1])) {
							PANEL[i - 1][j - 1] = ""
									+ (Integer.valueOf(PANEL[i - 1][j - 1]) + 1);
						} else if (!MINE.equals(PANEL[i - 1][j - 1])) {
							PANEL[i - 1][j - 1] = "1";
						}

					}

					if ((i - 1 >= 0)) {
						if (checkNum(PANEL[i - 1][j])) {
							PANEL[i - 1][j] = ""
									+ (Integer.valueOf(PANEL[i - 1][j]) + 1);
						} else if (!MINE.equals(PANEL[i - 1][j])) {
							PANEL[i - 1][j] = "1";
						}

					}

					if ((i - 1 >= 0) && (j + 1 < PANEL_SIZE)) {
						if (checkNum(PANEL[i - 1][j + 1])) {
							PANEL[i - 1][j + 1] = ""
									+ (Integer.valueOf(PANEL[i - 1][j + 1]) + 1);
						} else if (!MINE.equals(PANEL[i - 1][j + 1])) {
							PANEL[i - 1][j + 1] = "1";
						}

					}

					if ((i + 1 < PANEL_SIZE) && (j - 1 >= 0)) {
						if (checkNum(PANEL[i + 1][j - 1])) {
							PANEL[i + 1][j - 1] = ""
									+ (Integer.valueOf(PANEL[i + 1][j - 1]) + 1);
						} else if (!MINE.equals(PANEL[i + 1][j - 1])) {
							PANEL[i + 1][j - 1] = "1";
						}

					}

					if ((i + 1 < PANEL_SIZE)) {
						if (checkNum(PANEL[i + 1][j])) {
							PANEL[i + 1][j] = ""
									+ (Integer.valueOf(PANEL[i + 1][j]) + 1);
						} else if (!MINE.equals(PANEL[i + 1][j])) {
							PANEL[i + 1][j] = "1";
						}

					}

					if ((i + 1 < PANEL_SIZE) && (j + 1 < PANEL_SIZE)) {
						if (checkNum(PANEL[i + 1][j + 1])) {
							PANEL[i + 1][j + 1] = ""
									+ (Integer.valueOf(PANEL[i + 1][j + 1]) + 1);
						} else if (!MINE.equals(PANEL[i + 1][j + 1])) {
							PANEL[i + 1][j + 1] = "1";
						}

					}

				}
			}
		}
	}

	public static void print() {
		String flag = "|";
		for (int i = 0; i < PANEL_SIZE; i++) {
			for (int j = 0; j < PANEL_SIZE; j++) {
				if (null != PANEL[i][j]) {
					System.out.print(flag + PANEL[i][j]);
				} else {
					System.out.print(flag + " ");
				}
			}
			System.out.print(flag);
			System.out.println();
		}
	}

	private static boolean checkNum(String value) {
		if (null == value || MINE.equals(value))
			return false;
		return true;
	}

	public static void generate() {
		initMINE();
		fillNum();
		print();
	}

	public static void main(String[] args) {
		generate();
	}
}
分享到:
评论

相关推荐

    基于Unity扫雷算法实现

    基于Unity扫雷算法实现,包含怎样布雷,消除雷,遍历雷区等算法实现,可以直接导入Unity运行,可以参考学习算法的实现过程。

    扫雷算法代码

    一个非常棒的,完整的,可以运行的扫雷算法。

    扫雷算法C#语言完整版

    本人在课堂作业写的一个扫雷算法程序,调试运行正常结果正确 是用C#语言写的,分享出来供大家参考 ^_^ 希望感兴趣的朋友可以提出意见共同讨论~ hzher@qq.com

    历史上最经典的扫雷算法

    这个是布雷算法,是扫雷算法中的第一个,以后将逐步发布,游戏已经在测试中,所有算法都非常经典。敬请恭候!

    [毕业设计]智能扫雷算法小程序.zip

    [毕业设计]智能扫雷算法小程序

    [毕业设计]智能扫雷算法研究小程序.zip

    [毕业设计]智能扫雷算法研究小程序

    扫雷算法,vc6.0程序

    无聊时写的扫雷分析程序,可依据当前状态分析出每个位置的雷的概率,主要是集合算法。懒的做界面,对算法感兴趣的可下载。

    游戏扫雷的Java算法

    游戏扫雷的Java算法,主要可以实现布雷数、统计周围存在的雷数

    吉林大学数据结构课设-自动扫雷算法

    本资源是本人通过真实代码,只设计了自动扫雷的核心代码,同时附带本次课题的题目要求以及扫雷的框架程序!!!具有一定参考价值!

    java 扫雷源码 递归算法

    一个用JAVA编写的扫雷程序,原创! 可以输入界面的行列数和雷数,此程序的精髓在打开一个不是雷而且周围没有雷的格子时,用到了递归的思想。

    扫雷的算法

    一个挺好的扫雷算法,,,希望能够给大家带来帮助。辛苦的分享

    扫雷游戏算法- 扫雷是什么鬼?扫雷里包含什么算法?.mp4

    扫雷游戏算法- 扫雷是什么鬼?扫雷里包含什么算法?.mp4

    自动扫雷程序

    总的来说,JAVA实现的自动扫雷程序展示了计算机科学在游戏逻辑、算法设计和人机交互等方面的应用,是学习和研究编程思维的好案例。通过分析和理解这样的程序,不仅可以提升编程技能,也能增强逻辑分析能力。

    windows经典扫雷游戏Java版

    【Windows经典扫雷游戏Java版】是一款基于Java编程语言实现的扫雷游戏,它复刻了我们熟悉的Windows操作系统内置的扫雷游戏体验。这款游戏的主要特点包括用户自定义难度、计时功能以及独特的求救机制,使得游戏更具...

    如何让Python实现自动扫雷

    扫雷算法 这篇文章主要介绍了如何基于Python实现自动扫雷,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 原创文章 88获赞 60访问量 8万+ 关注

    delphi 扫雷 带源代码 详细解说 图片 大致算法 简单版

    **三、扫雷算法** 1. **邻居计算**:算法的核心部分在于计算每个格子周围8个邻居的雷数。这可以通过索引计算或使用二维数组的邻接元素来实现。 2. **递归展开**:如果某个格子周围没有雷,程序可以自动展开其相邻的...

    Delphi 高级扫雷程序.rar

    Delphi 高级扫雷程序,界面和功能和Windows自带的扫雷游戏非常相似,不过功能方面就不太相同了,带声音和帮助文件。。。。Function 程序的主要代码部分,是程序的主体部分,在运用四连通算法进行展开区域时使用到的...

    C# .net 扫雷游戏 源代码

    1. **递归扫雷算法**:这种算法用于确定一个安全单元格周围的雷数。当玩家点击一个空格时,程序会递归地检查其相邻的九个单元格(如果在边缘则少于九个),并递归地处理这些相邻单元格,直到所有非雷单元格都被标记...

    一个完全仿做的WIN扫雷游戏,还有新增的自定义功能

    首先,让我们来看看游戏的基础——扫雷算法。扫雷的核心是生成随机的雷区布局。在原版Windows扫雷中,雷区由一定数量的单元格组成,每个单元格可能是雷或安全区域。生成雷区时,开发者会先确定雷的数量,然后在不...

    java版 扫雷游戏

    模拟windows上的扫雷游戏,基本实现,提供源码,扫雷算法,定时器使用,swing组件.........

Global site tag (gtag.js) - Google Analytics