`
xiaoyao1052
  • 浏览: 2057 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

简单的扫雷统计的程序

阅读更多
/**
 * 	玩过扫雷游的朋友都知道,该游戏的目标是找出一个n*m矩阵内的所有的地雷
 * ,在本题中,你需要为每一个单元格统计出它周围地雷的个数,每个单元格最多有8个相邻单元格,如下图,4*4 的格子里,
 * 用“*”表示雷,用“^” 表示没有雷。
* ^ ^ ^ * ^ ^ ^
* ^ * * * * ^ ^
^ * ^ ^ * * ^ ^
^ ^ * * ^ * * ^
^ * ^ ^ * * ^ ^
* ^ ^ ^ * ^ ^ ^
^ ^ * * ^ * * ^
^ * ^ ^ * * ^ ^
 计算后的输出结果为:
* 3 2 4 * 3 1 0 
* 4 * * * * 2 0 
2 * 5 6 * * 4 1 
2 3 * * 6 * * 1 
2 * 3 4 * * 3 1 
* 3 3 4 * 5 3 1 
2 3 * * 5 * * 1 
1 * 3 3 * * 3 1 
 * @author user
 *
 */
import java.util.*;

class Point {
	private int x;

	private int y;

	private int value = 0;

	private String symbol;

	public String getSymbol() {
		return symbol;
	}

	public void setSymbol(String symbol) {
		this.symbol = symbol;
	}

	public Point() {
	}

	public Point(int x, int y) {
		setX(x);
		setY(y);
	}

	public Point(int x, int y, int value) {
		this(x, y);
		setValue(value);
	}

	public Point(int x, int y, String symbol) {
		this(x, y);
		setSymbol(symbol);
	}

	public int getValue() {
		return value;
	}

	public void setValue(int value) {
		this.value = value;
	}

	public int getX() {
		return x;
	}

	public void setX(int x) {
		this.x = x;
	}

	public int getY() {
		return y;
	}

	public void setY(int y) {
		this.y = y;
	}

	/**
	 * 判断该点左侧是否有雷
	 * @param ps
	 * @return
	 */
	public int leftRow(Point[][] ps) {
		int value = 0;
		if (this.getX()>0) {	//如果该点内容不是“*”并且不在该行的第一个位置,则判断左侧点的内容
			if (ps[this.getY()][this.getX() - 1].getSymbol().equals("*")) {
				value++;		//如果左侧点内容为“*”,则计数器加1
			} else {
				return value;
			}
		}
		else
		{
			return value;		//如果该点的x值为0,则直接返回计数器为0;
		}
		return value;
	}
	/**
	 * 判断该点右侧是否有雷
	 * @param ps
	 * @return
	 */
	public int rightRow(Point[][] ps) {
		int value = 0;
		if (this.getX()<ps[this.getY()].length-1) {
			if (ps[this.getY()][this.getX() + 1].getSymbol().equals("*")) {
				value++;
			} else {
				return value;
			}
		}
		else
		{
			return value;
		}
		return value;
	}
	/**
	 * 判断该点上方是否有雷
	 * @param ps
	 * @return
	 */
	public int upCol(Point[][] ps) {
		int value = 0;
		if (this.getY()>0) {
			if (ps[this.getY()-1][this.getX()].getSymbol().equals("*")) {
				value++;
			} else {
				return value;
			}
			
		}
		else
		{
			return value;
		}
		return value;
	}
	/**
	 * 判断该点下方是否有雷
	 * @param ps
	 * @return
	 */
	public int downCol(Point[][] ps) {
		int value = 0;
		if (this.getY()<ps.length-1) {
			if (ps[this.getY()+1][this.getX()].getSymbol().equals("*")) {
				value++;
			} else {
				return value;
			}
		}
		else
		{
			return value;
		}
		return value;
	}
	/**
	 * 判断该点左上方是否有雷
	 * @param ps
	 * @return
	 */
	public int upLeftRow(Point[][] ps)
	{
		int value = 0;
		if (this.getY()>0) {
			value= ps[this.getY()-1][this.getX()].leftRow(ps);
		}
		else
		{
			return value;
		}
		return value;
	}
	/**
	 * 判断该点右上方是否有雷
	 * @param ps
	 * @return
	 */
	public int upRightRow(Point[][] ps)
	{
		int value = 0;
		if (this.getY()>0) {
			value= ps[this.getY()-1][this.getX()].rightRow(ps);
		}
		else
		{
			return value;
		}
		return value;
	}
	/**
	 * 判断该点左下方是否有雷
	 * @param ps
	 * @return
	 */
	public int downLeftRow(Point[][] ps)
	{
		int value = 0;
		if (this.getY()<ps.length-1) {
			value= ps[this.getY()+1][this.getX()].leftRow(ps);
		}
		else
		{
			return value;
		}
		return value;
	}
	/**
	 * 判断该点右下方是否有雷
	 * @param ps
	 * @return
	 */
	public int downRightRow(Point[][] ps)
	{
		int value = 0;
		if (this.getY()<ps.length-1) {
			value= ps[this.getY()+1][this.getX()].rightRow(ps);
		}
		else
		{
			return value;
		}
		return value;
	}
}

public class Test03 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sca = new Scanner(System.in);
		System.out.println("请输入扫雷游戏的行数和列数:");
		int row = sca.nextInt();
		int col = sca.nextInt();
		System.out.println("请输入雷区:雷用'*'表示,非雷用'^'表示,中间用空格隔开:");
		Point[][] p = new Point[row][];
		for (int i = 0; i < p.length; i++) {
			p[i] = new Point[col];
			for (int j = 0; j < p[i].length; j++) {
				p[i][j] = new Point(j, i, sca.next());
			}
		}
		System.out.println("您输入的扫雷游戏判定结果如下:");
		for (int i = 0; i < p.length; i++) {
			for (int j = 0; j < p[i].length; j++) {
			
				if(p[i][j].getSymbol().equals("*"))
				{
					System.out.print(p[i][j].getSymbol()+" ");
					continue;
				}
				else
				{
					System.out.print(p[i][j].leftRow(p)+p[i][j].rightRow(p)+p[i][j].upCol(p)+p[i][j].downCol(p)+p[i][j].upLeftRow(p)+p[i][j].upRightRow(p)+p[i][j].downLeftRow(p)+p[i][j].downRightRow(p)+" ");
				}
			}
			System.out.println();
		}

	}

}
分享到:
评论

相关推荐

    26个经典微信小程序实例源码大全下载.zip

    微信小程序版的扫雷(挖金子).zip 微信小程序版简易计算器demo.zip 微信小程序版聊天室 .zip 微信小程序的掘金信息流 .zip 微信小程序的Flex布局demo.zip 微信小程序开发mapdemo,地图导航、marker标注 .zip 微信小...

    《Visual Basic 2008应用程序开发实例精讲》全书所有实例程序源代码

    第15章 简易绘图工具的设计312 15.1 实例功能说明312 15.2 设计思路与相关技术313 15.2.1 主要设计思路313 15.2.2 相关技术点拨313 15.3 程序实现与代码319 15.4 实例总结324 第16章 制作自己的看图工具325 16.1 ...

    关于C的精粹包含至少200个C语言小程序

    040 文件的字数统计程序 041 学生成绩管理程序 第二部分 数据结构篇 042 插入排序 043 希尔排序 044 冒泡排序 045 快速排序 046 选择排序 047 堆排序 048 归并排序 049 基数排序 050 二叉搜索树操作 ...

    C语言程序源代码(大集合).rar

    040 文件的字数统计程序 041 学生成绩管理程序 第二部分 数据结构篇 042 插入排序 043 希尔排序 044 冒泡排序 045 快速排序 046 选择排序 047 堆排序 048 归并排序 049 基数排序 050 二叉搜索树操作 ...

    C语言实现简易版扫雷的完整过程

    用C语言实现简易版扫雷。 二、基本流程 1.菜单界面。 2.创建地图 (两个地图)。 3.初始化地图。 4.打印地图。 5.程序读取玩家输入的要翻开位置的坐标,并校验。 6.如果不是地雷,统计当前位置周围雷的个数, 并显示...

    200个经典C程序【源码】

    040 文件的字数统计程序 041 学生成绩管理程序 第二部分 数据结构篇 042 插入排序 043 希尔排序 044 冒泡排序 045 快速排序 046 选择排序 047 堆排序 048 归并排序 049 基数排序 050 二叉搜索树操作 ...

    Visual C++ 程序开发范例宝典 源码 光盘 part2

    3.9 图像管理 cc实例109 管理计算机内图片文件的程序 cc实例110 提取并保存应用程序图标 3.10 图片动画 cc实例111 利用图片制作屏幕保护程序 cc实例112 图片动画 3.11 简单游戏设计 cc实例113 拼图...

    Visual C++程序开发范例宝典(PDF扫描版).part2

     cc实例202 修改“扫雷”游戏的设置   7.5 应用软件设置   cc实例203 设置Wordc2000文档及图片的保存路径   cc实例204 更改Photoshop安装时的登记信息  第8章 数据库技术   8.1 连接数据库   cc...

    VB2008应用程序开发实例精讲(光盘文件)

    第15章 简易绘图工具的设计312 15.1 实例功能说明312 15.2 设计思路与相关技术313 15.2.1 主要设计思路313 15.2.2 相关技术点拨313 15.3 程序实现与代码319 15.4 实例总结324 第16章 制作自己的看图工具325 16.1 ...

    Visual C++程序开发范例宝典(PDF扫描版).part3

     cc实例202 修改“扫雷”游戏的设置   7.5 应用软件设置   cc实例203 设置Wordc2000文档及图片的保存路径   cc实例204 更改Photoshop安装时的登记信息  第8章 数据库技术   8.1 连接数据库   cc...

    经典的C程序220案列

    040 文件的字数统计程序 041 学生成绩管理程序 第二部分 数据结构篇 042 插入排序 043 希尔排序 044 冒泡排序 045 快速排序 046 选择排序 047 堆排序 048 归并排序 049 基数排序 050 二叉搜索树操作 ...

    200个经典C程序源码小游戏

    040 文件的字数统计程序 041 学生成绩管理程序 第二部分 数据结构篇 042 插入排序 043 希尔排序 044 冒泡排序 045 快速排序 046 选择排序 047 堆排序 048 归并排序 049 基数排序 ...

    Visual C++程序开发范例宝典(光盘) 第四部分

    实例327 利用简易摄像头编写监控程序 实例328 编写监控录像程序 实例329 定时监控程序 实例330 医疗行业数字视频监控系统 实例331 远程视频监控系统 12.5 扫描、条形码、POS控制 实例332 利用条形码扫描器...

    Visual C++程序开发范例宝典(光盘) 第八部分

    实例327 利用简易摄像头编写监控程序 实例328 编写监控录像程序 实例329 定时监控程序 实例330 医疗行业数字视频监控系统 实例331 远程视频监控系统 12.5 扫描、条形码、POS控制 实例332 利用条形码扫描器...

    C语言220例从易到难源代码

    040 文件的字数统计程序 041 学生成绩管理程序 第二部分 数据结构篇 042 插入排序 043 希尔排序 044 冒泡排序 045 快速排序 046 选择排序 047 堆排序 048 归并排序 049 基数排序 050 二叉搜索树操作 ...

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    C语言经典源代码实例 数据结构 操作系统 图形等

    040 文件的字数统计程序 041 学生成绩管理程序 第二部分 数据结构篇 042 插入排序 043 希尔排序 044 冒泡排序 045 快速排序 046 选择排序 047 堆排序 048 归并排序 049 基数排序 050 二叉搜索树操作 ...

    C语言源代码实例.rar

    040 文件的字数统计程序 041 学生成绩管理程序 第二部分 数据结构篇 042 插入排序 043 希尔排序 044 冒泡排序 045 快速排序 046 选择排序 047 堆排序 048 归并排序 049 基数排序 050 二叉搜索树操作 ...

    C语言学习实例220例

    040 文件的字数统计程序 041 学生成绩管理程序 第二部分 数据结构篇 042 插入排序 043 希尔排序 044 冒泡排序 045 快速排序 046 选择排序 047 堆排序 048 归并排序 049 基数排序 050 二叉搜索树操作 051 二项式系数...

Global site tag (gtag.js) - Google Analytics